On Thu, Sep 1, 2016 at 9:13 PM, Paolo Bonzini <pbonz...@redhat.com> wrote:
> On 01/09/2016 07:31, Ashijeet Acharya wrote:
>> I am still waiting for review on this one.
>
> Hi,
>
> QEMU is in hard freeze now so it's normal to have some delay in patch
> review.  Maintainers often use this time to work on their own features.
>
> I'm sure John will get to it in short time.
>
> Paolo

Alright thanks. No problem!

Ashijeet
>
>> On Tue, Aug 16, 2016 at 10:40 PM, Ashijeet Acharya
>> <ashijeetacha...@gmail.com> wrote:
>>> Fix a memory leak in ide_register_restart_cb() in hw/ide/core.c and add 
>>> idebus_unrealize() in hw/ide/qdev.c to have calls to 
>>> qemu_del_vm_change_state_handler() to deal with the dangling change state 
>>> handler during hot-unplugging ide devices which might lead to a crash.
>>>
>>> Signed-off-by: Ashijeet Acharya <ashijeetacha...@gmail.com>
>>> ---
>>>  hw/ide/core.c             |  2 +-
>>>  hw/ide/qdev.c             | 14 ++++++++++++++
>>>  include/hw/ide/internal.h |  1 +
>>>  3 files changed, 16 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/hw/ide/core.c b/hw/ide/core.c
>>> index 45b6df1..eecbb47 100644
>>> --- a/hw/ide/core.c
>>> +++ b/hw/ide/core.c
>>> @@ -2582,7 +2582,7 @@ static void ide_restart_cb(void *opaque, int running, 
>>> RunState state)
>>>  void ide_register_restart_cb(IDEBus *bus)
>>>  {
>>>      if (bus->dma->ops->restart_dma) {
>>> -        qemu_add_vm_change_state_handler(ide_restart_cb, bus);
>>> +        bus->vmstate = qemu_add_vm_change_state_handler(ide_restart_cb, 
>>> bus);
>>>      }
>>>  }
>>>
>>> diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c
>>> index 67c76bf..6f75f77 100644
>>> --- a/hw/ide/qdev.c
>>> +++ b/hw/ide/qdev.c
>>> @@ -31,6 +31,7 @@
>>>  /* --------------------------------- */
>>>
>>>  static char *idebus_get_fw_dev_path(DeviceState *dev);
>>> +static void idebus_unrealize(DeviceState *qdev, Error **errp);
>>>
>>>  static Property ide_props[] = {
>>>      DEFINE_PROP_UINT32("unit", IDEDevice, unit, -1),
>>> @@ -345,6 +346,7 @@ static void ide_device_class_init(ObjectClass *klass, 
>>> void *data)
>>>      k->init = ide_qdev_init;
>>>      set_bit(DEVICE_CATEGORY_STORAGE, k->categories);
>>>      k->bus_type = TYPE_IDE_BUS;
>>> +    k->unrealize = idebus_unrealize;
>>>      k->props = ide_props;
>>>  }
>>>
>>> @@ -368,3 +370,15 @@ static void ide_register_types(void)
>>>  }
>>>
>>>  type_init(ide_register_types)
>>> +
>>> +static void idebus_unrealize(DeviceState *qdev, Error **errp)
>>> +{
>>> +    IDEBus *bus = DO_UPCAST(IDEBus, qbus, qdev->parent_bus);
>>> +
>>> +    if (bus->dma->ops->restart_dma) {
>>> +        if (bus->vmstate) {
>>> +            qemu_del_vm_change_state_handler(bus->vmstate);
>>> +        }
>>> +    }
>>> +}
>>>
>>> diff --git a/include/hw/ide/internal.h b/include/hw/ide/internal.h
>>> index 7824bc3..2103261 100644
>>> --- a/include/hw/ide/internal.h
>>> +++ b/include/hw/ide/internal.h
>>> @@ -480,6 +480,7 @@ struct IDEBus {
>>>      uint8_t retry_unit;
>>>      int64_t retry_sector_num;
>>>      uint32_t retry_nsector;
>>> +    VMChangeStateEntry *vmstate;
>>>  };
>>>
>>>  #define TYPE_IDE_DEVICE "ide-device"
>>> --
>>> 2.6.2
>>>

Reply via email to