qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v3] pci: call object_unparent() before free_qdev


From: Michael S. Tsirkin
Subject: Re: [Qemu-devel] [PATCH v3] pci: call object_unparent() before free_qdev()
Date: Wed, 30 May 2012 08:14:03 +0300

On Wed, May 30, 2012 at 10:13:07AM +0800, Anthony Liguori wrote:
> On 05/20/2012 05:57 PM, Amos Kong wrote:
> >Start VM with 8 multiple-function block devs, hot-removing
> >those block devs by 'device_del ...' would cause qemu abort.
> >
> >| (qemu) device_del virti0-0-0
> >| (qemu) **
> >|ERROR:qom/object.c:389:object_delete: assertion failed: (obj->ref == 0)
> >
> >It's a regression introduced by commit 57c9fafe
> >
> >The whole PCI slot should be removed once. Currently only one func
> >is cleaned in pci_unplug_device(), if you try to remove a single
> >func by monitor cmd.
> >
> >free_qdev() are called for all functions in slot,
> >but unparent_delete() is only called for one
> >function.
> >
> >---
> >aliguori has a better resolution, better to do it in 1.2
> >
> >v2: fix warning: too many arguments for format
> >v3: move object_unparent() to acpi_piix_eject_slot()
> >
> >Signed-off-by: Amos Kong<address@hidden>
> 
> Applied.  Thanks.
> 
> Regards,
> 
> Anthony Liguori
> 
> >---
> >  hw/acpi_piix4.c |    1 +
> >  hw/pci.c        |    1 -
> >  2 files changed, 1 insertions(+), 1 deletions(-)
> >
> >diff --git a/hw/acpi_piix4.c b/hw/acpi_piix4.c
> >index 585da4e..0345490 100644
> >--- a/hw/acpi_piix4.c
> >+++ b/hw/acpi_piix4.c
> >@@ -299,6 +299,7 @@ static void acpi_piix_eject_slot(PIIX4PMState *s, 
> >unsigned slots)
> >              if (pc->no_hotplug) {
> >                  slot_free = false;
> >              } else {
> >+                object_unparent(OBJECT(dev));
> >                  qdev_free(qdev);
> >              }
> >          }

Does shpc need this too now?

> >diff --git a/hw/pci.c b/hw/pci.c
> >index b706e69..c1ebdde 100644
> >--- a/hw/pci.c
> >+++ b/hw/pci.c
> >@@ -1527,7 +1527,6 @@ static int pci_unplug_device(DeviceState *qdev)
> >          qerror_report(QERR_DEVICE_NO_HOTPLUG, 
> > object_get_typename(OBJECT(dev)));
> >          return -1;
> >      }
> >-    object_unparent(OBJECT(dev));
> >      return dev->bus->hotplug(dev->bus->hotplug_qdev, dev,
> >                               PCI_HOTPLUG_DISABLED);
> >  }



reply via email to

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