Description of problem:
Boot vm with a pxb device, and add one virtio nic under the pxb bus.
After vm boot up, hot un-plug the device, qmp and hmp all return without error.
No error in dmesg too. But the device still exist in both qemu monitor(info pci) and inside guest (lspci)
Version-Release number of selected component (if applicable):
qemu: qemu-kvm-rhev-2-10-0-13.el7
kernel: kernel-3.10.0-824.el7.x86_64
How reproducible:
100%
Steps to Reproduce:
1.Boot vm with pxb device, and add one virtio nic under pxb bus.
-object memory-backend-ram,host-nodes=0,policy=bind,id=mem-0,size=2048M,prealloc=yes -numa node,memdev=mem-0 \
-object memory-backend-ram,host-nodes=1,policy=bind,id=mem-1,size=2048M,prealloc=yes -numa node,memdev=mem-1 \
-device pxb,id=pxb,bus_nr=4,numa_node=1 \
-netdev tap,id=hostnet0,vhost=on \
-device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:60:0b:4c,bus=pxb,addr=0x2 \
(qemu) info pci
Bus 4, device 0, function 0:
PCI bridge: PCI device 1b36:0001
BUS 4.
secondary bus 5.
subordinate bus 5.
IO range [0xc000, 0xcfff]
memory range [0xfc000000, 0xfc7fffff]
prefetchable memory range [0xfe800000, 0xfe9fffff]
id "pxb"
Bus 5, device 2, function 0:
Ethernet controller: PCI device 1af4:1000
IRQ 10.
BAR0: I/O at 0xc000 [0xc01f].
BAR1: 32 bit memory at 0xfc464000 [0xfc464fff].
BAR4: 64 bit prefetchable memory at 0xfe800000 [0xfe803fff].
BAR6: 32 bit memory at 0xffffffffffffffff [0x0003fffe].
id "net0"
2.After guest boot up, hot unplug the devices under pxb bus.
(qemu) device_del net0
(qemu) netdev_del hostnet0
(qemu) info network
net0: index=0,type=nic,model=virtio-net-pci,macaddr=52:54:00:60:0b:4c
\ hostnet0: index=0,type=tap,ifname=tap0,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown
(qemu) info pci
Bus 4, device 0, function 0:
PCI bridge: PCI device 1b36:0001
BUS 4.
secondary bus 5.
subordinate bus 5.
IO range [0xc000, 0xcfff]
memory range [0xfc000000, 0xfc7fffff]
prefetchable memory range [0xfe800000, 0xfe9fffff]
id "pxb"
Bus 5, device 2, function 0:
Ethernet controller: PCI device 1af4:1000
IRQ 10.
BAR0: I/O at 0xc000 [0xc01f].
BAR1: 32 bit memory at 0xfc464000 [0xfc464fff].
BAR4: 64 bit prefetchable memory at 0xfe800000 [0xfe803fff].
BAR6: 32 bit memory at 0xffffffffffffffff [0x0003fffe].
id "net0"
3. IN VM, after "device_del net0", the nic still can ping through.
after "netdev_del hostnet0", the nic can not be reached.
Actual results:
device under pxb bus can not be hot unpluged, and no prompt.
Expected results:
I am not sure it is supported or not. but, if it is not supported, qemu should give some message to explain it.
such as, un-plug pxb device.
(qemu) device_del pxb
Device 'pxb' does not support hotplugging
Additional info:
1. This is not a regression, RHEL7.4 have the same problem.
2. I have tried add one bridge under pxb bus, and then add virtio nic under the bridge, sane result, and the bridge can not be un-pluged too, no warning.
-object memory-backend-ram,host-nodes=0,policy=bind,id=mem-0,size=2048M,prealloc=yes -numa node,memdev=mem-0 \
-object memory-backend-ram,host-nodes=1,policy=bind,id=mem-1,size=2048M,prealloc=yes -numa node,memdev=mem-1 \
-device pxb,id=pxb,bus_nr=4,numa_node=1 \
-device pci-bridge,bus=pxb,id=bridge0,chassis_nr=1 \
-netdev tap,id=hostnet0,vhost=on \
-device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:60:0b:4c,bus=bridge0,addr=0x1 \
-device vfio-pci,host=44:00.0,id=pf,bus=pxb,addr=0x3 \
3. No only virtio-net pci device has this problem, i have tried pass through nic, it has the same problem.
QEMU has been recently split into sub-components and as a one-time operation to avoid breakage of tools, we are setting the QEMU sub-component of this BZ to "General". Please review and change the sub-component if necessary the next time you review this BZ. Thanks