mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-20 11:48:28 -06:00
qemu: Add support for HyperV Enlightenment feature "relaxed"
This patch adds QEMU support for the "relaxed" feature implemented by previous patch.
This commit is contained in:
parent
cc922fddc3
commit
09f10a12be
@ -4238,6 +4238,26 @@ qemuBuildCpuArgStr(const struct qemud_driver *driver,
|
||||
have_cpu = true;
|
||||
}
|
||||
|
||||
if (def->features & (1 << VIR_DOMAIN_FEATURE_HYPERV)) {
|
||||
if (!have_cpu) {
|
||||
virBufferAdd(&buf, default_model, -1);
|
||||
have_cpu = true;
|
||||
}
|
||||
|
||||
for (i = 0; i < VIR_DOMAIN_HYPERV_LAST; i++) {
|
||||
switch ((enum virDomainHyperv) i) {
|
||||
case VIR_DOMAIN_HYPERV_RELAXED:
|
||||
if (def->hyperv_features[i] == VIR_DOMAIN_FEATURE_STATE_ON)
|
||||
virBufferAsprintf(&buf, ",hv_%s",
|
||||
virDomainHypervTypeToString(i));
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_HYPERV_LAST:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (virBufferError(&buf))
|
||||
goto no_memory;
|
||||
|
||||
@ -7708,8 +7728,7 @@ qemuParseCommandLineCPU(virDomainDefPtr dom,
|
||||
cpu->model = model;
|
||||
model = NULL;
|
||||
}
|
||||
}
|
||||
else if (*p == '+' || *p == '-') {
|
||||
} else if (*p == '+' || *p == '-') {
|
||||
char *feature;
|
||||
int policy;
|
||||
int ret = 0;
|
||||
@ -7779,6 +7798,41 @@ qemuParseCommandLineCPU(virDomainDefPtr dom,
|
||||
VIR_FREE(feature);
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
} else if (STRPREFIX(p, "hv_")) {
|
||||
char *feature;
|
||||
int f;
|
||||
p += 3; /* "hv_" */
|
||||
|
||||
if (*p == '\0' || *p == ',')
|
||||
goto syntax;
|
||||
|
||||
if (next)
|
||||
feature = strndup(p, next - p - 1);
|
||||
else
|
||||
feature = strdup(p);
|
||||
|
||||
if (!feature)
|
||||
goto no_memory;
|
||||
|
||||
dom->features |= (1 << VIR_DOMAIN_FEATURE_HYPERV);
|
||||
|
||||
if ((f = virDomainHypervTypeFromString(feature)) < 0) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("unsupported HyperV Enlightenment feature "
|
||||
"'%s'"), feature);
|
||||
goto error;
|
||||
}
|
||||
|
||||
switch ((enum virDomainHyperv) f) {
|
||||
case VIR_DOMAIN_HYPERV_RELAXED:
|
||||
dom->hyperv_features[f] = VIR_DOMAIN_FEATURE_STATE_ON;
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_HYPERV_LAST:
|
||||
break;
|
||||
}
|
||||
|
||||
VIR_FREE(feature);
|
||||
}
|
||||
} while ((p = next));
|
||||
|
||||
|
@ -241,6 +241,8 @@ mymain(void)
|
||||
|
||||
DO_TEST("smp");
|
||||
|
||||
DO_TEST("hyperv");
|
||||
|
||||
DO_TEST_FULL("restore-v1", 0, "stdio");
|
||||
DO_TEST_FULL("restore-v2", 0, "stdio");
|
||||
DO_TEST_FULL("restore-v2", 0, "exec:cat");
|
||||
|
4
tests/qemuxml2argvdata/qemuxml2argv-hyperv.args
Normal file
4
tests/qemuxml2argvdata/qemuxml2argv-hyperv.args
Normal file
@ -0,0 +1,4 @@
|
||||
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc \
|
||||
-cpu qemu32,hv_relaxed -m 214 -smp 6 -nographic -monitor \
|
||||
unix:/tmp/test-monitor,server,nowait -boot n -net none -serial none \
|
||||
-parallel none -usb
|
26
tests/qemuxml2argvdata/qemuxml2argv-hyperv.xml
Normal file
26
tests/qemuxml2argvdata/qemuxml2argv-hyperv.xml
Normal file
@ -0,0 +1,26 @@
|
||||
<domain type='qemu'>
|
||||
<name>QEMUGuest1</name>
|
||||
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
<memory unit='KiB'>219100</memory>
|
||||
<currentMemory unit='KiB'>219100</currentMemory>
|
||||
<vcpu placement='static'>6</vcpu>
|
||||
<os>
|
||||
<type arch='i686' machine='pc'>hvm</type>
|
||||
<boot dev='network'/>
|
||||
</os>
|
||||
<features>
|
||||
<acpi/>
|
||||
<hyperv>
|
||||
<relaxed state='on'/>
|
||||
</hyperv>
|
||||
</features>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<emulator>/usr/bin/qemu</emulator>
|
||||
<controller type='usb' index='0'/>
|
||||
<memballoon model='virtio'/>
|
||||
</devices>
|
||||
</domain>
|
@ -412,6 +412,8 @@ mymain(void)
|
||||
DO_TEST("eoi-enabled", NONE);
|
||||
DO_TEST("kvmclock+eoi-disabled", QEMU_CAPS_ENABLE_KVM);
|
||||
|
||||
DO_TEST("hyperv", NONE);
|
||||
|
||||
DO_TEST("hugepages", QEMU_CAPS_MEM_PATH);
|
||||
DO_TEST("disk-cdrom", NONE);
|
||||
DO_TEST("disk-cdrom-empty", QEMU_CAPS_DRIVE);
|
||||
|
@ -150,6 +150,8 @@ mymain(void)
|
||||
DO_TEST("eoi-disabled");
|
||||
DO_TEST("eoi-enabled");
|
||||
|
||||
DO_TEST("hyperv");
|
||||
|
||||
DO_TEST("hugepages");
|
||||
DO_TEST("disk-aio");
|
||||
DO_TEST("disk-cdrom");
|
||||
|
Loading…
Reference in New Issue
Block a user