All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jakub Kicinski <kuba@kernel.org>
To: xuanzhuo@linux.alibaba.com
Cc: lorenzo@kernel.org, andrew+netdev@lunn.ch, pabeni@redhat.com,
	vadim.fedorenko@linux.dev, davem@davemloft.net,
	guwen@linux.alibaba.com, lulie@linux.alibaba.com,
	hkallweit1@gmail.com, edumazet@google.com,
	lukas.bulwahn@redhat.com, andrew@lunn.ch, dong100@mucse.com,
	dust.li@linux.alibaba.com, netdev@vger.kernel.org
Subject: Re: [net-next,v25,4/6] eea: create/destroy rx,tx queues for netdevice open and stop
Date: Tue, 3 Feb 2026 20:12:37 -0800	[thread overview]
Message-ID: <20260203201237.35c5f756@kernel.org> (raw)
In-Reply-To: <20260204040054.1698677-2-kuba@kernel.org>

On Tue,  3 Feb 2026 20:00:55 -0800 Jakub Kicinski wrote:
> > +	err = enet_bind_new_q_and_cfg(enet, ctx);
> > +	if (err) {
> > +		netdev_err(enet->netdev,
> > +			   "eea reset: bind new queues failed. err %d\n",
> > +			   err);
> > +
> > +		return err;
> > +	}  
> 
> When enet_bind_new_q_and_cfg() fails, what happens to the queues allocated
> by eea_alloc_rxtx_q_mem() at line 289? They're now assigned to ctx->rx and
> ctx->tx but haven't been bound to enet yet.
> 
> After eea_netdev_stop() sets enet->started = false, a subsequent call to
> eea_netdev_stop() will return early at line 228 without calling
> eea_free_rxtx_q_mem(). If enet_bind_new_q_and_cfg() fails before binding,
> the queues remain in ctx with no cleanup path.
> 
> The comment suggests deferring cleanup to "normal NIC cleanup" but
> eea_net_remove() doesn't call eea_free_rxtx_q_mem(), and future reset
> attempts would allocate new queues without freeing these.

I think AI is slightly confused here but so am I. I don't get where you
free he previous resources in this flow. The "bind_new_q_and_cfg" just
overrides stuff, who frees the old set of rings?

Also as I already mentioned in previous manual review you are not
pre-allocating enough. You should also request necessary extra IRQs
_before_ you start tearing down the old state.

> > +static struct sk_buff *eea_rx_build_split_hdr_skb(struct eea_net_rx *rx,
> > +						  struct eea_rx_ctx *ctx)
> > +{
> > +	struct eea_rx_meta *meta = ctx->meta;
> > +	struct sk_buff *skb;
> > +	u32 truesize;
> > +
> > +	dma_sync_single_for_cpu(rx->enet->edev->dma_dev, meta->hdr_dma,
> > +				ctx->hdr_len, DMA_FROM_DEVICE);
> > +
> > +	skb = napi_alloc_skb(&rx->napi, ctx->hdr_len);
> > +	if (unlikely(!skb))
> > +		return NULL;
> > +
> > +	truesize = meta->headroom + ctx->len;
> > +
> > +	skb_put_data(skb, ctx->meta->hdr_addr, ctx->hdr_len);
> > +
> > +	if (ctx->len) {
> > +		skb_add_rx_frag(skb, 0, meta->page,
> > +				meta->offset + meta->headroom,
> > +				ctx->len, truesize);
> > +
> > +		eea_consume_rx_buffer(rx, meta, truesize);
> > +	}  
> 
> Is the truesize calculation correct for split header mode? Looking at line
> 255, truesize is calculated as meta->headroom + ctx->len.
> 
> In eea_rx_post() at line 500, buffers are allocated with space for
> [headroom][data][tailroom], where tailroom is typically 128 bytes for
> skb_shared_info. The tailroom is reserved but not included in the truesize
> calculation here.
> 
> When eea_consume_rx_buffer() advances meta->offset by only
> (headroom + data_len), the reserved tailroom space remains unconsumed. After
> alignment in meta_align_offset(), the next fragment may overlap with the
> previous fragment's tailroom space.
> 
> Compare with the non-split header path in eea_rx_build_skb() at line 290,
> which includes shinfo_size in truesize:
> 
>     truesize = meta->headroom + ctx->len + shinfo_size;
> 
> Should the split header path also include meta->tailroom or shinfo_size in
> the truesize calculation?

This one - I think the AI is just confused by how frags work.

  reply	other threads:[~2026-02-04  4:12 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-02  9:06 [PATCH net-next v25 0/6] eea: Add basic driver framework for Alibaba Elastic Ethernet Adaptor Xuan Zhuo
2026-02-02  9:06 ` [PATCH net-next v25 1/6] eea: introduce PCI framework Xuan Zhuo
2026-02-02  9:06 ` [PATCH net-next v25 2/6] eea: introduce ring and descriptor structures Xuan Zhuo
2026-02-02  9:06 ` [PATCH net-next v25 3/6] eea: probe the netdevice and create adminq Xuan Zhuo
2026-02-02  9:06 ` [PATCH net-next v25 4/6] eea: create/destroy rx,tx queues for netdevice open and stop Xuan Zhuo
2026-02-04  4:00   ` [net-next,v25,4/6] " Jakub Kicinski
2026-02-04  4:12     ` Jakub Kicinski [this message]
2026-02-04 11:46       ` Xuan Zhuo
2026-02-05  2:31         ` Jakub Kicinski
2026-02-05  1:48       ` Xuan Zhuo
2026-02-05  2:33         ` Jakub Kicinski
2026-02-02  9:06 ` [PATCH net-next v25 5/6] eea: introduce ethtool support Xuan Zhuo
2026-02-02  9:06 ` [PATCH net-next v25 6/6] eea: introduce callback for ndo_get_stats64 Xuan Zhuo
2026-02-04  4:08   ` [net-next,v25,6/6] " Jakub Kicinski
2026-02-04  4:13     ` Jakub Kicinski

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=20260203201237.35c5f756@kernel.org \
    --to=kuba@kernel.org \
    --cc=andrew+netdev@lunn.ch \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=dong100@mucse.com \
    --cc=dust.li@linux.alibaba.com \
    --cc=edumazet@google.com \
    --cc=guwen@linux.alibaba.com \
    --cc=hkallweit1@gmail.com \
    --cc=lorenzo@kernel.org \
    --cc=lukas.bulwahn@redhat.com \
    --cc=lulie@linux.alibaba.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=vadim.fedorenko@linux.dev \
    --cc=xuanzhuo@linux.alibaba.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.