* [PATCH net-next] net: mana: Add handler for sriov configure
@ 2026-05-08 22:04 Haiyang Zhang
2026-05-08 22:37 ` Bjorn Helgaas
2026-05-09 22:05 ` sashiko-bot
0 siblings, 2 replies; 5+ messages in thread
From: Haiyang Zhang @ 2026-05-08 22:04 UTC (permalink / raw)
To: linux-hyperv, netdev, K. Y. Srinivasan, Haiyang Zhang, Wei Liu,
Dexuan Cui, Long Li, Andrew Lunn, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Bjorn Helgaas, Simon Horman,
Shradha Gupta, Dipayaan Roy, Erni Sri Satya Vennela, linux-kernel,
linux-pci
Cc: paulros
From: Haiyang Zhang <haiyangz@microsoft.com>
Add callback function for the pci_driver, sriov_configure.
Also disable VF autoprobe when it runs as PF driver on bare metal,
since the hardware side may not have the VF ready immediately.
Export pci_vf_drivers_autoprobe() so the driver can toggle the VF
autoprobe flag.
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
---
.../net/ethernet/microsoft/mana/gdma_main.c | 20 +++++++++++++++++++
drivers/pci/iov.c | 1 +
2 files changed, 21 insertions(+)
diff --git a/drivers/net/ethernet/microsoft/mana/gdma_main.c b/drivers/net/ethernet/microsoft/mana/gdma_main.c
index 3bc3fff55999..767f11d5b351 100644
--- a/drivers/net/ethernet/microsoft/mana/gdma_main.c
+++ b/drivers/net/ethernet/microsoft/mana/gdma_main.c
@@ -2094,6 +2094,11 @@ static int mana_gd_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
gc->numa_node = dev_to_node(&pdev->dev);
gc->is_pf = mana_is_pf(pdev->device);
+
+ /* Disable VF autoprobe on BM */
+ if (gc->is_pf)
+ pci_vf_drivers_autoprobe(pdev, false);
+
gc->bar0_va = bar0_va;
gc->dev = &pdev->dev;
xa_init(&gc->irq_contexts);
@@ -2262,6 +2267,20 @@ static void mana_gd_shutdown(struct pci_dev *pdev)
pci_disable_device(pdev);
}
+static int mana_sriov_configure(struct pci_dev *pdev, int numvfs)
+{
+ int err = 0;
+
+ dev_info(&pdev->dev, "Requested num VFs: %d\n", numvfs);
+
+ if (numvfs > 0)
+ err = pci_enable_sriov(pdev, numvfs);
+ else
+ pci_disable_sriov(pdev);
+
+ return err ? err : numvfs;
+}
+
static const struct pci_device_id mana_id_table[] = {
{ PCI_DEVICE(PCI_VENDOR_ID_MICROSOFT, MANA_PF_DEVICE_ID) },
{ PCI_DEVICE(PCI_VENDOR_ID_MICROSOFT, MANA_VF_DEVICE_ID) },
@@ -2276,6 +2295,7 @@ static struct pci_driver mana_driver = {
.suspend = mana_gd_suspend,
.resume = mana_gd_resume,
.shutdown = mana_gd_shutdown,
+ .sriov_configure = mana_sriov_configure,
};
static int __init mana_driver_init(void)
diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
index 91ac4e37ecb9..5a701f44b8fd 100644
--- a/drivers/pci/iov.c
+++ b/drivers/pci/iov.c
@@ -1127,6 +1127,7 @@ void pci_vf_drivers_autoprobe(struct pci_dev *dev, bool auto_probe)
if (dev->is_physfn)
dev->sriov->drivers_autoprobe = auto_probe;
}
+EXPORT_SYMBOL_GPL(pci_vf_drivers_autoprobe);
/**
* pci_iov_bus_range - find bus range used by Virtual Function
--
2.34.1
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH net-next] net: mana: Add handler for sriov configure
2026-05-08 22:04 [PATCH net-next] net: mana: Add handler for sriov configure Haiyang Zhang
@ 2026-05-08 22:37 ` Bjorn Helgaas
2026-05-08 22:47 ` [EXTERNAL] " Haiyang Zhang
2026-05-09 22:05 ` sashiko-bot
1 sibling, 1 reply; 5+ messages in thread
From: Bjorn Helgaas @ 2026-05-08 22:37 UTC (permalink / raw)
To: Haiyang Zhang
Cc: linux-hyperv, netdev, K. Y. Srinivasan, Haiyang Zhang, Wei Liu,
Dexuan Cui, Long Li, Andrew Lunn, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Bjorn Helgaas, Simon Horman,
Shradha Gupta, Dipayaan Roy, Erni Sri Satya Vennela, linux-kernel,
linux-pci, paulros
On Fri, May 08, 2026 at 03:04:06PM -0700, Haiyang Zhang wrote:
> From: Haiyang Zhang <haiyangz@microsoft.com>
>
> Add callback function for the pci_driver, sriov_configure.
>
> Also disable VF autoprobe when it runs as PF driver on bare metal,
> since the hardware side may not have the VF ready immediately.
>
> Export pci_vf_drivers_autoprobe() so the driver can toggle the VF
> autoprobe flag.
Technically pci_vf_drivers_autoprobe() doesn't *toggle* the autoprobe
flag. That would mean setting it to the opposite of its current
value.
Here I would say "so the driver can prevent autoprobing of the VFs",
which is the intent.
Out of curiosity, how do the VFs eventually get probed? I guess
there's some other mechanism that tells you when they're ready, and
you manually use sysfs 'sriov_drivers_autoprobe' to enable probing,
then bind drivers to them via sysfs?
The prevention of autoprobing sounds like a critical part of this
change; might be worth saying something in the subject, because "add
sriov configure" doesn't include much information.
> Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
I assume this would go via a net tree since that's where the bulk of
the changes are.
> ---
> .../net/ethernet/microsoft/mana/gdma_main.c | 20 +++++++++++++++++++
> drivers/pci/iov.c | 1 +
> 2 files changed, 21 insertions(+)
>
> diff --git a/drivers/net/ethernet/microsoft/mana/gdma_main.c b/drivers/net/ethernet/microsoft/mana/gdma_main.c
> index 3bc3fff55999..767f11d5b351 100644
> --- a/drivers/net/ethernet/microsoft/mana/gdma_main.c
> +++ b/drivers/net/ethernet/microsoft/mana/gdma_main.c
> @@ -2094,6 +2094,11 @@ static int mana_gd_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
>
> gc->numa_node = dev_to_node(&pdev->dev);
> gc->is_pf = mana_is_pf(pdev->device);
> +
> + /* Disable VF autoprobe on BM */
> + if (gc->is_pf)
> + pci_vf_drivers_autoprobe(pdev, false);
> +
> gc->bar0_va = bar0_va;
> gc->dev = &pdev->dev;
> xa_init(&gc->irq_contexts);
> @@ -2262,6 +2267,20 @@ static void mana_gd_shutdown(struct pci_dev *pdev)
> pci_disable_device(pdev);
> }
>
> +static int mana_sriov_configure(struct pci_dev *pdev, int numvfs)
> +{
> + int err = 0;
> +
> + dev_info(&pdev->dev, "Requested num VFs: %d\n", numvfs);
> +
> + if (numvfs > 0)
> + err = pci_enable_sriov(pdev, numvfs);
> + else
> + pci_disable_sriov(pdev);
> +
> + return err ? err : numvfs;
> +}
> +
> static const struct pci_device_id mana_id_table[] = {
> { PCI_DEVICE(PCI_VENDOR_ID_MICROSOFT, MANA_PF_DEVICE_ID) },
> { PCI_DEVICE(PCI_VENDOR_ID_MICROSOFT, MANA_VF_DEVICE_ID) },
> @@ -2276,6 +2295,7 @@ static struct pci_driver mana_driver = {
> .suspend = mana_gd_suspend,
> .resume = mana_gd_resume,
> .shutdown = mana_gd_shutdown,
> + .sriov_configure = mana_sriov_configure,
> };
>
> static int __init mana_driver_init(void)
> diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
> index 91ac4e37ecb9..5a701f44b8fd 100644
> --- a/drivers/pci/iov.c
> +++ b/drivers/pci/iov.c
> @@ -1127,6 +1127,7 @@ void pci_vf_drivers_autoprobe(struct pci_dev *dev, bool auto_probe)
> if (dev->is_physfn)
> dev->sriov->drivers_autoprobe = auto_probe;
> }
> +EXPORT_SYMBOL_GPL(pci_vf_drivers_autoprobe);
>
> /**
> * pci_iov_bus_range - find bus range used by Virtual Function
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 5+ messages in thread* RE: [EXTERNAL] Re: [PATCH net-next] net: mana: Add handler for sriov configure
2026-05-08 22:37 ` Bjorn Helgaas
@ 2026-05-08 22:47 ` Haiyang Zhang
2026-05-08 23:10 ` Bjorn Helgaas
0 siblings, 1 reply; 5+ messages in thread
From: Haiyang Zhang @ 2026-05-08 22:47 UTC (permalink / raw)
To: Bjorn Helgaas, Haiyang Zhang, Paul Rosswurm
Cc: linux-hyperv@vger.kernel.org, netdev@vger.kernel.org,
KY Srinivasan, Wei Liu, Dexuan Cui, Long Li, Andrew Lunn,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Bjorn Helgaas, Simon Horman, Shradha Gupta, Dipayaan Roy,
Erni Sri Satya Vennela, linux-kernel@vger.kernel.org,
linux-pci@vger.kernel.org
> -----Original Message-----
> From: Bjorn Helgaas <helgaas@kernel.org>
> Sent: Friday, May 8, 2026 6:38 PM
> To: Haiyang Zhang <haiyangz@linux.microsoft.com>
> Cc: linux-hyperv@vger.kernel.org; netdev@vger.kernel.org; KY Srinivasan
> <kys@microsoft.com>; Haiyang Zhang <haiyangz@microsoft.com>; Wei Liu
> <wei.liu@kernel.org>; Dexuan Cui <DECUI@microsoft.com>; Long Li
> <longli@microsoft.com>; Andrew Lunn <andrew+netdev@lunn.ch>; David S.
> Miller <davem@davemloft.net>; Eric Dumazet <edumazet@google.com>; Jakub
> Kicinski <kuba@kernel.org>; Paolo Abeni <pabeni@redhat.com>; Bjorn Helgaas
> <bhelgaas@google.com>; Simon Horman <horms@kernel.org>; Shradha Gupta
> <shradhagupta@linux.microsoft.com>; Dipayaan Roy
> <dipayanroy@linux.microsoft.com>; Erni Sri Satya Vennela
> <ernis@linux.microsoft.com>; linux-kernel@vger.kernel.org; linux-
> pci@vger.kernel.org; Paul Rosswurm <paulros@microsoft.com>
> Subject: [EXTERNAL] Re: [PATCH net-next] net: mana: Add handler for sriov
> configure
>
> On Fri, May 08, 2026 at 03:04:06PM -0700, Haiyang Zhang wrote:
> > From: Haiyang Zhang <haiyangz@microsoft.com>
> >
> > Add callback function for the pci_driver, sriov_configure.
> >
> > Also disable VF autoprobe when it runs as PF driver on bare metal,
> > since the hardware side may not have the VF ready immediately.
> >
> > Export pci_vf_drivers_autoprobe() so the driver can toggle the VF
> > autoprobe flag.
>
> Technically pci_vf_drivers_autoprobe() doesn't *toggle* the autoprobe
> flag. That would mean setting it to the opposite of its current
> value.
>
> Here I would say "so the driver can prevent autoprobing of the VFs",
> which is the intent.
Thanks, I will change the wording.
>
> Out of curiosity, how do the VFs eventually get probed? I guess
> there's some other mechanism that tells you when they're ready, and
> you manually use sysfs 'sriov_drivers_autoprobe' to enable probing,
> then bind drivers to them via sysfs?
We have a user program talking to the Azure backplane to get that information.
@Paul Rosswurm, do you have more details?
> The prevention of autoprobing sounds like a critical part of this
> change; might be worth saying something in the subject, because "add
> sriov configure" doesn't include much information.
How about "Add handler for sriov configure with VF autoprobe off"?
Thanks,
- Haiyang
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [EXTERNAL] Re: [PATCH net-next] net: mana: Add handler for sriov configure
2026-05-08 22:47 ` [EXTERNAL] " Haiyang Zhang
@ 2026-05-08 23:10 ` Bjorn Helgaas
0 siblings, 0 replies; 5+ messages in thread
From: Bjorn Helgaas @ 2026-05-08 23:10 UTC (permalink / raw)
To: Haiyang Zhang
Cc: Haiyang Zhang, Paul Rosswurm, linux-hyperv@vger.kernel.org,
netdev@vger.kernel.org, KY Srinivasan, Wei Liu, Dexuan Cui,
Long Li, Andrew Lunn, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Bjorn Helgaas, Simon Horman,
Shradha Gupta, Dipayaan Roy, Erni Sri Satya Vennela,
linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org
On Fri, May 08, 2026 at 10:47:14PM +0000, Haiyang Zhang wrote:
> > -----Original Message-----
> > From: Bjorn Helgaas <helgaas@kernel.org>
> > Sent: Friday, May 8, 2026 6:38 PM
> > To: Haiyang Zhang <haiyangz@linux.microsoft.com>
> > Cc: linux-hyperv@vger.kernel.org; netdev@vger.kernel.org; KY Srinivasan
> > <kys@microsoft.com>; Haiyang Zhang <haiyangz@microsoft.com>; Wei Liu
> > <wei.liu@kernel.org>; Dexuan Cui <DECUI@microsoft.com>; Long Li
> > <longli@microsoft.com>; Andrew Lunn <andrew+netdev@lunn.ch>; David S.
> > Miller <davem@davemloft.net>; Eric Dumazet <edumazet@google.com>; Jakub
> > Kicinski <kuba@kernel.org>; Paolo Abeni <pabeni@redhat.com>; Bjorn Helgaas
> > <bhelgaas@google.com>; Simon Horman <horms@kernel.org>; Shradha Gupta
> > <shradhagupta@linux.microsoft.com>; Dipayaan Roy
> > <dipayanroy@linux.microsoft.com>; Erni Sri Satya Vennela
> > <ernis@linux.microsoft.com>; linux-kernel@vger.kernel.org; linux-
> > pci@vger.kernel.org; Paul Rosswurm <paulros@microsoft.com>
> > Subject: [EXTERNAL] Re: [PATCH net-next] net: mana: Add handler for sriov
> > configure
> >
> > On Fri, May 08, 2026 at 03:04:06PM -0700, Haiyang Zhang wrote:
> > > From: Haiyang Zhang <haiyangz@microsoft.com>
> > >
> > > Add callback function for the pci_driver, sriov_configure.
> > >
> > > Also disable VF autoprobe when it runs as PF driver on bare metal,
> > > since the hardware side may not have the VF ready immediately.
> > >
> > > Export pci_vf_drivers_autoprobe() so the driver can toggle the VF
> > > autoprobe flag.
> >
> > Technically pci_vf_drivers_autoprobe() doesn't *toggle* the autoprobe
> > flag. That would mean setting it to the opposite of its current
> > value.
> >
> > Here I would say "so the driver can prevent autoprobing of the VFs",
> > which is the intent.
> Thanks, I will change the wording.
>
> >
> > Out of curiosity, how do the VFs eventually get probed? I guess
> > there's some other mechanism that tells you when they're ready, and
> > you manually use sysfs 'sriov_drivers_autoprobe' to enable probing,
> > then bind drivers to them via sysfs?
> We have a user program talking to the Azure backplane to get that information.
> @Paul Rosswurm, do you have more details?
>
>
> > The prevention of autoprobing sounds like a critical part of this
> > change; might be worth saying something in the subject, because "add
> > sriov configure" doesn't include much information.
> How about "Add handler for sriov configure with VF autoprobe off"?
OK by me :)
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net-next] net: mana: Add handler for sriov configure
2026-05-08 22:04 [PATCH net-next] net: mana: Add handler for sriov configure Haiyang Zhang
2026-05-08 22:37 ` Bjorn Helgaas
@ 2026-05-09 22:05 ` sashiko-bot
1 sibling, 0 replies; 5+ messages in thread
From: sashiko-bot @ 2026-05-09 22:05 UTC (permalink / raw)
To: Haiyang Zhang; +Cc: linux-pci
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Missing `pci_disable_sriov()` in PF driver's `remove` and `shutdown` paths causes resource leaks and potential Use-After-Free.
- [Medium] Missing VF assignment check in `mana_sriov_configure` causes silent failure when disabling SR-IOV.
--
commit 1f4061f22025ea097273f720b3bccac577e7d805
Author: Haiyang Zhang <haiyangz@microsoft.com>
net: mana: Add handler for sriov configure
This commit adds the sriov_configure callback to the mana pci_driver to handle
SR-IOV configuration. It also exports pci_vf_drivers_autoprobe() and disables
VF autoprobe when running as a PF driver on bare metal.
> diff --git a/drivers/net/ethernet/microsoft/mana/gdma_main.c b/drivers/net/ethernet/microsoft/mana/gdma_main.c
> index 3bc3fff559991..767f11d5b351b 100644
> --- a/drivers/net/ethernet/microsoft/mana/gdma_main.c
> +++ b/drivers/net/ethernet/microsoft/mana/gdma_main.c
[ ... ]
> @@ -2262,6 +2267,20 @@ static void mana_gd_shutdown(struct pci_dev *pdev)
> pci_disable_device(pdev);
> }
Does this code need to explicitly call pci_disable_sriov() during driver
remove and shutdown?
If the PF driver is unbound while VFs are enabled, the PCI core logs a
warning but does not automatically disable SR-IOV. With the VFs remaining
active, could they interact with dead hardware or trigger host-side PF events
that rely on the freed gdma_context, resulting in a use-after-free?
> +static int mana_sriov_configure(struct pci_dev *pdev, int numvfs)
> +{
> + int err = 0;
> +
> + dev_info(&pdev->dev, "Requested num VFs: %d\n", numvfs);
> +
> + if (numvfs > 0)
> + err = pci_enable_sriov(pdev, numvfs);
> + else
> + pci_disable_sriov(pdev);
> +
> + return err ? err : numvfs;
If VFs are currently assigned to a guest VM (e.g., via VFIO), the PCI core's
sriov_disable() will internally abort the teardown. Because
pci_disable_sriov() returns void, will this function return 0 and falsely
signal to userspace that the disable operation succeeded?
Should this code check pci_vfs_assigned(pdev) and return -EPERM, or use
the generic pci_sriov_configure_simple() helper instead?
> +}
> +
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260508220412.15138-1-haiyangz@linux.microsoft.com?part=1
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-05-09 22:05 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-08 22:04 [PATCH net-next] net: mana: Add handler for sriov configure Haiyang Zhang
2026-05-08 22:37 ` Bjorn Helgaas
2026-05-08 22:47 ` [EXTERNAL] " Haiyang Zhang
2026-05-08 23:10 ` Bjorn Helgaas
2026-05-09 22:05 ` sashiko-bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox