All of lore.kernel.org
 help / color / mirror / Atom feed
From: Manish Awasthi <mawasthi@linux.microsoft.com>
To: netdev-bot+sashiko@kernel.org
Cc: kys@microsoft.com, haiyangz@microsoft.com, wei.liu@kernel.org,
	decui@microsoft.com, longli@microsoft.com, andrew+netdev@lunn.ch,
	davem@davemloft.net, edumazet@google.com, kuba@kernel.org,
	pabeni@redhat.com, kotaranov@microsoft.com, horms@kernel.org,
	linux-hyperv@vger.kernel.org, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org,
	bpf@vger.kernel.org, nipun.gupta@amd.com, nikhil.agarwal@amd.com,
	gargaditya@linux.microsoft.com, ernis@linux.microsoft.com,
	kees@kernel.org, paulros@microsoft.com, mawasthi@microsoft.com,
	Manish Awasthi <mawasthi@linux.microsoft.com>
Subject: Re: [PATCH net-next 4/4] net: mana: Add support for CDX device ID 0x00C2
Date: Mon, 28 Sep 2026 20:25:55 +0000	[thread overview]
Message-ID: <20260928202555.617331-1-mawasthi@linux.microsoft.com> (raw)
In-Reply-To: <179035761944.2160803.12943182451050438147@kernel.org>

thanks for review. Comments inline.

> Thank you for your contribution! Sashiko AI review found 3 potential
> issue(s) to consider.
> 
> Critical: 0 · High: 0 (1) · Medium: 1 · Low: 2
> 
> If you believe none of the issues are legitimate, please reply to each
> issue of Medium severity or higher and explain why the AI is wrong.
> If any of them are legitimate and you plan to respin, please let patchwork
> know by including "pw-bot: cr" as a separate line at the end of your reply
> (one such reply per series is enough).
> 
> - [Medium] The CDX transport installs `.dev_reset = mana_cdx_dev_reset`
>   (-> `cdx_dev_reset()`) but has no way to recover afterwards.
> - [Low] `mana_cdx_setup_hwc_irqs()` skips IRQ affinity hints.
> - [Low] The comment in `mana_gd_query_max_resources()` (gdma_main.c)
>   says: "Only reset on platforms that support dynamic MSI-X allocation;…
> 
> Pre-existing issues:
> - [High] This problem wasn't introduced by this patch, but the shared HWC
>   bootstrap path that the new CDX transport now reaches trusts a device-…
> 
> --
> 
> net: mana: Add support for CDX device ID 0x00C2
> 
> This adds a CDX bus transport for MANA, built as mana_cdx.ko on top of
> the shared gdma_core.ko, for device ID 0x00C2. It allocates the whole MSI
> pool at probe time, limits the queue count to the available vectors,
> restricts DMA to 32 bits, and adds a per-bus auxiliary device name prefix
> so the CDX auxiliary devices stay separate from the PCI ones.
> 
> > diff --git a/drivers/net/ethernet/microsoft/mana/gdma_cdx.c b/drivers/net/ethernet/microsoft/mana/gdma_cdx.c
> > new file mode 100644
> > index 0000000000000..0d01e3d2f0d96
> > --- /dev/null
> > +++ b/drivers/net/ethernet/microsoft/mana/gdma_cdx.c
> > @@ -0,0 +1,340 @@
> 
> [ ... ]
> 
> > +static int mana_cdx_dev_reset(struct gdma_context *gc)
> > +{
> > +	return cdx_dev_reset(gc->dev);
> > +}
> 
> [Severity: Medium]
> Can this reset leave the whole function unusable, with no recovery short
> of a manual rebind?
> 
> mana_dealloc_queues() calls it when a TX queue still has pending_sends
> after the drain timeout:
> 
> mana_tx_timeout()
>   -> queue_reset_work
>     -> mana_per_port_queue_reset_work_handler()
>       -> mana_dealloc_queues()
>         -> mana_gd_dev_reset()
>           -> mana_cdx_dev_reset()
>             -> cdx_dev_reset()
> 
This version of the driver doesn't support recovery after mana_cdx_dev_reset.

