Daniel P. Berrange wrote: > On Fri, Sep 18, 2009 at 05:26:12PM +0200, Wolfgang Mauerer wrote: >> This enables to hot-add disk controllers without attached >> disks into the system. Previously, it was only possible to >> (implicitly) add disk controllers in the static machine >> configuration. >> >> Notice that the actual functionality is only available >> for qemu at present, but other emulators can be extended >> likewise. > > Any idea what we can do about initial startup? eg, if we start > a guest with 1 SCSI controller and 1 disk, and then we've then > hotplugged a 2nd controller, and 1 disk. When we later boot > or migrate the same guest, we need to have suitable QEMU command > line args to make sure we get 2 controllers each with the same > disk, rather than 1 controller with 2 disks. I'm not sure how > we do this in QEMU, hopefully the existing args support it in > some way I've not realized, or failing that the new qdev -device > args might help us. I'm not yet sure how to solve that best. I'll take a look at how the -device can help exactly. > >> Signed-off-by: Wolfgang Mauerer <wolfgang.mauerer@xxxxxxxxxxx> >> Signed-off-by: Jan Kiszka <jan.kiszka@xxxxxxxxxxx> >> --- >> src/domain_conf.c | 26 +++++++++++++++++++++++--- >> src/domain_conf.h | 2 ++ >> src/libvirt_private.syms | 1 + >> src/qemu_driver.c | 21 +++++++++++++++++---- >> 4 files changed, 43 insertions(+), 7 deletions(-) >> >> diff --git a/src/domain_conf.c b/src/domain_conf.c >> index d0fda64..ea51fda 100644 >> --- a/src/domain_conf.c >> +++ b/src/domain_conf.c >> @@ -647,7 +647,6 @@ void virDomainRemoveInactive(virDomainObjListPtr doms, >> >> } >> >> - >> /* Parse the XML definition for a disk >> * @param node XML nodeset to parse for disk definition >> */ >> @@ -2554,6 +2553,27 @@ virDomainDeviceDefPtr virDomainDeviceDefParse(virConnectPtr conn, >> #endif >> >> >> +static int virDomainControllerCompare(virDomainControllerDefPtr a, >> + virDomainControllerDefPtr b) { >> + if (a->pci_addr.bus == b->pci_addr.bus) { >> + if (a->pci_addr.domain == b->pci_addr.domain) >> + return a->pci_addr.slot - b->pci_addr.slot; >> + >> + return a->pci_addr.domain - b->pci_addr.domain; >> + } >> + >> + return a->pci_addr.bus - b->pci_addr.bus; >> +} >> + >> + >> +int virDomainControllerQSort(const void *a, const void *b) >> +{ >> + const virDomainControllerDefPtr *da = a; >> + const virDomainControllerDefPtr *db = b; >> + >> + return virDomainControllerCompare(*da, *db); >> +} >> + > > I know we used todo this for disk devices, but I'd recommand not > going a qsort of devices when hotplugging/unplugging. For hotplug > always append to the list, for unplug just shuffle down later > devices in the list to fill the hole. okay. Thanks, Wolfgang -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list