mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-26 23:55:23 +00:00
qemu: Allow making vcpus hotpluggable with virDomainSetVcpusFlags
Implement support for VIR_DOMAIN_VCPU_HOTPLUGGABLE so that users can choose to make vcpus added by the API removable.
This commit is contained in:
parent
0f95f31c83
commit
dfcd164ba9
@ -4915,7 +4915,8 @@ qemuDomainSetVcpusLive(virQEMUDriverPtr driver,
|
|||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
qemuDomainSetVcpusConfig(virDomainDefPtr def,
|
qemuDomainSetVcpusConfig(virDomainDefPtr def,
|
||||||
unsigned int nvcpus)
|
unsigned int nvcpus,
|
||||||
|
bool hotpluggable)
|
||||||
{
|
{
|
||||||
virDomainVcpuDefPtr vcpu;
|
virDomainVcpuDefPtr vcpu;
|
||||||
size_t curvcpus = virDomainDefGetVcpus(def);
|
size_t curvcpus = virDomainDefGetVcpus(def);
|
||||||
@ -4936,7 +4937,12 @@ qemuDomainSetVcpusConfig(virDomainDefPtr def,
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
vcpu->online = true;
|
vcpu->online = true;
|
||||||
vcpu->hotpluggable = VIR_TRISTATE_BOOL_NO;
|
if (hotpluggable) {
|
||||||
|
vcpu->hotpluggable = VIR_TRISTATE_BOOL_YES;
|
||||||
|
def->individualvcpus = true;
|
||||||
|
} else {
|
||||||
|
vcpu->hotpluggable = VIR_TRISTATE_BOOL_NO;
|
||||||
|
}
|
||||||
|
|
||||||
if (++curvcpus == nvcpus)
|
if (++curvcpus == nvcpus)
|
||||||
break;
|
break;
|
||||||
@ -4963,7 +4969,8 @@ qemuDomainSetVcpusInternal(virQEMUDriverPtr driver,
|
|||||||
virDomainObjPtr vm,
|
virDomainObjPtr vm,
|
||||||
virDomainDefPtr def,
|
virDomainDefPtr def,
|
||||||
virDomainDefPtr persistentDef,
|
virDomainDefPtr persistentDef,
|
||||||
unsigned int nvcpus)
|
unsigned int nvcpus,
|
||||||
|
bool hotpluggable)
|
||||||
{
|
{
|
||||||
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
|
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
@ -4988,7 +4995,7 @@ qemuDomainSetVcpusInternal(virQEMUDriverPtr driver,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (persistentDef) {
|
if (persistentDef) {
|
||||||
qemuDomainSetVcpusConfig(persistentDef, nvcpus);
|
qemuDomainSetVcpusConfig(persistentDef, nvcpus, hotpluggable);
|
||||||
|
|
||||||
if (virDomainSaveConfig(cfg->configDir, driver->caps, persistentDef) < 0)
|
if (virDomainSaveConfig(cfg->configDir, driver->caps, persistentDef) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -5011,12 +5018,14 @@ qemuDomainSetVcpusFlags(virDomainPtr dom,
|
|||||||
virDomainObjPtr vm = NULL;
|
virDomainObjPtr vm = NULL;
|
||||||
virDomainDefPtr def;
|
virDomainDefPtr def;
|
||||||
virDomainDefPtr persistentDef;
|
virDomainDefPtr persistentDef;
|
||||||
|
bool hotpluggable = !!(flags & VIR_DOMAIN_VCPU_HOTPLUGGABLE);
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
|
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
|
||||||
VIR_DOMAIN_AFFECT_CONFIG |
|
VIR_DOMAIN_AFFECT_CONFIG |
|
||||||
VIR_DOMAIN_VCPU_MAXIMUM |
|
VIR_DOMAIN_VCPU_MAXIMUM |
|
||||||
VIR_DOMAIN_VCPU_GUEST, -1);
|
VIR_DOMAIN_VCPU_GUEST |
|
||||||
|
VIR_DOMAIN_VCPU_HOTPLUGGABLE, -1);
|
||||||
|
|
||||||
if (!(vm = qemuDomObjFromDomain(dom)))
|
if (!(vm = qemuDomObjFromDomain(dom)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -5035,7 +5044,8 @@ qemuDomainSetVcpusFlags(virDomainPtr dom,
|
|||||||
else if (flags & VIR_DOMAIN_VCPU_MAXIMUM)
|
else if (flags & VIR_DOMAIN_VCPU_MAXIMUM)
|
||||||
ret = qemuDomainSetVcpusMax(driver, def, persistentDef, nvcpus);
|
ret = qemuDomainSetVcpusMax(driver, def, persistentDef, nvcpus);
|
||||||
else
|
else
|
||||||
ret = qemuDomainSetVcpusInternal(driver, vm, def, persistentDef, nvcpus);
|
ret = qemuDomainSetVcpusInternal(driver, vm, def, persistentDef,
|
||||||
|
nvcpus, hotpluggable);
|
||||||
|
|
||||||
endjob:
|
endjob:
|
||||||
qemuDomainObjEndJob(driver, vm);
|
qemuDomainObjEndJob(driver, vm);
|
||||||
|
Loading…
Reference in New Issue
Block a user