Message ID | 20250417231540.2780723-8-almasrymina@google.com |
---|---|
State | New |
Headers | show |
Series | [net-next,v9,1/9] netmem: add niov->type attribute to distinguish different net_iov types | expand |
On Tue, Apr 22, 2025 at 10:43 AM Harshitha Ramamurthy <hramamurthy@google.com> wrote: > > On Thu, Apr 17, 2025 at 4:15 PM Mina Almasry <almasrymina@google.com> wrote: > > > > Use netmem_dma_*() helpers in gve_tx_dqo.c DQO-RDA paths to > > enable netmem TX support in that mode. > > > > Declare support for netmem TX in GVE DQO-RDA mode. > > > > Signed-off-by: Mina Almasry <almasrymina@google.com> > > > > --- > > > > v4: > > - New patch > > --- > > drivers/net/ethernet/google/gve/gve_main.c | 4 ++++ > > drivers/net/ethernet/google/gve/gve_tx_dqo.c | 8 +++++--- > > 2 files changed, 9 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ethernet/google/gve/gve_main.c > > index 8aaac9101377..430314225d4d 100644 > > --- a/drivers/net/ethernet/google/gve/gve_main.c > > +++ b/drivers/net/ethernet/google/gve/gve_main.c > > @@ -2665,6 +2665,10 @@ static int gve_probe(struct pci_dev *pdev, const struct pci_device_id *ent) > > > > dev_info(&pdev->dev, "GVE version %s\n", gve_version_str); > > dev_info(&pdev->dev, "GVE queue format %d\n", (int)priv->queue_format); > > + > > + if (!gve_is_gqi(priv) && !gve_is_qpl(priv)) > > + dev->netmem_tx = true; > > + > > a nit: but it would fit in better and be more uniform if this is set > earlier in the function where other features are set for the > net_device. > Thanks for taking a look. I actually thought about that while trying to implement this, but AFAIU (correct if wrong), gve_is_gqi and gve_is_qpl need priv to be initialized, so this feature set must be performed after gve_init_priv in this function. I suppose this feature checking maybe can be put before register_netdev. Do you prefer that?
diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ethernet/google/gve/gve_main.c index 8aaac9101377..430314225d4d 100644 --- a/drivers/net/ethernet/google/gve/gve_main.c +++ b/drivers/net/ethernet/google/gve/gve_main.c @@ -2665,6 +2665,10 @@ static int gve_probe(struct pci_dev *pdev, const struct pci_device_id *ent) dev_info(&pdev->dev, "GVE version %s\n", gve_version_str); dev_info(&pdev->dev, "GVE queue format %d\n", (int)priv->queue_format); + + if (!gve_is_gqi(priv) && !gve_is_qpl(priv)) + dev->netmem_tx = true; + gve_clear_probe_in_progress(priv); queue_work(priv->gve_wq, &priv->service_task); return 0; diff --git a/drivers/net/ethernet/google/gve/gve_tx_dqo.c b/drivers/net/ethernet/google/gve/gve_tx_dqo.c index 2eba868d8037..a27f1574a733 100644 --- a/drivers/net/ethernet/google/gve/gve_tx_dqo.c +++ b/drivers/net/ethernet/google/gve/gve_tx_dqo.c @@ -660,7 +660,8 @@ static int gve_tx_add_skb_no_copy_dqo(struct gve_tx_ring *tx, goto err; dma_unmap_len_set(pkt, len[pkt->num_bufs], len); - dma_unmap_addr_set(pkt, dma[pkt->num_bufs], addr); + netmem_dma_unmap_addr_set(skb_frag_netmem(frag), pkt, + dma[pkt->num_bufs], addr); ++pkt->num_bufs; gve_tx_fill_pkt_desc_dqo(tx, desc_idx, skb, len, addr, @@ -1038,8 +1039,9 @@ static void gve_unmap_packet(struct device *dev, dma_unmap_single(dev, dma_unmap_addr(pkt, dma[0]), dma_unmap_len(pkt, len[0]), DMA_TO_DEVICE); for (i = 1; i < pkt->num_bufs; i++) { - dma_unmap_page(dev, dma_unmap_addr(pkt, dma[i]), - dma_unmap_len(pkt, len[i]), DMA_TO_DEVICE); + netmem_dma_unmap_page_attrs(dev, dma_unmap_addr(pkt, dma[i]), + dma_unmap_len(pkt, len[i]), + DMA_TO_DEVICE, 0); } pkt->num_bufs = 0; }
Use netmem_dma_*() helpers in gve_tx_dqo.c DQO-RDA paths to enable netmem TX support in that mode. Declare support for netmem TX in GVE DQO-RDA mode. Signed-off-by: Mina Almasry <almasrymina@google.com> --- v4: - New patch --- drivers/net/ethernet/google/gve/gve_main.c | 4 ++++ drivers/net/ethernet/google/gve/gve_tx_dqo.c | 8 +++++--- 2 files changed, 9 insertions(+), 3 deletions(-)