mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-11 09:17:52 +03:00
qemu: Add support for EOI with APIC
This patch adds full support for EOI setting for domains. Because this is CPU feature (flag), the model needs to be added even when it's not specified. Fortunately this problem was already solved with kvmclock, so this patch simply abuses that. And due to the size of the patch (17 lines) I dared to include the tests.
This commit is contained in:
parent
4a8b7cba80
commit
fbf9aa12c7
@ -4234,6 +4234,18 @@ qemuBuildCpuArgStr(const struct qemud_driver *driver,
|
||||
}
|
||||
}
|
||||
|
||||
if (def->apic_eoi) {
|
||||
char sign;
|
||||
if (def->apic_eoi == VIR_DOMAIN_APIC_EOI_ON)
|
||||
sign = '+';
|
||||
else
|
||||
sign = '-';
|
||||
|
||||
virBufferAsprintf(&buf, "%s,%ckvm_pv_eoi",
|
||||
have_cpu ? "" : default_model,
|
||||
sign);
|
||||
}
|
||||
|
||||
if (virBufferError(&buf))
|
||||
goto no_memory;
|
||||
|
||||
@ -7691,6 +7703,11 @@ qemuParseCommandLineCPU(virDomainDefPtr dom,
|
||||
}
|
||||
dom->clock.timers[i]->present = present;
|
||||
ret = 0;
|
||||
} else if (STREQ(feature, "kvm_pv_eoi")) {
|
||||
if (policy == VIR_CPU_FEATURE_REQUIRE)
|
||||
dom->apic_eoi = VIR_DOMAIN_APIC_EOI_ON;
|
||||
else
|
||||
dom->apic_eoi = VIR_DOMAIN_APIC_EOI_OFF;
|
||||
} else {
|
||||
if (!cpu) {
|
||||
if (!(cpu = qemuInitGuestCPU(dom)))
|
||||
|
@ -0,0 +1,4 @@
|
||||
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test ./qemu.sh -S -M pc \
|
||||
-cpu qemu32,-kvm_pv_eoi -m 214 -smp 6 -nographic -monitor \
|
||||
unix:/tmp/test-monitor,server,nowait -boot n -net none -serial none \
|
||||
-parallel none -usb
|
28
tests/qemuxml2argvdata/qemuxml2argv-cpu-eoi-disabled.xml
Normal file
28
tests/qemuxml2argvdata/qemuxml2argv-cpu-eoi-disabled.xml
Normal file
@ -0,0 +1,28 @@
|
||||
<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/>
|
||||
<apic eoi='off'/>
|
||||
<pae/>
|
||||
</features>
|
||||
<cpu mode='custom' match='exact'>
|
||||
<model fallback='allow'>qemu32</model>
|
||||
</cpu>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<emulator>/./qemu.sh</emulator>
|
||||
<controller type='usb' index='0'/>
|
||||
<memballoon model='virtio'/>
|
||||
</devices>
|
||||
</domain>
|
4
tests/qemuxml2argvdata/qemuxml2argv-cpu-eoi-enabled.args
Normal file
4
tests/qemuxml2argvdata/qemuxml2argv-cpu-eoi-enabled.args
Normal file
@ -0,0 +1,4 @@
|
||||
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test ./qemu.sh -S -M pc \
|
||||
-cpu qemu32,+kvm_pv_eoi -m 214 -smp 6 -nographic -monitor \
|
||||
unix:/tmp/test-monitor,server,nowait -boot n -net none -serial none \
|
||||
-parallel none -usb
|
28
tests/qemuxml2argvdata/qemuxml2argv-cpu-eoi-enabled.xml
Normal file
28
tests/qemuxml2argvdata/qemuxml2argv-cpu-eoi-enabled.xml
Normal file
@ -0,0 +1,28 @@
|
||||
<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/>
|
||||
<apic eoi='on'/>
|
||||
<pae/>
|
||||
</features>
|
||||
<cpu mode='custom' match='exact'>
|
||||
<model fallback='allow'>qemu32</model>
|
||||
</cpu>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<emulator>/./qemu.sh</emulator>
|
||||
<controller type='usb' index='0'/>
|
||||
<memballoon model='virtio'/>
|
||||
</devices>
|
||||
</domain>
|
4
tests/qemuxml2argvdata/qemuxml2argv-eoi-disabled.args
Normal file
4
tests/qemuxml2argvdata/qemuxml2argv-eoi-disabled.args
Normal file
@ -0,0 +1,4 @@
|
||||
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test ./qemu.sh -S -M pc \
|
||||
-cpu qemu32,-kvm_pv_eoi -m 214 -smp 6 -nographic -monitor \
|
||||
unix:/tmp/test-monitor,server,nowait -boot n -net none -serial \
|
||||
none -parallel none -usb
|
25
tests/qemuxml2argvdata/qemuxml2argv-eoi-disabled.xml
Normal file
25
tests/qemuxml2argvdata/qemuxml2argv-eoi-disabled.xml
Normal file
@ -0,0 +1,25 @@
|
||||
<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/>
|
||||
<apic eoi='off'/>
|
||||
<pae/>
|
||||
</features>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<emulator>/./qemu.sh</emulator>
|
||||
<controller type='usb' index='0'/>
|
||||
<memballoon model='virtio'/>
|
||||
</devices>
|
||||
</domain>
|
4
tests/qemuxml2argvdata/qemuxml2argv-eoi-enabled.args
Normal file
4
tests/qemuxml2argvdata/qemuxml2argv-eoi-enabled.args
Normal file
@ -0,0 +1,4 @@
|
||||
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test ./qemu.sh -S -M pc \
|
||||
-cpu qemu32,+kvm_pv_eoi -m 214 -smp 6 -nographic -monitor \
|
||||
unix:/tmp/test-monitor,server,nowait -boot n -net none -serial \
|
||||
none -parallel none -usb
|
25
tests/qemuxml2argvdata/qemuxml2argv-eoi-enabled.xml
Normal file
25
tests/qemuxml2argvdata/qemuxml2argv-eoi-enabled.xml
Normal file
@ -0,0 +1,25 @@
|
||||
<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/>
|
||||
<apic eoi='on'/>
|
||||
<pae/>
|
||||
</features>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<emulator>/./qemu.sh</emulator>
|
||||
<controller type='usb' index='0'/>
|
||||
<memballoon model='virtio'/>
|
||||
</devices>
|
||||
</domain>
|
@ -385,6 +385,11 @@ mymain(void)
|
||||
DO_TEST("cpu-host-kvmclock", QEMU_CAPS_ENABLE_KVM, QEMU_CAPS_CPU_HOST);
|
||||
DO_TEST("kvmclock", QEMU_CAPS_KVM);
|
||||
|
||||
DO_TEST("cpu-eoi-disabled", QEMU_CAPS_ENABLE_KVM);
|
||||
DO_TEST("cpu-eoi-enabled", QEMU_CAPS_ENABLE_KVM);
|
||||
DO_TEST("eoi-disabled", NONE);
|
||||
DO_TEST("eoi-enabled", NONE);
|
||||
|
||||
DO_TEST("hugepages", QEMU_CAPS_MEM_PATH);
|
||||
DO_TEST("disk-cdrom", NONE);
|
||||
DO_TEST("disk-cdrom-empty", QEMU_CAPS_DRIVE);
|
||||
|
@ -138,6 +138,12 @@ mymain(void)
|
||||
DO_TEST("cpu-kvmclock");
|
||||
DO_TEST("cpu-host-kvmclock");
|
||||
DO_TEST("kvmclock");
|
||||
|
||||
DO_TEST("cpu-eoi-disabled");
|
||||
DO_TEST("cpu-eoi-enabled");
|
||||
DO_TEST("eoi-disabled");
|
||||
DO_TEST("eoi-enabled");
|
||||
|
||||
DO_TEST("hugepages");
|
||||
DO_TEST("disk-aio");
|
||||
DO_TEST("disk-cdrom");
|
||||
|
Loading…
Reference in New Issue
Block a user