On 02/16/2010 07:12 AM, Daniel P. Berrange wrote: > QEMU has a monitor command 'set_cpu' which allows a specific > CPU to be toggled between online& offline state. libvirt CPU > hotplug does not work in terms of individual indexes CPUs. > Thus to support this, we iteratively toggle the online state > when the total number of vCPUs is adjusted via libvirt > > NB, currently untested since QEMU segvs when running this! > > * src/qemu/qemu_driver.c: Toggle online state for CPUs when > doing hotplug > * src/qemu/qemu_monitor.c, src/qemu/qemu_monitor.h, > src/qemu/qemu_monitor_json.c, src/qemu/qemu_monitor_json.h, > src/qemu/qemu_monitor_text.c, src/qemu/qemu_monitor_text.h: Add > monitor API for toggling a CPU's online status via 'set_cpu > --- > src/qemu/qemu_driver.c | 59 ++++++++++++++++++++++++++++++++++++----- > src/qemu/qemu_monitor.c | 14 ++++++++++ > src/qemu/qemu_monitor.h | 2 + > src/qemu/qemu_monitor_json.c | 44 +++++++++++++++++++++++++++++++ > src/qemu/qemu_monitor_json.h | 1 + > src/qemu/qemu_monitor_text.c | 38 +++++++++++++++++++++++++++ > src/qemu/qemu_monitor_text.h | 1 + > 7 files changed, 151 insertions(+), 8 deletions(-) > Whoops, this made me realize I didn't actually push my changes to SetVcpus in the qemu driver. I've just done so. ... > static int qemudDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus) { > struct qemud_driver *driver = dom->conn->privateData; > virDomainObjPtr vm; > @@ -4228,12 +4273,6 @@ static int qemudDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus) { > if (qemuDomainObjBeginJob(vm) < 0) > goto cleanup; > > - if (virDomainObjIsActive(vm)) { > - qemuReportError(VIR_ERR_OPERATION_INVALID, "%s", > - _("cannot change vcpu count of an active domain")); > - goto endjob; > - } > - > if (!(type = virDomainVirtTypeToString(vm->def->virtType))) { > qemuReportError(VIR_ERR_INTERNAL_ERROR, > _("unknown virt type in domain definition '%d'"), > @@ -4254,8 +4293,12 @@ static int qemudDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus) { > goto endjob; > } > > - vm->def->vcpus = nvcpus; > - ret = 0; > + if (virDomainObjIsActive(vm)) { > + ret = qemudDomainHotplugVcpus(vm, nvcpus); > + } else { > + vm->def->vcpus = nvcpus; > + ret = 0; > + } > This portion will need to be rebased. Most important is to drop the inactive fallback above. Thanks, Cole -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list