From 1559e0d4b54d1b0744983b57da893617ceae8b94 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Mon, 4 Feb 2013 17:20:47 +0100 Subject: hw: move device-hotplug.o to toplevel, compile it once The situation with device-hotplug.c is similar to qdev-monitor.c. Add a stub for pci_drive_hot_add, so that it can be compiled once, and move it out of hw/. Signed-off-by: Paolo Bonzini --- Makefile.objs | 2 +- device-hotplug.c | 79 ++++++++++++++++++++++++++++++++++++++++++ hw/Makefile.objs | 1 - hw/device-hotplug.c | 88 ----------------------------------------------- stubs/Makefile.objs | 1 + stubs/pci-drive-hot-add.c | 10 ++++++ 6 files changed, 91 insertions(+), 90 deletions(-) create mode 100644 device-hotplug.c delete mode 100644 hw/device-hotplug.c create mode 100644 stubs/pci-drive-hot-add.c diff --git a/Makefile.objs b/Makefile.objs index 2a8174dd15..8c90b92d01 100644 --- a/Makefile.objs +++ b/Makefile.objs @@ -51,7 +51,7 @@ ifeq ($(CONFIG_SOFTMMU),y) common-obj-y = $(block-obj-y) blockdev.o blockdev-nbd.o block/ common-obj-y += net/ common-obj-y += readline.o -common-obj-y += qdev-monitor.o +common-obj-y += qdev-monitor.o device-hotplug.o common-obj-$(CONFIG_WIN32) += os-win32.o common-obj-$(CONFIG_POSIX) += os-posix.o diff --git a/device-hotplug.c b/device-hotplug.c new file mode 100644 index 0000000000..103d34ac45 --- /dev/null +++ b/device-hotplug.c @@ -0,0 +1,79 @@ +/* + * QEMU device hotplug helpers + * + * Copyright (c) 2004 Fabrice Bellard + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "hw/hw.h" +#include "hw/boards.h" +#include "sysemu/blockdev.h" +#include "qemu/config-file.h" +#include "sysemu/sysemu.h" +#include "monitor/monitor.h" + +DriveInfo *add_init_drive(const char *optstr) +{ + DriveInfo *dinfo; + QemuOpts *opts; + + opts = drive_def(optstr); + if (!opts) + return NULL; + + dinfo = drive_init(opts, current_machine->block_default_type); + if (!dinfo) { + qemu_opts_del(opts); + return NULL; + } + + return dinfo; +} + +void drive_hot_add(Monitor *mon, const QDict *qdict) +{ + DriveInfo *dinfo = NULL; + const char *opts = qdict_get_str(qdict, "opts"); + + dinfo = add_init_drive(opts); + if (!dinfo) { + goto err; + } + if (dinfo->devaddr) { + monitor_printf(mon, "Parameter addr not supported\n"); + goto err; + } + + switch (dinfo->type) { + case IF_NONE: + monitor_printf(mon, "OK\n"); + break; + default: + if (pci_drive_hot_add(mon, qdict, dinfo)) { + goto err; + } + } + return; + +err: + if (dinfo) { + drive_put_ref(dinfo); + } +} diff --git a/hw/Makefile.objs b/hw/Makefile.objs index f7ee133627..43f467a1ee 100644 --- a/hw/Makefile.objs +++ b/hw/Makefile.objs @@ -206,7 +206,6 @@ obj-$(CONFIG_SOFTMMU) += vhost_net.o obj-$(CONFIG_VHOST_NET) += vhost.o obj-$(CONFIG_REALLY_VIRTFS) += 9pfs/ obj-$(CONFIG_VGA) += vga.o -obj-$(CONFIG_SOFTMMU) += device-hotplug.o obj-$(CONFIG_XEN) += xen_domainbuild.o xen_machine_pv.o # Inter-VM PCI shared memory & VFIO PCI device assignment diff --git a/hw/device-hotplug.c b/hw/device-hotplug.c deleted file mode 100644 index 88da145a89..0000000000 --- a/hw/device-hotplug.c +++ /dev/null @@ -1,88 +0,0 @@ -/* - * QEMU device hotplug helpers - * - * Copyright (c) 2004 Fabrice Bellard - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#include "hw.h" -#include "boards.h" -#include "sysemu/blockdev.h" -#include "qemu/config-file.h" -#include "sysemu/sysemu.h" -#include "monitor/monitor.h" - -DriveInfo *add_init_drive(const char *optstr) -{ - DriveInfo *dinfo; - QemuOpts *opts; - - opts = drive_def(optstr); - if (!opts) - return NULL; - - dinfo = drive_init(opts, current_machine->block_default_type); - if (!dinfo) { - qemu_opts_del(opts); - return NULL; - } - - return dinfo; -} - -#if !defined(TARGET_I386) -int pci_drive_hot_add(Monitor *mon, const QDict *qdict, DriveInfo *dinfo) -{ - /* On non-x86 we don't do PCI hotplug */ - monitor_printf(mon, "Can't hot-add drive to type %d\n", dinfo->type); - return -1; -} -#endif - -void drive_hot_add(Monitor *mon, const QDict *qdict) -{ - DriveInfo *dinfo = NULL; - const char *opts = qdict_get_str(qdict, "opts"); - - dinfo = add_init_drive(opts); - if (!dinfo) { - goto err; - } - if (dinfo->devaddr) { - monitor_printf(mon, "Parameter addr not supported\n"); - goto err; - } - - switch (dinfo->type) { - case IF_NONE: - monitor_printf(mon, "OK\n"); - break; - default: - if (pci_drive_hot_add(mon, qdict, dinfo)) { - goto err; - } - } - return; - -err: - if (dinfo) { - drive_put_ref(dinfo); - } -} diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs index a2603947db..9c55b34354 100644 --- a/stubs/Makefile.objs +++ b/stubs/Makefile.objs @@ -15,6 +15,7 @@ stub-obj-y += mon-printf.o stub-obj-y += mon-print-filename.o stub-obj-y += mon-protocol-event.o stub-obj-y += mon-set-error.o +stub-obj-y += pci-drive-hot-add.o stub-obj-y += reset.o stub-obj-y += set-fd-handler.o stub-obj-y += slirp.o diff --git a/stubs/pci-drive-hot-add.c b/stubs/pci-drive-hot-add.c new file mode 100644 index 0000000000..1d98145802 --- /dev/null +++ b/stubs/pci-drive-hot-add.c @@ -0,0 +1,10 @@ +#include +#include +#include + +int pci_drive_hot_add(Monitor *mon, const QDict *qdict, DriveInfo *dinfo) +{ + /* On non-x86 we don't do PCI hotplug */ + monitor_printf(mon, "Can't hot-add drive to type %d\n", dinfo->type); + return -1; +} -- cgit v1.2.1