From: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
To: Gerhard Engleder <gerhard@engleder-embedded.com>
Cc: <netdev@vger.kernel.org>, <bpf@vger.kernel.org>,
<davem@davemloft.net>, <kuba@kernel.org>, <edumazet@google.com>,
<pabeni@redhat.com>, <ast@kernel.org>, <daniel@iogearbox.net>,
<hawk@kernel.org>, <john.fastabend@gmail.com>
Subject: Re: [PATCH net-next v2 5/6] tsnep: Add RX queue info for XDP support
Date: Thu, 8 Dec 2022 13:59:50 +0100 [thread overview]
Message-ID: <Y5HfxltuOThxi+Wf@boxer> (raw)
In-Reply-To: <20221208054045.3600-6-gerhard@engleder-embedded.com>
On Thu, Dec 08, 2022 at 06:40:44AM +0100, Gerhard Engleder wrote:
> Register xdp_rxq_info with page_pool memory model. This is needed for
> XDP buffer handling.
>
> Signed-off-by: Gerhard Engleder <gerhard@engleder-embedded.com>
> ---
> drivers/net/ethernet/engleder/tsnep.h | 5 ++--
> drivers/net/ethernet/engleder/tsnep_main.c | 34 +++++++++++++++++-----
> 2 files changed, 30 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/net/ethernet/engleder/tsnep.h b/drivers/net/ethernet/engleder/tsnep.h
> index 0e7fc36a64e1..70bc133d4a9d 100644
> --- a/drivers/net/ethernet/engleder/tsnep.h
> +++ b/drivers/net/ethernet/engleder/tsnep.h
> @@ -127,6 +127,7 @@ struct tsnep_rx {
> u32 owner_counter;
> int increment_owner_counter;
> struct page_pool *page_pool;
> + struct xdp_rxq_info xdp_rxq;
this occupies full cacheline, did you make sure that you don't break
tsnep_rx layout with having xdp_rxq_info in the middle of the way?
>
> u32 packets;
> u32 bytes;
> @@ -139,11 +140,11 @@ struct tsnep_queue {
> struct tsnep_adapter *adapter;
> char name[IFNAMSIZ + 9];
>
> + struct napi_struct napi;
> +
> struct tsnep_tx *tx;
> struct tsnep_rx *rx;
>
> - struct napi_struct napi;
why this move?
> -
> int irq;
> u32 irq_mask;
> void __iomem *irq_delay_addr;
> diff --git a/drivers/net/ethernet/engleder/tsnep_main.c b/drivers/net/ethernet/engleder/tsnep_main.c
> index ebfc08c1c46d..2b662a98b62a 100644
> --- a/drivers/net/ethernet/engleder/tsnep_main.c
> +++ b/drivers/net/ethernet/engleder/tsnep_main.c
> @@ -806,6 +806,9 @@ static void tsnep_rx_ring_cleanup(struct tsnep_rx *rx)
> entry->page = NULL;
> }
>
> + if (xdp_rxq_info_is_reg(&rx->xdp_rxq))
> + xdp_rxq_info_unreg(&rx->xdp_rxq);
> +
> if (rx->page_pool)
> page_pool_destroy(rx->page_pool);
>
> @@ -821,7 +824,7 @@ static void tsnep_rx_ring_cleanup(struct tsnep_rx *rx)
> }
> }
>
> -static int tsnep_rx_ring_init(struct tsnep_rx *rx)
> +static int tsnep_rx_ring_init(struct tsnep_rx *rx, unsigned int napi_id)
> {
> struct device *dmadev = rx->adapter->dmadev;
> struct tsnep_rx_entry *entry;
> @@ -864,6 +867,15 @@ static int tsnep_rx_ring_init(struct tsnep_rx *rx)
> goto failed;
> }
>
> + retval = xdp_rxq_info_reg(&rx->xdp_rxq, rx->adapter->netdev,
> + rx->queue_index, napi_id);
> + if (retval)
> + goto failed;
> + retval = xdp_rxq_info_reg_mem_model(&rx->xdp_rxq, MEM_TYPE_PAGE_POOL,
> + rx->page_pool);
> + if (retval)
> + goto failed;
> +
> for (i = 0; i < TSNEP_RING_SIZE; i++) {
> entry = &rx->entry[i];
> next_entry = &rx->entry[(i + 1) % TSNEP_RING_SIZE];
> @@ -1112,7 +1124,8 @@ static bool tsnep_rx_pending(struct tsnep_rx *rx)
> }
>
> static int tsnep_rx_open(struct tsnep_adapter *adapter, void __iomem *addr,
> - int queue_index, struct tsnep_rx *rx)
> + unsigned int napi_id, int queue_index,
> + struct tsnep_rx *rx)
> {
> dma_addr_t dma;
> int retval;
> @@ -1122,7 +1135,7 @@ static int tsnep_rx_open(struct tsnep_adapter *adapter, void __iomem *addr,
> rx->addr = addr;
> rx->queue_index = queue_index;
>
> - retval = tsnep_rx_ring_init(rx);
> + retval = tsnep_rx_ring_init(rx, napi_id);
> if (retval)
> return retval;
>
> @@ -1250,6 +1263,7 @@ int tsnep_netdev_open(struct net_device *netdev)
> {
> struct tsnep_adapter *adapter = netdev_priv(netdev);
> int i;
> + unsigned int napi_id;
> void __iomem *addr;
> int tx_queue_index = 0;
> int rx_queue_index = 0;
> @@ -1257,6 +1271,11 @@ int tsnep_netdev_open(struct net_device *netdev)
>
> for (i = 0; i < adapter->num_queues; i++) {
> adapter->queue[i].adapter = adapter;
> +
> + netif_napi_add(adapter->netdev, &adapter->queue[i].napi,
> + tsnep_poll);
> + napi_id = adapter->queue[i].napi.napi_id;
> +
> if (adapter->queue[i].tx) {
> addr = adapter->addr + TSNEP_QUEUE(tx_queue_index);
> retval = tsnep_tx_open(adapter, addr, tx_queue_index,
> @@ -1267,7 +1286,7 @@ int tsnep_netdev_open(struct net_device *netdev)
> }
> if (adapter->queue[i].rx) {
> addr = adapter->addr + TSNEP_QUEUE(rx_queue_index);
> - retval = tsnep_rx_open(adapter, addr,
> + retval = tsnep_rx_open(adapter, addr, napi_id,
> rx_queue_index,
> adapter->queue[i].rx);
> if (retval)
> @@ -1299,8 +1318,6 @@ int tsnep_netdev_open(struct net_device *netdev)
> goto phy_failed;
>
> for (i = 0; i < adapter->num_queues; i++) {
> - netif_napi_add(adapter->netdev, &adapter->queue[i].napi,
> - tsnep_poll);
> napi_enable(&adapter->queue[i].napi);
>
> tsnep_enable_irq(adapter, adapter->queue[i].irq_mask);
> @@ -1321,6 +1338,8 @@ int tsnep_netdev_open(struct net_device *netdev)
> tsnep_rx_close(adapter->queue[i].rx);
> if (adapter->queue[i].tx)
> tsnep_tx_close(adapter->queue[i].tx);
> +
> + netif_napi_del(&adapter->queue[i].napi);
> }
> return retval;
> }
> @@ -1339,7 +1358,6 @@ int tsnep_netdev_close(struct net_device *netdev)
> tsnep_disable_irq(adapter, adapter->queue[i].irq_mask);
>
> napi_disable(&adapter->queue[i].napi);
> - netif_napi_del(&adapter->queue[i].napi);
>
> tsnep_free_irq(&adapter->queue[i], i == 0);
>
> @@ -1347,6 +1365,8 @@ int tsnep_netdev_close(struct net_device *netdev)
> tsnep_rx_close(adapter->queue[i].rx);
> if (adapter->queue[i].tx)
> tsnep_tx_close(adapter->queue[i].tx);
> +
> + netif_napi_del(&adapter->queue[i].napi);
> }
>
> return 0;
> --
> 2.30.2
>
next prev parent reply other threads:[~2022-12-08 13:00 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-08 5:40 [PATCH net-next v2 0/6] tsnep: XDP support Gerhard Engleder
2022-12-08 5:40 ` [PATCH net-next v2 1/6] tsnep: Add adapter down state Gerhard Engleder
2022-12-08 5:40 ` [PATCH net-next v2 2/6] tsnep: Add XDP TX support Gerhard Engleder
2022-12-08 14:10 ` Maciej Fijalkowski
2022-12-08 19:57 ` Gerhard Engleder
2022-12-09 2:23 ` Saeed Mahameed
2022-12-09 8:02 ` Gerhard Engleder
2022-12-08 5:40 ` [PATCH net-next v2 3/6] tsnep: Support XDP BPF program setup Gerhard Engleder
2022-12-09 0:43 ` Saeed Mahameed
2022-12-09 8:06 ` Gerhard Engleder
2022-12-21 20:19 ` Gerhard Engleder
2022-12-08 5:40 ` [PATCH net-next v2 4/6] tsnep: Prepare RX buffer for XDP support Gerhard Engleder
2022-12-09 0:46 ` Saeed Mahameed
2022-12-08 5:40 ` [PATCH net-next v2 5/6] tsnep: Add RX queue info " Gerhard Engleder
2022-12-08 12:59 ` Maciej Fijalkowski [this message]
2022-12-08 20:32 ` Gerhard Engleder
2022-12-09 0:53 ` Saeed Mahameed
2022-12-09 8:11 ` Gerhard Engleder
2022-12-08 5:40 ` [PATCH net-next v2 6/6] tsnep: Add XDP RX support Gerhard Engleder
2022-12-08 13:40 ` Maciej Fijalkowski
2022-12-08 22:12 ` Gerhard Engleder
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Y5HfxltuOThxi+Wf@boxer \
--to=maciej.fijalkowski@intel.com \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=gerhard@engleder-embedded.com \
--cc=hawk@kernel.org \
--cc=john.fastabend@gmail.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.