From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60672) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cBdxC-0003Yf-U8 for qemu-devel@nongnu.org; Tue, 29 Nov 2016 03:39:56 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cBdx8-0003QU-T8 for qemu-devel@nongnu.org; Tue, 29 Nov 2016 03:39:55 -0500 Received: from mx1.redhat.com ([209.132.183.28]:47224) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cBdx8-0003QI-N9 for qemu-devel@nongnu.org; Tue, 29 Nov 2016 03:39:50 -0500 Date: Tue, 29 Nov 2016 08:39:43 +0000 From: "Richard W.M. Jones" Message-ID: <20161129083943.GP11243@redhat.com> References: <583cde9c.3223ed0a.7f0c2.886e@mx.google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <583cde9c.3223ed0a.7f0c2.886e@mx.google.com> Subject: Re: [Qemu-devel] [PATCH] watchdog: 6300esb: add exit function List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Li Qiang Cc: qemu-devel@nongnu.org, Li Qiang On Mon, Nov 28, 2016 at 05:49:04PM -0800, Li Qiang wrote: > From: Li Qiang > > 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. > Signed-off-by: Li Qiang > --- > 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. Rich. > k->vendor_id = PCI_VENDOR_ID_INTEL; > k->device_id = PCI_DEVICE_ID_INTEL_ESB_9; > k->class_id = PCI_CLASS_SYSTEM_OTHER; > -- > 1.8.3.1 -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-p2v converts physical machines to virtual machines. Boot with a live CD or over the network (PXE) and turn machines into KVM guests. http://libguestfs.org/virt-v2v