From: "Michael S. Tsirkin" <mst@redhat.com>
To: Stefan Hajnoczi <stefanha@gmail.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>,
qemu-devel@nongnu.org, Marcel Apfelbaum <marcel@redhat.com>,
Cao jin <caoj.fnst@cn.fujitsu.com>
Subject: Re: [Qemu-devel] Reproducible crash on PCIe hotplug
Date: Mon, 12 Dec 2016 20:41:41 +0200 [thread overview]
Message-ID: <20161212202617-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20161212172915.GP4074@stefanha-x1.localdomain>
On Mon, Dec 12, 2016 at 05:29:15PM +0000, Stefan Hajnoczi wrote:
> On Mon, Dec 12, 2016 at 01:34:05PM +0800, Cao jin wrote:
> >
> >
> > On 12/10/2016 04:39 AM, Eduardo Habkost wrote:
> > > Using latest qemu.git master:
> > >
> > > $ qemu-system-x86_64 -machine q35 -readconfig docs/q35-chipset.cfg -monitor stdio
> > > QEMU 2.7.93 monitor - type 'help' for more information
> > > (qemu) device_add e1000e,bus=ich9-pcie-port-4,addr=00
> > > (qemu) device_add e1000e,bus=ich9-pcie-port-4,addr=08
> > > Segmentation fault (core dumped)
> > >
> > > It crashes at:
> > >
> > > #7 0x000055555598d7dc in do_pci_register_device (errp=0x7fffffffbfd0, devfn=64, name=0x5555565df340 "e1000e", bus=0x555558487380, pci_dev=0x5555589cd000)
> > > at /home/ehabkost/rh/proj/virt/qemu/hw/pci/pci.c:983
> > > 983 error_setg(errp, "PCI: slot %d function 0 already ocuppied by %s,"
> > > (gdb) l
> > > 978 PCI_SLOT(devfn), PCI_FUNC(devfn), name,
> > > 979 bus->devices[devfn]->name);
> > > 980 return NULL;
> > > 981 } else if (dev->hotplugged &&
> > > 982 pci_get_function_0(pci_dev)) {
> > > 983 error_setg(errp, "PCI: slot %d function 0 already ocuppied by %s,"
> > > 984 " new func %s cannot be exposed to guest.",
> > > 985 PCI_SLOT(devfn),
> > > 986 bus->devices[PCI_DEVFN(PCI_SLOT(devfn), 0)]->name,
> > > 987 name);
> > >
> >
> > Thanks for informing me. I am kind of busy for now, so I suppose I will
> > investigate it after 2.8 release.
>
> Please let me know if this should be considered a release blocker.
>
> The proposed QEMU 2.8 release date is tomorrow (December 13th)!
>
> Stefan
I don't see how it's a blocker, it's an illegal configuration.
Here's the fix. It's a rather obvious one.
I'll target the fix for 2.9.
Eduardo, I'd appreciate a tested-by tag.
-->
pci: fix error message for express slots
PCI Express downstream slot has a single PCI slot
behind it, using PCI_DEVFN(PCI_SLOT(devfn), 0)
does not give you function 0 in cases such as ARI
as well as some error cases.
This is exactly what we are hitting:
$ qemu-system-x86_64 -machine q35 -readconfig docs/q35-chipset.cfg -monitor stdio
(qemu) device_add e1000e,bus=ich9-pcie-port-4,addr=00
(qemu) device_add e1000e,bus=ich9-pcie-port-4,addr=08
Segmentation fault (core dumped)
The fix is to use the pci_get_function_0 API.
Cc: qemu-stable@nongnu.org
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reported-by: Eduardo Habkost <ehabkost@redhat.com>
---
diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index 24fae16..339c531 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -983,7 +983,7 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus,
error_setg(errp, "PCI: slot %d function 0 already ocuppied by %s,"
" new func %s cannot be exposed to guest.",
PCI_SLOT(devfn),
- bus->devices[PCI_DEVFN(PCI_SLOT(devfn), 0)]->name,
+ pci_get_function_0(pci_dev)->name,
name);
return NULL;
--
MST
next prev parent reply other threads:[~2016-12-12 18:41 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-09 20:39 [Qemu-devel] Reproducible crash on PCIe hotplug Eduardo Habkost
2016-12-12 5:34 ` Cao jin
2016-12-12 17:29 ` Stefan Hajnoczi
2016-12-12 17:32 ` Eduardo Habkost
2016-12-12 18:27 ` Stefan Hajnoczi
2016-12-12 18:41 ` Michael S. Tsirkin [this message]
2016-12-12 18:57 ` Eduardo Habkost
2016-12-12 22:09 ` Michael S. Tsirkin
2016-12-13 2:41 ` Cao jin
2016-12-13 12:02 ` Eduardo Habkost
2016-12-12 16:48 ` Markus Armbruster
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=20161212202617-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=caoj.fnst@cn.fujitsu.com \
--cc=ehabkost@redhat.com \
--cc=marcel@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).