From: "Michael S. Tsirkin" <mst@redhat.com>
To: Dongli Zhang <dongli.zhang@oracle.com>
Cc: qemu-devel@nongnu.org, marcel.apfelbaum@gmail.com,
aswin.u.unnikrishnan@oracle.com, joe.jin@oracle.com
Subject: Re: [PATCH 1/1] pci: don't skip function 0 occupancy verification for devfn auto assign
Date: Sat, 20 Jul 2024 14:54:17 -0400 [thread overview]
Message-ID: <20240720145240-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20240708041056.54504-1-dongli.zhang@oracle.com>
On Sun, Jul 07, 2024 at 09:10:56PM -0700, Dongli Zhang wrote:
> When the devfn is already assigned in the command line, the
> do_pci_register_device() may verify if the function 0 is already occupied.
>
> However, when devfn < 0, the verification is skipped because it is part of
> the last "else if".
>
> For instance, suppose there is already a device at addr=00.00 of a port.
>
> -device pcie-root-port,bus=pcie.0,chassis=115,id=port01,addr=0e.00 \
> -device virtio-net-pci,bus=port01,id=vnet01,addr=00.00 \
>
> When 'addr' is specified for the 2nd device, the hotplug is denied.
>
> (qemu) device_add virtio-net-pci,bus=port01,id=vnet02,addr=01.00
> Error: PCI: slot 0 function 0 already occupied by virtio-net-pci, new func virtio-net-pci cannot be exposed to guest.
>
> When 'addr' is automatically assigned, the hotplug is not denied. This is
> because the verification is skipped.
>
> (qemu) device_add virtio-net-pci,bus=port01,id=vnet02
> warning: PCI: slot 1 is not valid for virtio-net-pci, parent device only allows plugging into slot 0.
>
> Fix the issue by moving the verification into an independent 'if'
> statement.
>
> Fixes: 3f1e1478db2d ("enable multi-function hot-add")
> Reported-by: Aswin Unnikrishnan <aswin.u.unnikrishnan@oracle.com>
> Signed-off-by: Dongli Zhang <dongli.zhang@oracle.com>
Well, the user did nothing wrong here.
Either we forbid a mix of manual and auto-assigned functions,
or we make it work correctly.
Also note such change in behaviour will need a compat knob
and only affect new machine types.
> ---
> hw/pci/pci.c | 17 +++++++++--------
> 1 file changed, 9 insertions(+), 8 deletions(-)
>
> diff --git a/hw/pci/pci.c b/hw/pci/pci.c
> index 4c7be52951..82ebd243d0 100644
> --- a/hw/pci/pci.c
> +++ b/hw/pci/pci.c
> @@ -1186,14 +1186,15 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev,
> PCI_SLOT(devfn), PCI_FUNC(devfn), name,
> bus->devices[devfn]->name, bus->devices[devfn]->qdev.id);
> return NULL;
> - } /*
> - * Populating function 0 triggers a scan from the guest that
> - * exposes other non-zero functions. Hence we need to ensure that
> - * function 0 wasn't added yet.
> - */
> - else if (dev->hotplugged &&
> - !pci_is_vf(pci_dev) &&
> - pci_get_function_0(pci_dev)) {
> + }
> +
> + /*
> + * Populating function 0 triggers a scan from the guest that
> + * exposes other non-zero functions. Hence we need to ensure that
> + * function 0 wasn't added yet.
> + */
> + if (dev->hotplugged && !pci_is_vf(pci_dev) &&
> + pci_get_function_0(pci_dev)) {
> error_setg(errp, "PCI: slot %d function 0 already occupied by %s,"
> " new func %s cannot be exposed to guest.",
> PCI_SLOT(pci_get_function_0(pci_dev)->devfn),
> --
> 2.34.1
prev parent reply other threads:[~2024-07-20 18:55 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-08 4:10 [PATCH 1/1] pci: don't skip function 0 occupancy verification for devfn auto assign Dongli Zhang
2024-07-20 18:54 ` Michael S. Tsirkin [this message]
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=20240720145240-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=aswin.u.unnikrishnan@oracle.com \
--cc=dongli.zhang@oracle.com \
--cc=joe.jin@oracle.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=qemu-devel@nongnu.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.