> The detach paths can reach mana_dealloc_queues() too.
> 
> drivers/cdx/controller/mc_cdx_pcol.h documents MC_CMD_CDX_DEVICE_RESET
> like this:
> 
>  * After this call completes, device DMA and interrupts are quiesced, devices
>  * logic is reset in a hardware-specific way and DMA bus mastering is disabled.
> 
> That resets the HWC, all EQs, the other vPorts and RDMA, but the driver
> keeps treating all of them as live. There is no re-init path on CDX:
> 
> - Bus mastering is only turned on by cdx_set_master() in
>   mana_cdx_gd_probe().
> - MSI is only enabled in mana_cdx_setup_hwc_irqs().
> - gdma_cdx_driver has no reset_prepare or reset_done callbacks.
> - mana_cdx_bus_ops has no schedule_serv_work.
> 
> So would the HWC requests that follow (mana_disable_vport_rx(), vPort
> object teardown, re-attach) all time out? And when
> mana_gf_stats_work_handler() detects the HWC timeout, would its servicing
> request just be rejected with -EOPNOTSUPP?
> 
The first HWC request after reset call will wait for default timeout and subsequent commands will fail after 1ms.
A future patch will change the tx timeout recovery to reset the timeout to 0 after dev_reset for both pci and cdx.

> On PCI, the same reset through pcie_flr() is backed by HWC-timeout
> recovery through mana_pci_schedule_serv_work().
> 
> CDX also still advertises stall-SQ recovery to firmware through the
> common GDMA_DRV_CAP_FLAGS1:
> 
> 	 GDMA_DRV_CAP_FLAG_1_HANDLE_STALL_SQ_RECOVERY | \
> 
> Without a dev_reset op, mana_gd_dev_reset() would return -EOPNOTSUPP, and
> a stall in one queue would not reset the whole function.
This flag represents the capability of the driver to support ndo_tx_timeout for cdx.
> 
> There is a second trigger. reset_store() in drivers/cdx/cdx.c calls
> cdx_dev_reset() on a bound device, and
> Documentation/ABI/testing/sysfs-bus-cdx says the driver gets notified.
> With no reset_prepare/reset_done here, wouldn't a sysfs reset leave the
> device in the same state?
> 
> [ ... ]
> 
> > +	xa_init(&gc->irq_contexts);
> > +
> > +	/* No IRQ affinity hint is applied here. The PCI transport spreads its
> > +	 * vectors over the NUMA node local to the device; the CDX platforms
> > +	 * this driver targets are single-node, so there is nothing to spread
> > +	 * over. Affinity management can be added when a multi-node CDX host
> > +	 * exists to validate it against.
> > +	 */
> 
The support for reset_prepare/reset_done will be added in future.

