On 08/20/2010 12:00 PM, Markus Armbruster wrote:
Alex Williamson<alex.william...@redhat.com>  writes:

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<alex.william...@redhat.com>
---

  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,
qdev_reset() isn't necessary when !dev->hotplugged, because then
qemu_system_reset() will run shortly, which will call qdev_reset().
Correct?

Off-topic, but what's the reason for dev->hotplugged's existence? A device is either plugged or not, it is either hotpluggable or not, but is there a way to tell, from looking at a plugged device, whether it has been hotplugged in the past?

AFAICT it is redundant state and should be removed.

--
error compiling committee.c: too many arguments to function


Reply via email to