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

Re: [Xen-devel] [Qemu-devel] [PULL 00/20] acpi, pc, pci fixes and enhancements



On Tue, 18 Feb 2014, Igor Mammedov wrote:
> On Tue, 18 Feb 2014 12:45:29 +0000
> Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> wrote:
> 
> > On Tue, 18 Feb 2014, Paolo Bonzini wrote:
> > > Il 18/02/2014 13:16, Stefano Stabellini ha scritto:
> > > > It looks like that this series breaks disk unplug
> > > > (hw/ide/piix.c:pci_piix3_xen_ide_unplug).
> > > > 
> > > > I bisected it and the problem is caused by:
> > > > 
> > > > commit 5e95494380ecf83c97d28f72134ab45e0cace8f9
> > > > Author: Igor Mammedov <imammedo@xxxxxxxxxx>
> > > > Date:   Wed Feb 5 16:36:52 2014 +0100
> > > > 
> > > >     hw/pci: switch to a generic hotplug handling for PCIDevice
> > > > 
> > > >     make qdev_unplug()/device_set_realized() to call hotplug handler's
> > > >     plug/unplug methods if available and remove not needed anymore
> > > >     hot(un)plug handling from PCIDevice.
> > > > 
> > > >     In case if hotplug handler is not available, revert to the legacy
> > > >     hotplug method for compatibility with not yet converted buses.
> > > > 
> > > >     Signed-off-by: Igor Mammedov <imammedo@xxxxxxxxxx>
> > > >     Reviewed-by: Michael S. Tsirkin <mst@xxxxxxxxxx>
> > > >     Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxx>
> > > > 
> > > > 
> > > 
> > > What exactly breaks?
> > 
> > Disk unplug: hw/ide/piix.c:pci_piix3_xen_ide_unplug (see the beginning
> > of the email :-P).
> > It is called by hw/xen/xen_platform.c:platform_fixed_ioport_writew, in
> > response to the guest writing to a magic ioport specifically to unplug
> > the emulated disk.
> > With this patch after the guest boots I can still access both xvda and
> > sda for the same disk, leading to fs corruptions.
> > 
> Could you try with following debug patch?
> 
> diff --git a/hw/core/qdev.c b/hw/core/qdev.c
> index 64b66e0..84aa8be 100644
> --- a/hw/core/qdev.c
> +++ b/hw/core/qdev.c
> @@ -214,6 +214,7 @@ void qdev_unplug(DeviceState *dev, Error **errp)
>          return;
>      }
>  
> +    fprintf(stderr, "dc->hotpluggable %d\n", dc->hotpluggable);
>      if (!dc->hotpluggable) {
>          error_set(errp, QERR_DEVICE_NO_HOTPLUG,
>                    object_get_typename(OBJECT(dev)));
> @@ -223,8 +224,12 @@ void qdev_unplug(DeviceState *dev, Error **errp)
>      qdev_hot_removed = true;
>  
>      if (dev->parent_bus && dev->parent_bus->hotplug_handler) {
> +        fprintf(stderr, "bus name: %s, hotplug_handler: %s\n",
> +                dev->parent_bus->name,
> +                
> object_get_typename(OBJECT(dev->parent_bus->hotplug_handler)));
>          hotplug_handler_unplug(dev->parent_bus->hotplug_handler, dev, errp);
>      } else {
> +        fprintf(stderr, "legacy unplug: %p\n", dc->unplug);
>          assert(dc->unplug != NULL);
>          if (dc->unplug(dev) < 0) { /* legacy handler */
>              error_set(errp, QERR_UNDEFINED_ERROR);
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index 1acd2b2..74b0cac 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -238,6 +238,7 @@ static void pc_init1(QEMUMachineInitArgs *args,
>      if (pci_enabled && acpi_enabled) {
>          i2c_bus *smbus;
>  
> +       fprintf(stderr, "create piix4_pm_init\n");
>          smi_irq = qemu_allocate_irqs(pc_acpi_smi_interrupt, first_cpu, 1);
>          /* TODO: Populate SPD eeprom data.  */
>          smbus = piix4_pm_init(pci_bus, piix3_devfn + 3, 0xb100,

Sure, this is the output:

dc->hotpluggable 1
bus name: pci.0, hotplug_handler: PIIX4_PM

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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