From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=37062 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OgKDX-000862-Up for qemu-devel@nongnu.org; Tue, 03 Aug 2010 12:19:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OgKDW-0004Qy-Un for qemu-devel@nongnu.org; Tue, 03 Aug 2010 12:19:51 -0400 Received: from mx1.redhat.com ([209.132.183.28]:27050) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OgKDW-0004Qp-N9 for qemu-devel@nongnu.org; Tue, 03 Aug 2010 12:19:50 -0400 From: Alex Williamson Date: Tue, 03 Aug 2010 10:19:47 -0600 Message-ID: <20100803161914.15514.59304.stgit@localhost6.localdomain6> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] [PATCH] qdev: Reset hotplugged devices List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: glommer@redhat.com, alex.williamson@redhat.com Several devices rely on their reset() function being called to initialize device state, e1000 and rtl8139 in particular. When the device is hot added, the reset doesn't occur, often leaving the device in an unusable state. Adding a call to reset() after init() for hotplugged devices puts the device in the expected state for the guest. Signed-off-by: Alex Williamson --- 0.13 candidate? hw/qdev.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/hw/qdev.c b/hw/qdev.c index e99c73f..b156272 100644 --- a/hw/qdev.c +++ b/hw/qdev.c @@ -278,6 +278,9 @@ int qdev_init(DeviceState *dev) qdev_free(dev); return rc; } + if (dev->hotplugged) { + qdev_reset(dev); + } qemu_register_reset(qdev_reset, dev); if (dev->info->vmsd) { vmstate_register_with_alias_id(dev, -1, dev->info->vmsd, dev,