mirror of
https://github.com/libvirt/libvirt.git
synced 2025-01-06 14:13:27 -06:00
qemu: Add support for direct and extended tlbflush features
They require special handling since they are dependent on the basic tlbflush feature itself and therefore are not handled automatically as part of virDomainHyperv enum, just like the stimer-direct feature. Resolves: https://issues.redhat.com/browse/RHEL-7122 Signed-off-by: Martin Kletzander <mkletzan@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
ac08b362da
commit
247357cc29
@ -6350,6 +6350,12 @@ qemuBuildCpuCommandLine(virCommand *cmd,
|
|||||||
if ((i == VIR_DOMAIN_HYPERV_STIMER) &&
|
if ((i == VIR_DOMAIN_HYPERV_STIMER) &&
|
||||||
(def->hyperv_stimer_direct == VIR_TRISTATE_SWITCH_ON))
|
(def->hyperv_stimer_direct == VIR_TRISTATE_SWITCH_ON))
|
||||||
virBufferAsprintf(&buf, ",%s=on", VIR_CPU_x86_HV_STIMER_DIRECT);
|
virBufferAsprintf(&buf, ",%s=on", VIR_CPU_x86_HV_STIMER_DIRECT);
|
||||||
|
if (i == VIR_DOMAIN_HYPERV_TLBFLUSH) {
|
||||||
|
if (def->hyperv_tlbflush_direct == VIR_TRISTATE_SWITCH_ON)
|
||||||
|
virBufferAsprintf(&buf, ",%s=on", VIR_CPU_x86_HV_TLBFLUSH_DIRECT);
|
||||||
|
if (def->hyperv_tlbflush_extended == VIR_TRISTATE_SWITCH_ON)
|
||||||
|
virBufferAsprintf(&buf, ",%s=on", VIR_CPU_x86_HV_TLBFLUSH_EXT);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VIR_DOMAIN_HYPERV_SPINLOCKS:
|
case VIR_DOMAIN_HYPERV_SPINLOCKS:
|
||||||
|
@ -4281,6 +4281,30 @@ qemuProcessVerifyHypervFeatures(virDomainDef *def,
|
|||||||
"direct");
|
"direct");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
if (i == VIR_DOMAIN_HYPERV_TLBFLUSH) {
|
||||||
|
if (def->hyperv_tlbflush_direct == VIR_TRISTATE_SWITCH_ON) {
|
||||||
|
rc = virCPUDataCheckFeature(cpu, VIR_CPU_x86_HV_TLBFLUSH_DIRECT);
|
||||||
|
if (rc < 0)
|
||||||
|
return -1;
|
||||||
|
if (rc == 0) {
|
||||||
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
|
_("host doesn't support hyperv tlbflush '%1$s' feature"),
|
||||||
|
"direct");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (def->hyperv_tlbflush_extended == VIR_TRISTATE_SWITCH_ON) {
|
||||||
|
rc = virCPUDataCheckFeature(cpu, VIR_CPU_x86_HV_TLBFLUSH_EXT);
|
||||||
|
if (rc < 0)
|
||||||
|
return -1;
|
||||||
|
if (rc == 0) {
|
||||||
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
|
_("host doesn't support hyperv tlbflush '%1$s' feature"),
|
||||||
|
"extended");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
|||||||
-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}' \
|
-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}' \
|
||||||
-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=on \
|
-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=on \
|
||||||
-accel tcg \
|
-accel tcg \
|
||||||
-cpu 'qemu64,hv-relaxed=on,hv-vapic=on,hv-spinlocks=0x2fff,hv-vpindex=on,hv-runtime=on,hv-synic=on,hv-stimer=on,hv-reset=on,hv-vendor-id=KVM Hv,hv-frequencies=on,hv-reenlightenment=on,hv-tlbflush=on,hv-ipi=on,hv-evmcs=on,hv-avic=on,hv-emsr-bitmap=on,hv-xmm-input=on' \
|
-cpu 'qemu64,hv-relaxed=on,hv-vapic=on,hv-spinlocks=0x2fff,hv-vpindex=on,hv-runtime=on,hv-synic=on,hv-stimer=on,hv-reset=on,hv-vendor-id=KVM Hv,hv-frequencies=on,hv-reenlightenment=on,hv-tlbflush=on,hv-tlbflush-direct=on,hv-tlbflush-ext=on,hv-ipi=on,hv-evmcs=on,hv-avic=on,hv-emsr-bitmap=on,hv-xmm-input=on' \
|
||||||
-m size=219136k \
|
-m size=219136k \
|
||||||
-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \
|
-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \
|
||||||
-overcommit mem-lock=off \
|
-overcommit mem-lock=off \
|
||||||
|
@ -22,7 +22,10 @@
|
|||||||
<vendor_id state='on' value='KVM Hv'/>
|
<vendor_id state='on' value='KVM Hv'/>
|
||||||
<frequencies state='on'/>
|
<frequencies state='on'/>
|
||||||
<reenlightenment state='on'/>
|
<reenlightenment state='on'/>
|
||||||
<tlbflush state='on'/>
|
<tlbflush state='on'>
|
||||||
|
<direct state='on'/>
|
||||||
|
<extended state='on'/>
|
||||||
|
</tlbflush>
|
||||||
<ipi state='on'/>
|
<ipi state='on'/>
|
||||||
<evmcs state='on'/>
|
<evmcs state='on'/>
|
||||||
<avic state='on'/>
|
<avic state='on'/>
|
||||||
|
Loading…
Reference in New Issue
Block a user