[libvirt] [PATCH 5/9] Implement controller hotplugging
Wolfgang Mauerer
wolfgang.mauerer at siemens.com
Fri Sep 25 13:03:18 UTC 2009
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 at siemens.com>
>> Signed-off-by: Jan Kiszka <jan.kiszka at siemens.com>
>> ---
>> 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
More information about the libvir-list
mailing list