qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] About hotplug multifunction


From: Michael S. Tsirkin
Subject: Re: [Qemu-devel] About hotplug multifunction
Date: Fri, 9 Sep 2011 10:32:26 +0300
User-agent: Mutt/1.5.21 (2010-09-15)

On Fri, Sep 09, 2011 at 03:08:21AM -0400, Amos Kong wrote:
> Hello all,
> 
> I'm working on hotplug pci multifunction. 
> 
> 1. qemu cmdline: 
> ./x86_64-softmmu/qemu-system-x86_64 -snapshot -m 2000 
> /home/kvm_autotest_root/images/rhel61-64-virtio.qcow2 -vnc :0 -monitor 
> unix:/tmp/a,server,nowait --enable-kvm -net none
> 
> 2. script to add virtio-blk devices:
> for i in `seq 1 7` 0;do
> qemu-img create /tmp/resize$i.qcow2 1G -f qcow2
> echo drive_add 0x6.$i id=drv$i,if=none,file=/tmp/resize$i.qcow2 | nc -U /tmp/a
> echo device_add 
> virtio-blk-pci,id=dev$i,drive=drv$i,addr=0x6.$i,multifunction=on | nc -U 
> /tmp/a
> done
> 
> 3. script to add virio-nic devices:
> for i in `seq 1 7` 0;do
> echo netdev_add tap,id=drv$i | nc -U /tmp/a
> echo device_add 
> virtio-net-pci,id=dev$i,netdev=drv$i,addr=0x6.$i,multifunction=on | nc -U 
> /tmp/a
> done
> 
> 4. current qemu behaviors
> 4.1. add func 1~7 one by one, then add func 0
> virtio-nic : success, all funcs are added
> virtio-blk : success
> 
> 4.2. add func 0~7 one by one
> virtio-nic : failed, only func 0 is added
> virtio-blk : success
> 
> 4.3. removing any single func in monitor
> virtio-nic: func 0 are not found in 'lspci', func 1~7 also exist. eth1~eth7 
> also exist.
> virtio-blk: func 0 are not found in 'lspci', func 1~7 also exist. the device. 
> /dev/vda disappears,
>               vdb,vdc,vde,vdf,vdg,vdh,vdi,vdj also exist. If I re-add 8 funcs 
> to guest, they all works.
>               # lspci (00:06.1 ~ 00:06.7 exist, 00:06.0 doesn't exit)
>               00:06.1 SCSI storage controller: Red Hat, Inc Virtio block 
> device (rev ff)

something I noted when readin our acpi code:
we currently pass eject request for function 0 only:
               Name (_ADR, nr##0000)
We either need a device per function there (acpi 1.0),
send eject request for them all, or use ffff
as function number (newer acpi, not sure which version).
Need to see which guests (windows,linux) can handle which form.

> 
> qemu sends an acpi event to guest, then guest will remove all funcs in the 
> slot.
> linux-2.6/drivers/pci/hotplug/acpiphp_glue.c:
> static int disable_device(struct acpiphp_slot *slot) {
>     list_for_each_entry(func, &slot->funcs, sibling) {
>         ...
> 
> Questions:
> 1. why func1~7 still can be found after hot-remove? is it same as real 
> hardware?
> 2. why the func 1~7 could not be added to guest (addingfunc 0~7 one by one)?
> 3. how about this interface to hotplug/hot-unplug multifunction:
>    1) Add func 1-7 by monitor, add func 0, then send an acpi event to notice 
> guest
>    2) Remove func0, send an acpi event to guest. (all funcs can be removed)

We must make sure guest acked removal of all functions. Surprise
removal would be bad.

> 4. what does "reversion 0xff" stand for?

You get ffffffff if no device responds to a configuration read.

-- 
MST



reply via email to

[Prev in Thread] Current Thread [Next in Thread]