Patchwork [ANNOUNCE,Call-For-Testing] Release 0.12.0-rc1 of QEMU

login
register
mail settings
Submitter Gerd Hoffmann
Date Dec. 8, 2009, 12:52 p.m.
Message ID <4B1E4BFA.4010207@redhat.com>
Download mbox | patch
Permalink /patch/40634/
State New
Headers show

Comments

Gerd Hoffmann - Dec. 8, 2009, 12:52 p.m.
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 <kraxel@redhat.com>
Date: Tue, 8 Dec 2009 13:50:16 +0100
Subject: [PATCH] fix pci hotplug


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

Patch

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: