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