On 12/08/09 11:52, Daniel P. Berrange wrote:
On Tue, Dec 08, 2009 at 11:40:54AM +0100, Gerd Hoffmann wrote:
"worked" as in "guest actually sees the new device (without reboot)" or
"worked" as in "qemu didn't abort" ?

The latter. The guest does not see it, but it at least does not abort.
It is the 'does not abort' behaviour I'm interested in - quite OK with
this returning an error to the monitor client when acpi is disabled.

Does the attached patch fix it for you?

cheers,
  Gerd

>From c87a20bc8c0347770f55c8267ec10667cd2ba24c Mon Sep 17 00:00:00 2001
From: Gerd Hoffmann <kra...@redhat.com>
Date: Tue, 8 Dec 2009 13:50:16 +0100
Subject: [PATCH] fix pci hotplug


Signed-off-by: Gerd Hoffmann <kra...@redhat.com>
---
 hw/pci-hotplug.c |   17 ++++++++++++++++-
 1 files changed, 16 insertions(+), 1 deletions(-)

diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c
index 081d6d1..7e5c51d 100644
--- a/hw/pci-hotplug.c
+++ b/hw/pci-hotplug.c
@@ -40,7 +40,18 @@ static PCIDevice *qemu_pci_hot_add_nic(Monitor *mon,
                                        const char *opts_str)
 {
     QemuOpts *opts;
-    int ret;
+    PCIBus *bus;
+    int ret, devfn;
+
+    bus = pci_get_bus_devfn(&devfn, devaddr);
+    if (!bus) {
+        monitor_printf(mon, "Invalid PCI device address %s\n", devaddr);
+        return NULL;
+    }
+    if (!((BusState*)bus)->allow_hotplug) {
+        monitor_printf(mon, "PCI bus doesn't support hotplug\n");
+        return NULL;
+    }
 
     opts = qemu_opts_parse(&qemu_net_opts, opts_str ? opts_str : "", NULL);
     if (!opts) {
@@ -179,6 +190,10 @@ static PCIDevice *qemu_pci_hot_add_storage(Monitor *mon,
         monitor_printf(mon, "Invalid PCI device address %s\n", devaddr);
         return NULL;
     }
+    if (!((BusState*)bus)->allow_hotplug) {
+        monitor_printf(mon, "PCI bus doesn't support hotplug\n");
+        return NULL;
+    }
 
     switch (type) {
     case IF_SCSI:
-- 
1.6.5.2

Reply via email to