dfb8478
From: Li Qiang <liqiang6-s@360.cn>
dfb8478
Date: Mon, 28 Nov 2016 17:49:04 -0800
dfb8478
Subject: [PATCH] watchdog: 6300esb: add exit function
dfb8478
dfb8478
When the Intel 6300ESB watchdog is hot unplug. The timer allocated
dfb8478
in realize isn't freed thus leaking memory leak. This patch avoid
dfb8478
this through adding the exit function.
dfb8478
dfb8478
Signed-off-by: Li Qiang <liqiang6-s@360.cn>
dfb8478
Message-Id: <583cde9c.3223ed0a.7f0c2.886e@mx.google.com>
dfb8478
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
dfb8478
(cherry picked from commit eb7a20a3616085d46aa6b4b4224e15587ec67e6e)
dfb8478
---
dfb8478
 hw/watchdog/wdt_i6300esb.c | 9 +++++++++
dfb8478
 1 file changed, 9 insertions(+)
dfb8478
dfb8478
diff --git a/hw/watchdog/wdt_i6300esb.c b/hw/watchdog/wdt_i6300esb.c
dfb8478
index a83d951..49b3cd1 100644
dfb8478
--- a/hw/watchdog/wdt_i6300esb.c
dfb8478
+++ b/hw/watchdog/wdt_i6300esb.c
dfb8478
@@ -428,6 +428,14 @@ static void i6300esb_realize(PCIDevice *dev, Error **errp)
dfb8478
     /* qemu_register_coalesced_mmio (addr, 0x10); ? */
dfb8478
 }
dfb8478
 
dfb8478
+static void i6300esb_exit(PCIDevice *dev)
dfb8478
+{
dfb8478
+    I6300State *d = WATCHDOG_I6300ESB_DEVICE(dev);
dfb8478
+
dfb8478
+    timer_del(d->timer);
dfb8478
+    timer_free(d->timer);
dfb8478
+}
dfb8478
+
dfb8478
 static WatchdogTimerModel model = {
dfb8478
     .wdt_name = "i6300esb",
dfb8478
     .wdt_description = "Intel 6300ESB",
dfb8478
@@ -441,6 +449,7 @@ static void i6300esb_class_init(ObjectClass *klass, void *data)
dfb8478
     k->config_read = i6300esb_config_read;
dfb8478
     k->config_write = i6300esb_config_write;
dfb8478
     k->realize = i6300esb_realize;
dfb8478
+    k->exit = i6300esb_exit;
dfb8478
     k->vendor_id = PCI_VENDOR_ID_INTEL;
dfb8478
     k->device_id = PCI_DEVICE_ID_INTEL_ESB_9;
dfb8478
     k->class_id = PCI_CLASS_SYSTEM_OTHER;