[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 22/24] refactor drive_hot_add
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PATCH 22/24] refactor drive_hot_add |
Date: |
Fri, 25 Sep 2009 21:42:47 +0200 |
move pci device lookup into the "case IF_SCSI" section, so we
can do something else for other interface types.
Signed-off-by: Gerd Hoffmann <address@hidden>
---
hw/pci-hotplug.c | 38 +++++++++++++++++++-------------------
1 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c
index 6a08555..562b6b8 100644
--- a/hw/pci-hotplug.c
+++ b/hw/pci-hotplug.c
@@ -54,48 +54,48 @@ void drive_hot_add(Monitor *mon, const QDict *qdict)
int dom, pci_bus;
unsigned slot;
int type, bus;
- int success = 0;
PCIDevice *dev;
- DriveInfo *dinfo;
+ DriveInfo *dinfo = NULL;
const char *pci_addr = qdict_get_str(qdict, "pci_addr");
const char *opts = qdict_get_str(qdict, "opts");
BusState *scsibus;
- if (pci_read_devaddr(mon, pci_addr, &dom, &pci_bus, &slot)) {
- return;
- }
-
- dev = pci_find_device(pci_bus, slot, 0);
- if (!dev) {
- monitor_printf(mon, "no pci device with address %s\n", pci_addr);
- return;
- }
-
dinfo = add_init_drive(opts);
if (!dinfo)
- return;
+ goto err;
if (dinfo->devaddr) {
monitor_printf(mon, "Parameter addr not supported\n");
- return;
+ goto err;
}
type = dinfo->type;
bus = drive_get_max_bus (type);
switch (type) {
case IF_SCSI:
- success = 1;
+ if (pci_read_devaddr(mon, pci_addr, &dom, &pci_bus, &slot)) {
+ goto err;
+ }
+ dev = pci_find_device(pci_bus, slot, 0);
+ if (!dev) {
+ monitor_printf(mon, "no pci device with address %s\n", pci_addr);
+ goto err;
+ }
scsibus = QLIST_FIRST(&dev->qdev.child_bus);
scsi_bus_legacy_add_drive(DO_UPCAST(SCSIBus, qbus, scsibus),
dinfo, dinfo->unit);
+ monitor_printf(mon, "OK bus %d, unit %d\n",
+ dinfo->bus,
+ dinfo->unit);
break;
default:
monitor_printf(mon, "Can't hot-add drive to type %d\n", type);
+ goto err;
}
+ return;
- if (success)
- monitor_printf(mon, "OK bus %d, unit %d\n",
- dinfo->bus,
- dinfo->unit);
+err:
+ if (dinfo)
+ drive_uninit(dinfo);
return;
}
--
1.6.2.5
- [Qemu-devel] [PATCH 09/24] qdev: device free fixups., (continued)
- [Qemu-devel] [PATCH 09/24] qdev: device free fixups., Gerd Hoffmann, 2009/09/25
- [Qemu-devel] [PATCH 14/24] usb: hook unplug into qdev, cleanups + fixes., Gerd Hoffmann, 2009/09/25
- [Qemu-devel] [PATCH 17/24] usb: hotplug windup, Gerd Hoffmann, 2009/09/25
- [Qemu-devel] [PATCH 23/24] allow if=none for drive_add, Gerd Hoffmann, 2009/09/25
- [Qemu-devel] [PATCH 19/24] pci: hotplug windup, Gerd Hoffmann, 2009/09/25
- [Qemu-devel] [PATCH 15/24] switch qemu-config to qemu_error, Gerd Hoffmann, 2009/09/25
- [Qemu-devel] [PATCH 21/24] drive cleanup fixes., Gerd Hoffmann, 2009/09/25
- [Qemu-devel] [PATCH 18/24] scsi: hotplug windup, Gerd Hoffmann, 2009/09/25
- [Qemu-devel] [PATCH 22/24] refactor drive_hot_add,
Gerd Hoffmann <=
- [Qemu-devel] [PATCH 24/24] store a pointer to QemuOpts in DeviceState, release it when zapping a device., Gerd Hoffmann, 2009/09/25
- [Qemu-devel] [PATCH 16/24] qdev hotplug: infrastructure and monitor commands., Gerd Hoffmann, 2009/09/25
[Qemu-devel] [PATCH 20/24] pci: windup acpi-based hotplug, Gerd Hoffmann, 2009/09/25
Re: [Qemu-devel] [PATCH 00/24] qdev: bus management updates., Anthony Liguori, 2009/09/25
Re: [Qemu-devel] [PATCH 00/24] qdev: bus management updates., Markus Armbruster, 2009/09/28