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

Re: [Xen-devel] issue in unplug qemu PCI devices




>>> On 2/12/2010 at 12:14 PM, in message
<alpine.DEB.2.00.1002121606100.1147@kaball-desktop>, Stefano Stabellini
<stefano.stabellini@xxxxxxxxxxxxx> wrote: 
> On Fri, 12 Feb 2010, Zhai, Edwin wrote:
>> IOEMU change set e7911109 uses Magic ioport (0x10) protocol for 
>> negotating with guest PV drivers during startup, and allowing PV drivers 
>> to disable hardware emulations thus preventing guest from seeing the 
>> same device through two paths.
>> 
>> But when I tried PV drivers in xen upstream, this unplug logic never 
>> succeed. PV driver uses following io sequence to interact with 
>> platform_pci device in qemu:
>> 1. inw 0x10
>> 2. inb 0x12
>> 3. outw(0x12, 0xbeef)
>> 4. outl(0x10,0xdead)
>> 
>> But I only saw 1&2 happened in xen io instruction 
>> emulation(x86_emulate), while 3&4 seemed to lost so the unplug will 
>> never happen.
Looks like in 3&4 have the parameters reversed - the first parameter I think 
should be the value and the second parameter should be the port.

Regards,

K. Y


>> 
>> Are you aware of this issue? Or some suggestion for debugging?
>> 
>> BTW, the unplug logic itself has some issues also:
>> 1. Pass-through NICs are also unplugged, although them have different 
>> path with vnif and emulated NIC.
>> 2. Unplug happens as long as inserting the xen_platform_pci module 
>> regardless of existence of PVed device in the config file. End user 
>> likely to unplug all the PCI device by accident.
>> 3. Inserting xen_platform_pci module would unplug all the devices, which 
>> is not reasonable. E.g. end user only has vbd driver, but all NICs are 
>> also unplugged.
>> 
> 
> You are right, that is a bug and this patch should fix it.
> 
> Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> 
> ---
> 
> diff --git a/hw/pci.c b/hw/pci.c
> index d7c516e..01eff8d 100644
> --- a/hw/pci.c
> +++ b/hw/pci.c
> @@ -826,7 +826,8 @@ void pci_unplug_netifs(void)
>             dev = bus->devices[x];
>             if (dev &&
>                 dev->config[0xa] == 0 &&
> -               dev->config[0xb] == 2) {
> +               dev->config[0xb] == 2 &&
> +               test_pci_slot(x >> 3) != 1) {
>                 /* Found a netif.  Remove it from the bus.  Note that
>                    we don't free it here, since there could still be
>                    references to it floating around.  There are only
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.