On Thu, Apr 17, 2025 at 4:15 PM Mina Almasry <almasrym...@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 <almasrym...@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. > 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; > } > -- > 2.49.0.805.g082f7c87e0-goog >