qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] Can not hotplug device to pci-to-pci bridge using machine type older than 1.7
@ 2018-01-25  8:01 Fei Li
  2018-01-29 13:33 ` Igor Mammedov
  0 siblings, 1 reply; 3+ messages in thread
From: Fei Li @ 2018-01-25  8:01 UTC (permalink / raw)
  To: qemu-devel

Hi,

After I hotplug a pci device to a pci2pci bridge (I use "pci.1") with 
machine type 1.7 or older,
I can not see the pci device via `lspci` in the guest, but can see it 
via `info qtree` in the hmp.
What's more, after I reboot the guest or hotplug another pci device to 
pci.0, I can see the
previous hotplugged pci device via `lspci`.

I use qemu v2.9.* (but machine type =1.7 or 1.6) and kernel 4.4.
I also do the test on self-build qemu v1.7, v1.6 and kernel 4.4, the 
same phenomenon.
My qemu command line is as follows:
/usr/bin/qemu-system-x86_64 -m 1024 -machine 
pc-i440fx-1.7,accel=kvm,kernel_irqchip=on -enable-kvm \
-smp sockets=1,cores=1,threads=1 -no-user-config -cpu Skylake-Client \
-name "pci-hp-qemu" -monitor telnet:127.0.0.1:8848,server,nowait \
-drive file=/opt/pcihp.qcow2,if=none,id=drive0,format=qcow2 \
-device virtio-blk-pci,drive=drive0,id=sata0,bootindex=1 \
-device pci-bridge,chassis_nr=1 \
-device virtio-net-pci,bus=pci.1,addr=01,id=netdev1 \
-device virtio-net-pci,bus=pci.0,addr=07,id=netdev2 \
-boot order=c
...
(qemu) device_add virtio-net-pci,bus=pci.1,addr=12,id=netdev12

Checking the qemu commit log, I see qemu v2.0 introduces the acpi based 
pci hotplug
support and enables hotplug for pci devices behind pci2pci bridges
(upstream commit 99fd437d, 9e047b98 and db4728e6).

I also checked qemu v2.9 code, and notice there's a judge: if 
use_acpi_pci_hotplug is true (MT >= 2.0),
the code will update the hotplug_handler for *all buses* to PIIX4PMState 
and uses
acpi_pcihp_device_plug_cb as the hp callback; else, for MT<=1.7, the 
code will only update the
hotplug_handler for pci.0 and leave other buses continue to use its 
default hp_handler: the
pci2pci bridge and default callback: pci_bridge_dev_hotplug_cb => 
shpc_device_hotplug_cb.
With the latter shpc* hotplug callback, hotplug a pci device to a 
pci2pci bridge, like pci.1, I can
not be seen it in the guest via `lspci`.

I am just wondering whether the qemu code does not support the shpc 
hotplug to pci2pci bridge,
or the shpc spec does not support this.
Could someone shed some light on me? Thanks a lot!

Have a nice day
Fei

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-02-01  6:32 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-01-25  8:01 [Qemu-devel] Can not hotplug device to pci-to-pci bridge using machine type older than 1.7 Fei Li
2018-01-29 13:33 ` Igor Mammedov
2018-02-01  6:31   ` Fei Li

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).