> [Severity: Low]
> Is the reason given in this comment accurate? The PCI transport does more
> than spread over the local node. mana_irq_setup_numa_aware() skips SMT
> siblings and puts each vector on a different physical core:
> 
> 	cpumask_andnot(cpus, cpus, topology_sibling_cpumask(cpu));
> 	...
> 	irq_set_affinity_and_hint(*irqs++, topology_sibling_cpumask(cpu));
> 
> mana_irq_setup_linear() also pins vector i to CPU i.
> 
> A single-node multi-core SoC still has cores to spread over. On CDX, the
> EQ interrupts keep the default affinity and get no per-queue CPU
> placement.
> 
> Could the comment, and the commit message, describe this difference from
> PCI accurately?
> 
> [ ... ]
> 
> > +static int mana_cdx_setup_remaining_irqs(struct gdma_context *gc)
> > +{
> > +	unsigned int max_queues_vport;
> > +
> > +	/* mana_gd_query_max_resources() may turn MSI sharing back on and round
> > +	 * the per-vPort queue count up to MANA_DEF_NUM_QUEUES. CDX sizes its
> > +	 * vector pool at probe time and cannot grow it later, and the HWC
> > +	 * vector must stay private, so give every vPort a private slice of the
> > +	 * remaining vectors instead. gc->max_num_queues is already capped at
> > +	 * num_msix_usable - 1 by the core.
> > +	 */
> > +	gc->msi_sharing = false;
> > +	max_queues_vport = (gc->num_msix_usable - 1) / gc->num_ports;
> 
> [ ... ]
> 
> > +	gc->max_num_queues_vport = min(gc->max_num_queues, max_queues_vport);
> 
> [Severity: Low]
> This isn't a bug, but after this patch the comment in
> mana_gd_query_max_resources() in gdma_main.c is no longer accurate:
> 
> 	 * not before. Only reset on platforms that support dynamic
> 	 * MSI-X allocation; on non-dyn platforms msi_sharing is
> 	 * unconditionally true (set in mana_gd_setup_hwc_irqs).
> 
> CDX leaves msix_can_alloc_dyn NULL, so it is a non-dyn bus. Even so,
> mana_cdx_setup_hwc_irqs() sets msi_sharing to false. The core may set it
> back to true, and then mana_cdx_setup_remaining_irqs() forces it to false
> again and overwrites max_num_queues_vport.
> 
> Should the core comment be updated? It may also help to document in the
> core that a transport is expected to override msi_sharing and
> max_num_queues_vport in setup_remaining_irqs.
> 
> [ ... ]
> 
> > +	/* gc->is_pf is intentionally left clear: this device uses the VF
> > +	 * register layout, and the vPort and MAC filter registration that
> > +	 * is_pf selects is not required on this bus.
> > +	 */
> > +
> > +	err = mana_gd_setup(gc);
> > +	if (err)
> > +		goto unmap_bar;
> 
> [Severity: High]
> This issue was not introduced by this patch, but the shared HWC bootstrap
> path that CDX now enters here uses a doorbell index supplied by the device
> without checking its bounds.
> 
> mana_hwc_init_event_handler() in hw_channel.c stores the 16-bit doorbell
> directly from the EQE:
> 
> 	case GDMA_EQE_HWC_INIT_EQ_ID_DB:
> 		eq_db.as_uint32 = event->details[0];
> 		hwc->cq->gdma_eq->id = eq_db.eq_id;
> 		gd->doorbell = eq_db.doorbell;
> 
> mana_hwc_establish_channel() checks cq->id against max_num_cqs, but it
> never checks the doorbell. mana_gd_ring_doorbell() then computes the MMIO
> address:
> 
> 	void __iomem *addr = gc->db_page_base + gc->db_page_size * db_index;
> 
> db_page_size is at least 4KB and the doorbell can be as large as 0xFFFF.
> Could the next mana_gd_ring_eq() or mana_gd_ring_cq() then write far past
> the ioremapped BAR0, into unmapped vmalloc space or another mapping?
> 
> mana_gd_register_device() already has this check for the regular
> doorbell:
> 
> 	if (gc->db_page_off + gc->db_page_size * ((u64)resp.db_id + 1) > gc->bar0_size) {
> 
> Should the HWC path apply the same check? This affects the PCI transport
> as well.
> 
> [ ... ]
> 
> -- 
> Sashiko AI review · https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20260924173054.589291-1-mawasthi%40linux.microsoft.com

  reply	other threads:[~2026-09-28 20:26 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-24 17:30 [PATCH net-next 0/4] net: mana: Add support for the CDX bus Manish Awasthi
2026-09-24 17:30 ` [PATCH net-next 1/4] net: mana: Introduce gdma_bus_ops for bus-specific operations Manish Awasthi
2026-09-24 17:43   ` sashiko-bot
2026-09-25 17:33   ` netdev-bot+sashiko
2026-09-28 19:16   ` Haiyang Zhang
2026-09-24 17:30 ` [PATCH net-next 2/4] net: mana: Move PCI transport code into gdma_pci.c Manish Awasthi
2026-09-24 17:43   ` sashiko-bot
2026-09-25 17:33   ` netdev-bot+sashiko
2026-09-28 19:17   ` Haiyang Zhang
2026-09-24 17:30 ` [PATCH net-next 3/4] net: mana: Build the PCI transport as a separate module Manish Awasthi
2026-09-24 17:43   ` sashiko-bot
2026-09-28 19:18   ` Haiyang Zhang
2026-09-24 17:30 ` [PATCH net-next 4/4] net: mana: Add support for CDX device ID 0x00C2 Manish Awasthi
2026-09-24 17:43   ` sashiko-bot
2026-09-25 17:33   ` netdev-bot+sashiko
2026-09-28 20:25     ` Manish Awasthi [this message]
2026-09-29 13:57       ` Simon Horman
2026-09-29 23:45         ` Manish Awasthi
2026-10-06 15:12           ` Simon Horman
2026-09-28 19:18   ` Haiyang Zhang
2026-09-29 13:58 ` [PATCH net-next 0/4] net: mana: Add support for the CDX bus Simon Horman
2026-10-01  1:10 ` patchwork-bot+netdevbpf

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=20260928202555.617331-1-mawasthi@linux.microsoft.com \
    --to=mawasthi@linux.microsoft.com \
    --cc=andrew+netdev@lunn.ch \
    --cc=bpf@vger.kernel.org \
    --cc=davem@davemloft.net \
    --cc=decui@microsoft.com \
    --cc=edumazet@google.com \
    --cc=ernis@linux.microsoft.com \
    --cc=gargaditya@linux.microsoft.com \
    --cc=haiyangz@microsoft.com \
    --cc=horms@kernel.org \
    --cc=kees@kernel.org \
    --cc=kotaranov@microsoft.com \
    --cc=kuba@kernel.org \
    --cc=kys@microsoft.com \
    --cc=linux-hyperv@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=longli@microsoft.com \
    --cc=mawasthi@microsoft.com \
    --cc=netdev-bot+sashiko@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=nikhil.agarwal@amd.com \
    --cc=nipun.gupta@amd.com \
    --cc=pabeni@redhat.com \
    --cc=paulros@microsoft.com \
    --cc=wei.liu@kernel.org \
    /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.