mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00: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;
|
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))
|
if (virBufferError(&buf))
|
||||||
goto no_memory;
|
goto no_memory;
|
||||||
|
|
||||||
@ -7708,8 +7728,7 @@ qemuParseCommandLineCPU(virDomainDefPtr dom,
|
|||||||
cpu->model = model;
|
cpu->model = model;
|
||||||
model = NULL;
|
model = NULL;
|
||||||
}
|
}
|
||||||
}
|
} else if (*p == '+' || *p == '-') {
|
||||||
else if (*p == '+' || *p == '-') {
|
|
||||||
char *feature;
|
char *feature;
|
||||||
int policy;
|
int policy;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
@ -7779,6 +7798,41 @@ qemuParseCommandLineCPU(virDomainDefPtr dom,
|
|||||||
VIR_FREE(feature);
|
VIR_FREE(feature);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto error;
|
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));
|
} while ((p = next));
|
||||||
|
|
||||||
|
@ -241,6 +241,8 @@ mymain(void)
|
|||||||
|
|
||||||
DO_TEST("smp");
|
DO_TEST("smp");
|
||||||
|
|
||||||
|
DO_TEST("hyperv");
|
||||||
|
|
||||||
DO_TEST_FULL("restore-v1", 0, "stdio");
|
DO_TEST_FULL("restore-v1", 0, "stdio");
|
||||||
DO_TEST_FULL("restore-v2", 0, "stdio");
|
DO_TEST_FULL("restore-v2", 0, "stdio");
|
||||||
DO_TEST_FULL("restore-v2", 0, "exec:cat");
|
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("eoi-enabled", NONE);
|
||||||
DO_TEST("kvmclock+eoi-disabled", QEMU_CAPS_ENABLE_KVM);
|
DO_TEST("kvmclock+eoi-disabled", QEMU_CAPS_ENABLE_KVM);
|
||||||
|
|
||||||
|
DO_TEST("hyperv", NONE);
|
||||||
|
|
||||||
DO_TEST("hugepages", QEMU_CAPS_MEM_PATH);
|
DO_TEST("hugepages", QEMU_CAPS_MEM_PATH);
|
||||||
DO_TEST("disk-cdrom", NONE);
|
DO_TEST("disk-cdrom", NONE);
|
||||||
DO_TEST("disk-cdrom-empty", QEMU_CAPS_DRIVE);
|
DO_TEST("disk-cdrom-empty", QEMU_CAPS_DRIVE);
|
||||||
|
@ -150,6 +150,8 @@ mymain(void)
|
|||||||
DO_TEST("eoi-disabled");
|
DO_TEST("eoi-disabled");
|
||||||
DO_TEST("eoi-enabled");
|
DO_TEST("eoi-enabled");
|
||||||
|
|
||||||
|
DO_TEST("hyperv");
|
||||||
|
|
||||||
DO_TEST("hugepages");
|
DO_TEST("hugepages");
|
||||||
DO_TEST("disk-aio");
|
DO_TEST("disk-aio");
|
||||||
DO_TEST("disk-cdrom");
|
DO_TEST("disk-cdrom");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user