Li Qiang <[email protected]> writes: > Hi > > 2016-11-29 16:39 GMT+08:00 Richard W.M. Jones <[email protected]>: > >> On Mon, Nov 28, 2016 at 05:49:04PM -0800, Li Qiang wrote: >> > From: Li Qiang <[email protected]> >> > >> > 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 <[email protected]> >> > --- >> > 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. [...]
