virtinst: enable most Hyper-V features by default

We will not enable hyperv_reset feature as modern Hyper-V versions don't
export it.

We also don't enable hyperv_reenlightenment as it is mostly relevant
when migrating VMs that are running Hyper-V inside and requires other
bits to work correctly.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
Pavel Hrdina 2024-08-26 11:35:20 +02:00 committed by Cole Robinson
parent 169db9dc5f
commit 74fd503b9e
8 changed files with 117 additions and 0 deletions

View File

@ -21,6 +21,15 @@
<relaxed state="on"/>
<vapic state="on"/>
<spinlocks state="on" retries="8191"/>
<vpindex state="on"/>
<runtime state="on"/>
<synic state="on"/>
<stimer state="on"/>
<frequencies state="on"/>
<tlbflush state="on"/>
<ipi state="on"/>
<evmcs state="on"/>
<avic state="on"/>
</hyperv>
<vmport state="off"/>
</features>
@ -96,6 +105,15 @@
<relaxed state="on"/>
<vapic state="on"/>
<spinlocks state="on" retries="8191"/>
<vpindex state="on"/>
<runtime state="on"/>
<synic state="on"/>
<stimer state="on"/>
<frequencies state="on"/>
<tlbflush state="on"/>
<ipi state="on"/>
<evmcs state="on"/>
<avic state="on"/>
</hyperv>
<vmport state="off"/>
</features>

View File

@ -21,6 +21,15 @@
<relaxed state="on"/>
<vapic state="on"/>
<spinlocks state="on" retries="8191"/>
<vpindex state="on"/>
<runtime state="on"/>
<synic state="on"/>
<stimer state="on"/>
<frequencies state="on"/>
<tlbflush state="on"/>
<ipi state="on"/>
<evmcs state="on"/>
<avic state="on"/>
</hyperv>
<vmport state="off"/>
</features>
@ -93,6 +102,15 @@
<relaxed state="on"/>
<vapic state="on"/>
<spinlocks state="on" retries="8191"/>
<vpindex state="on"/>
<runtime state="on"/>
<synic state="on"/>
<stimer state="on"/>
<frequencies state="on"/>
<tlbflush state="on"/>
<ipi state="on"/>
<evmcs state="on"/>
<avic state="on"/>
</hyperv>
<vmport state="off"/>
</features>

View File

@ -20,6 +20,15 @@
<relaxed state="on"/>
<vapic state="on"/>
<spinlocks state="on" retries="8191"/>
<vpindex state="on"/>
<runtime state="on"/>
<synic state="on"/>
<stimer state="on"/>
<frequencies state="on"/>
<tlbflush state="on"/>
<ipi state="on"/>
<evmcs state="on"/>
<avic state="on"/>
</hyperv>
</features>
<cpu mode="host-passthrough"/>
@ -111,6 +120,15 @@
<relaxed state="on"/>
<vapic state="on"/>
<spinlocks state="on" retries="8191"/>
<vpindex state="on"/>
<runtime state="on"/>
<synic state="on"/>
<stimer state="on"/>
<frequencies state="on"/>
<tlbflush state="on"/>
<ipi state="on"/>
<evmcs state="on"/>
<avic state="on"/>
</hyperv>
</features>
<cpu mode="host-passthrough"/>

View File

@ -21,6 +21,15 @@
<relaxed state="on"/>
<vapic state="on"/>
<spinlocks state="on" retries="8191"/>
<vpindex state="on"/>
<runtime state="on"/>
<synic state="on"/>
<stimer state="on"/>
<frequencies state="on"/>
<tlbflush state="on"/>
<ipi state="on"/>
<evmcs state="on"/>
<avic state="on"/>
</hyperv>
<vmport state="off"/>
</features>
@ -111,6 +120,15 @@
<relaxed state="on"/>
<vapic state="on"/>
<spinlocks state="on" retries="8191"/>
<vpindex state="on"/>
<runtime state="on"/>
<synic state="on"/>
<stimer state="on"/>
<frequencies state="on"/>
<tlbflush state="on"/>
<ipi state="on"/>
<evmcs state="on"/>
<avic state="on"/>
</hyperv>
<vmport state="off"/>
</features>

View File

@ -23,6 +23,15 @@
<relaxed state="on"/>
<vapic state="on"/>
<spinlocks state="on" retries="8191"/>
<vpindex state="on"/>
<runtime state="on"/>
<synic state="on"/>
<stimer state="on"/>
<frequencies state="on"/>
<tlbflush state="on"/>
<ipi state="on"/>
<evmcs state="on"/>
<avic state="on"/>
</hyperv>
<vmport state="off"/>
</features>
@ -124,6 +133,15 @@
<relaxed state="on"/>
<vapic state="on"/>
<spinlocks state="on" retries="8191"/>
<vpindex state="on"/>
<runtime state="on"/>
<synic state="on"/>
<stimer state="on"/>
<frequencies state="on"/>
<tlbflush state="on"/>
<ipi state="on"/>
<evmcs state="on"/>
<avic state="on"/>
</hyperv>
<vmport state="off"/>
</features>

View File

@ -20,6 +20,7 @@ class _CapsCPU(XMLBuilder):
XML_NAME = "cpu"
arch = XMLProperty("./arch")
model = XMLProperty("./model")
vendor = XMLProperty("./vendor")
######################################

View File

@ -27,6 +27,12 @@ class DomainClock(XMLBuilder):
offset = XMLProperty("./@offset")
timers = XMLChildProperty(_ClockTimer)
def has_hyperv_timer(self):
for timer in self.timers:
if timer.name == "hypervclock":
return True
return False
##################
# Default config #

View File

@ -81,6 +81,26 @@ class DomainFeatures(XMLBuilder):
_enable("vapic")
_enable("spinlocks")
_enable("spinlocks_retries", feature="spinlocks", value=8191)
_enable("vpindex")
_enable("runtime")
_enable("synic", requires=["vpindex"])
# Both hyperv_stimer and hyperv_stimer requires hv-timer to be enabled
# which libvirt hides under hypervclock timer.
if guest.clock.has_hyperv_timer():
_enable("stimer", requires=["vpindex", "synic"])
_enable("stimer_direct", requires=["vpindex", "synic", "stimer"])
_enable("frequencies")
_enable("tlbflush", requires=["vpindex"])
_enable("ipi", requires=["vpindex"])
if guest.conn.caps.host.cpu.vendor == "Intel":
_enable("evmcs", requires=["vapic"])
if self.apic is True:
_enable("avic")
def set_defaults(self, guest):
if guest.os.is_container():