[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PULL 00/20] acpi,pc,pci fixes and enhancements
From: |
Stefano Stabellini |
Subject: |
Re: [Qemu-devel] [PULL 00/20] acpi,pc,pci fixes and enhancements |
Date: |
Wed, 19 Feb 2014 11:53:16 +0000 |
User-agent: |
Alpine 2.02 (DEB 1266 2009-07-14) |
On Wed, 19 Feb 2014, Michael S. Tsirkin wrote:
> On Wed, Feb 19, 2014 at 11:08:25AM +0200, Michael S. Tsirkin wrote:
> > On Tue, Feb 18, 2014 at 05:10:00PM +0000, Stefano Stabellini wrote:
> > > On Tue, 18 Feb 2014, Paolo Bonzini wrote:
> > > > Il 18/02/2014 15:25, Stefano Stabellini ha scritto:
> > > > > On Tue, 18 Feb 2014, Paolo Bonzini wrote:
> > > > > > Il 18/02/2014 13:45, Stefano Stabellini ha scritto:
> > > > > > > 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.
> > > > > >
> > > > > > Ok, the last paragraph is what I was missing.
> > > > > >
> > > > > > So this is dc->unplug for the PIIX3 IDE device. Because PCI
> > > > > > declares a
> > > > > > hotplug handler, dc->unplug is not called anymore.
> > > > > >
> > > > > > But unlike other dc->unplug callbacks, pci_piix3_xen_ide_unplug
> > > > > > doesn't
> > > > > > free
> > > > > > the device, it just drops the disks underneath. I think the
> > > > > > simplest
> > > > > > solution
> > > > > > is to _not_ make it a dc->unplug callback at all, and call
> > > > > > pci_piix3_xen_ide_unplug from unplug_disks instead of qdev_unplug.
> > > > > > qdev_unplug means "ask guest to start unplug", which is not what
> > > > > > Xen wants
> > > > > > to
> > > > > > do here.
> > > > >
> > > > > Yes, you are right, pci_piix3_xen_ide_unplug is not called anymore.
> > > > > Calling it directly from unplug_disks fixes the issue:
> > > > >
> > > > >
> > > > > ---
> > > > >
> > > > > Call pci_piix3_xen_ide_unplug from unplug_disks
> > > > >
> > > > > Signed-off-by: Stefano Stabellini <address@hidden>
> > > > >
> > > > > diff --git a/hw/ide/piix.c b/hw/ide/piix.c
> > > > > index 0eda301..40757eb 100644
> > > > > --- a/hw/ide/piix.c
> > > > > +++ b/hw/ide/piix.c
> > > > > @@ -167,7 +167,7 @@ static int pci_piix_ide_initfn(PCIDevice *dev)
> > > > > return 0;
> > > > > }
> > > > >
> > > > > -static int pci_piix3_xen_ide_unplug(DeviceState *dev)
> > > > > +int pci_piix3_xen_ide_unplug(DeviceState *dev)
> > > > > {
> > > > > PCIIDEState *pci_ide;
> > > > > DriveInfo *di;
> > > > > @@ -266,7 +266,6 @@ static void piix3_ide_xen_class_init(ObjectClass
> > > > > *klass,
> > > > > void *data)
> > > > > k->device_id = PCI_DEVICE_ID_INTEL_82371SB_1;
> > > > > k->class_id = PCI_CLASS_STORAGE_IDE;
> > > > > set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
> > > > > - dc->unplug = pci_piix3_xen_ide_unplug;
> > > > > }
> > > > >
> > > > > static const TypeInfo piix3_ide_xen_info = {
> > > > > diff --git a/hw/xen/xen_platform.c b/hw/xen/xen_platform.c
> > > > > index 70875e4..1d9d0e9 100644
> > > > > --- a/hw/xen/xen_platform.c
> > > > > +++ b/hw/xen/xen_platform.c
> > > > > @@ -27,6 +27,7 @@
> > > > >
> > > > > #include "hw/hw.h"
> > > > > #include "hw/i386/pc.h"
> > > > > +#include "hw/ide.h"
> > > > > #include "hw/pci/pci.h"
> > > > > #include "hw/irq.h"
> > > > > #include "hw/xen/xen_common.h"
> > > > > @@ -110,7 +111,7 @@ static void unplug_disks(PCIBus *b, PCIDevice *d,
> > > > > void
> > > > > *o)
> > > > > if (pci_get_word(d->config + PCI_CLASS_DEVICE) ==
> > > > > PCI_CLASS_STORAGE_IDE
> > > > > && strcmp(d->name, "xen-pci-passthrough") != 0) {
> > > > > - qdev_unplug(DEVICE(d), NULL);
> > > > > + pci_piix3_xen_ide_unplug(DEVICE(d));
> > > > > }
> > > > > }
> > > > >
> > > > > diff --git a/include/hw/ide.h b/include/hw/ide.h
> > > > > index 507e6d3..bc8bd32 100644
> > > > > --- a/include/hw/ide.h
> > > > > +++ b/include/hw/ide.h
> > > > > @@ -17,6 +17,7 @@ void pci_cmd646_ide_init(PCIBus *bus, DriveInfo
> > > > > **hd_table,
> > > > > PCIDevice *pci_piix3_xen_ide_init(PCIBus *bus, DriveInfo **hd_table,
> > > > > int
> > > > > devfn);
> > > > > PCIDevice *pci_piix3_ide_init(PCIBus *bus, DriveInfo **hd_table, int
> > > > > devfn);
> > > > > PCIDevice *pci_piix4_ide_init(PCIBus *bus, DriveInfo **hd_table, int
> > > > > devfn);
> > > > > +int pci_piix3_xen_ide_unplug(DeviceState *dev);
> > > > > void vt82c686b_ide_init(PCIBus *bus, DriveInfo **hd_table, int
> > > > > devfn);
> > > > >
> > > > > /* ide-mmio.c */
> > > > >
> > > >
> > > > Acked-by: Paolo Bonzini <address@hidden>
> > >
> > > Thanks. Should I send it to Peter via the xen tree or anybody else wants
> > > to pick this up?
> >
> > I'll rebase my tree on top of this, to avoid bisect failures.
>
> Oh sorry, I noticed what broke this is - is merged already.
> Pls merge fix through xen tree then, makes more sense.
All right, thanks.
- Re: [Qemu-devel] [PULL 00/20] acpi,pc,pci fixes and enhancements, (continued)
- Re: [Qemu-devel] [PULL 00/20] acpi,pc,pci fixes and enhancements, Paolo Bonzini, 2014/02/18
- Re: [Qemu-devel] [PULL 00/20] acpi,pc,pci fixes and enhancements, Stefano Stabellini, 2014/02/18
- Re: [Qemu-devel] [PULL 00/20] acpi,pc,pci fixes and enhancements, Igor Mammedov, 2014/02/18
- Re: [Qemu-devel] [PULL 00/20] acpi,pc,pci fixes and enhancements, Stefano Stabellini, 2014/02/18
- Re: [Qemu-devel] [PULL 00/20] acpi,pc,pci fixes and enhancements, Paolo Bonzini, 2014/02/18
- Re: [Qemu-devel] [PULL 00/20] acpi,pc,pci fixes and enhancements, Stefano Stabellini, 2014/02/18
- Re: [Qemu-devel] [PULL 00/20] acpi,pc,pci fixes and enhancements, Paolo Bonzini, 2014/02/18
- Re: [Qemu-devel] [PULL 00/20] acpi,pc,pci fixes and enhancements, Stefano Stabellini, 2014/02/18
- Re: [Qemu-devel] [PULL 00/20] acpi,pc,pci fixes and enhancements, Michael S. Tsirkin, 2014/02/19
- Re: [Qemu-devel] [PULL 00/20] acpi,pc,pci fixes and enhancements, Michael S. Tsirkin, 2014/02/19
- Re: [Qemu-devel] [PULL 00/20] acpi,pc,pci fixes and enhancements,
Stefano Stabellini <=