[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1629257542-36145-7-git-send-email-linyunsheng@huawei.com>
Date: Wed, 18 Aug 2021 11:32:22 +0800
From: Yunsheng Lin <linyunsheng@...wei.com>
To: <davem@...emloft.net>, <kuba@...nel.org>
CC: <alexander.duyck@...il.com>, <linux@...linux.org.uk>,
<mw@...ihalf.com>, <linuxarm@...neuler.org>,
<yisen.zhuang@...wei.com>, <salil.mehta@...wei.com>,
<thomas.petazzoni@...tlin.com>, <hawk@...nel.org>,
<ilias.apalodimas@...aro.org>, <ast@...nel.org>,
<daniel@...earbox.net>, <john.fastabend@...il.com>,
<akpm@...ux-foundation.org>, <peterz@...radead.org>,
<will@...nel.org>, <willy@...radead.org>, <vbabka@...e.cz>,
<fenghua.yu@...el.com>, <guro@...com>, <peterx@...hat.com>,
<feng.tang@...el.com>, <jgg@...pe.ca>, <mcroce@...rosoft.com>,
<hughd@...gle.com>, <jonathan.lemon@...il.com>, <alobakin@...me>,
<willemb@...gle.com>, <wenxu@...oud.cn>, <cong.wang@...edance.com>,
<haokexin@...il.com>, <nogikh@...gle.com>, <elver@...gle.com>,
<yhs@...com>, <kpsingh@...nel.org>, <andrii@...nel.org>,
<kafai@...com>, <songliubraving@...com>, <netdev@...r.kernel.org>,
<linux-kernel@...r.kernel.org>, <bpf@...r.kernel.org>,
<chenhao288@...ilicon.com>, <edumazet@...gle.com>,
<yoshfuji@...ux-ipv6.org>, <dsahern@...nel.org>,
<memxor@...il.com>, <linux@...pel-privat.de>, <atenart@...nel.org>,
<weiwan@...gle.com>, <ap420073@...il.com>, <arnd@...db.de>,
<mathew.j.martineau@...ux.intel.com>, <aahringo@...hat.com>,
<ceggers@...i.de>, <yangbo.lu@....com>, <fw@...len.de>,
<xiangxia.m.yue@...il.com>, <linmiaohe@...wei.com>
Subject: [PATCH RFC 6/7] net: hns3: support tx recycling in the hns3 driver
Use netif_recyclable_napi_add() to register page pool to
the NAPI instance, and avoid doing the DMA mapping/unmapping
when the page is from page pool.
Signed-off-by: Yunsheng Lin <linyunsheng@...wei.com>
---
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 32 +++++++++++++++----------
1 file changed, 19 insertions(+), 13 deletions(-)
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
index fcbeb1f..ab86566 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
@@ -1689,12 +1689,18 @@ static int hns3_map_and_fill_desc(struct hns3_enet_ring *ring, void *priv,
return 0;
} else {
skb_frag_t *frag = (skb_frag_t *)priv;
+ struct page *page = skb_frag_page(frag);
size = skb_frag_size(frag);
if (!size)
return 0;
- dma = skb_frag_dma_map(dev, frag, 0, size, DMA_TO_DEVICE);
+ if (skb_frag_is_pp(frag) && page->pp->p.dev == dev) {
+ dma = page_pool_get_dma_addr(page) + skb_frag_off(frag);
+ type = DESC_TYPE_PP_FRAG;
+ } else {
+ dma = skb_frag_dma_map(dev, frag, 0, size, DMA_TO_DEVICE);
+ }
}
if (unlikely(dma_mapping_error(dev, dma))) {
@@ -4525,7 +4531,7 @@ static int hns3_nic_init_vector_data(struct hns3_nic_priv *priv)
ret = hns3_get_vector_ring_chain(tqp_vector,
&vector_ring_chain);
if (ret)
- goto map_ring_fail;
+ return ret;
ret = h->ae_algo->ops->map_ring_to_vector(h,
tqp_vector->vector_irq, &vector_ring_chain);
@@ -4533,19 +4539,10 @@ static int hns3_nic_init_vector_data(struct hns3_nic_priv *priv)
hns3_free_vector_ring_chain(tqp_vector, &vector_ring_chain);
if (ret)
- goto map_ring_fail;
-
- netif_napi_add(priv->netdev, &tqp_vector->napi,
- hns3_nic_common_poll, NAPI_POLL_WEIGHT);
+ return ret;
}
return 0;
-
-map_ring_fail:
- while (i--)
- netif_napi_del(&priv->tqp_vector[i].napi);
-
- return ret;
}
static void hns3_nic_init_coal_cfg(struct hns3_nic_priv *priv)
@@ -4754,7 +4751,7 @@ static void hns3_alloc_page_pool(struct hns3_enet_ring *ring)
(PAGE_SIZE << hns3_page_order(ring)),
.nid = dev_to_node(ring_to_dev(ring)),
.dev = ring_to_dev(ring),
- .dma_dir = DMA_FROM_DEVICE,
+ .dma_dir = DMA_BIDIRECTIONAL,
.offset = 0,
.max_len = PAGE_SIZE << hns3_page_order(ring),
};
@@ -4923,6 +4920,15 @@ int hns3_init_all_ring(struct hns3_nic_priv *priv)
u64_stats_init(&priv->ring[i].syncp);
}
+ for (i = 0; i < priv->vector_num; i++) {
+ struct hns3_enet_tqp_vector *tqp_vector;
+
+ tqp_vector = &priv->tqp_vector[i];
+ netif_recyclable_napi_add(priv->netdev, &tqp_vector->napi,
+ hns3_nic_common_poll, NAPI_POLL_WEIGHT,
+ tqp_vector->rx_group.ring->page_pool);
+ }
+
return 0;
out_when_alloc_ring_memory:
--
2.7.4
Powered by blists - more mailing lists