[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] watchdog: 6300esb: add exit function
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH] watchdog: 6300esb: add exit function |
Date: |
Tue, 29 Nov 2016 11:49:55 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) |
Li Qiang <address@hidden> writes:
> Hi
>
> 2016-11-29 16:39 GMT+08:00 Richard W.M. Jones <address@hidden>:
>
>> On Mon, Nov 28, 2016 at 05:49:04PM -0800, Li Qiang wrote:
>> > From: Li Qiang <address@hidden>
>> >
>> > When the Intel 6300ESB watchdog is hot unplug. The timer allocated
>> > in realize isn't freed thus leaking memory leak. This patch avoid
>> > this through adding the exit function.
>>
>> I will just note that the real hardware is not hot-pluggable. However
>> we don't need to stick to the real hardware capabilities, so that's OK.
>>
>>
>
> If the hardware is not hot-pluggable, we can set dc->hotpluggable = false.
>
>
>> Signed-off-by: Li Qiang <address@hidden>
>> > ---
>> > hw/watchdog/wdt_i6300esb.c | 9 +++++++++
>> > 1 file changed, 9 insertions(+)
>> >
>> > diff --git a/hw/watchdog/wdt_i6300esb.c b/hw/watchdog/wdt_i6300esb.c
>> > index a83d951..49b3cd1 100644
>> > --- a/hw/watchdog/wdt_i6300esb.c
>> > +++ b/hw/watchdog/wdt_i6300esb.c
>> > @@ -428,6 +428,14 @@ static void i6300esb_realize(PCIDevice *dev, Error
>> **errp)
>> > /* qemu_register_coalesced_mmio (addr, 0x10); ? */
>> > }
>> >
>> > +static void i6300esb_exit(PCIDevice *dev)
>> > +{
>> > + I6300State *d = WATCHDOG_I6300ESB_DEVICE(dev);
>> > +
>> > + timer_del(d->timer);
>> > + timer_free(d->timer);
>> > +}
>> > +
>> > static WatchdogTimerModel model = {
>> > .wdt_name = "i6300esb",
>> > .wdt_description = "Intel 6300ESB",
>> > @@ -441,6 +449,7 @@ static void i6300esb_class_init(ObjectClass *klass,
>> void *data)
>> > k->config_read = i6300esb_config_read;
>> > k->config_write = i6300esb_config_write;
>> > k->realize = i6300esb_realize;
>> > + k->exit = i6300esb_exit;
>>
>> The wdt_diag288.c file seems to use k->unrealize for this purpose.
>> I don't know which is correct however.
>>
>>
>>
> wdt_diag288.c uses dc->unrealize for DeviceClass, while k->exit if for
> PCIDeviceClass.
Method exit() is deprecated, please use unrealize() in new code.
[...]