Signed-off-by: Jiri Denemark <jdenemar@xxxxxxxxxx> --- docs/formatdomaincaps.html.in | 13 +++++++++++-- docs/schemas/domaincaps.rng | 3 +++ src/conf/domain_capabilities.c | 13 ++++++++++++- src/conf/domain_capabilities.h | 1 + 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/docs/formatdomaincaps.html.in b/docs/formatdomaincaps.html.in index 7df9f0bbbf..1506f79818 100644 --- a/docs/formatdomaincaps.html.in +++ b/docs/formatdomaincaps.html.in @@ -201,7 +201,12 @@ <domainCapabilities> ... <cpu> - <mode name='host-passthrough' supported='yes'/> + <mode name='host-passthrough' supported='yes'> + <enum name='hostPassthroughMigratable'> + <value>on</value> + <value>off</value> + </enum> + </mode> <mode name='host-model' supported='yes'> <model fallback='allow'>Broadwell</model> <vendor>Intel</vendor> @@ -227,7 +232,11 @@ <dl> <dt><code>host-passthrough</code></dt> - <dd>No mode specific details are provided.</dd> + <dd> + The <code>hostPassthroughMigratable</code> enum shows possible values + of the <code>migratable</code> attribute for the <cpu> element + with <code>mode='host-passthrough'</code> in the domain XML. + </dd> <dt><code>host-model</code></dt> <dd> diff --git a/docs/schemas/domaincaps.rng b/docs/schemas/domaincaps.rng index 682cc82177..325581476d 100644 --- a/docs/schemas/domaincaps.rng +++ b/docs/schemas/domaincaps.rng @@ -99,6 +99,9 @@ <value>host-passthrough</value> </attribute> <ref name='supported'/> + <optional> + <ref name='enum'/> + </optional> </element> </define> diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c index 921d795630..0fa8aee78e 100644 --- a/src/conf/domain_capabilities.c +++ b/src/conf/domain_capabilities.c @@ -412,10 +412,21 @@ virDomainCapsCPUFormat(virBufferPtr buf, virBufferAddLit(buf, "<cpu>\n"); virBufferAdjustIndent(buf, 2); - virBufferAsprintf(buf, "<mode name='%s' supported='%s'/>\n", + virBufferAsprintf(buf, "<mode name='%s' supported='%s'", virCPUModeTypeToString(VIR_CPU_MODE_HOST_PASSTHROUGH), cpu->hostPassthrough ? "yes" : "no"); + if (cpu->hostPassthrough && cpu->hostPassthroughMigratable.report) { + virBufferAddLit(buf, ">\n"); + virBufferAdjustIndent(buf, 2); + ENUM_PROCESS(cpu, hostPassthroughMigratable, + virTristateSwitchTypeToString); + virBufferAdjustIndent(buf, -2); + virBufferAddLit(buf, "</mode>\n"); + } else { + virBufferAddLit(buf, "/>\n"); + } + virBufferAsprintf(buf, "<mode name='%s' ", virCPUModeTypeToString(VIR_CPU_MODE_HOST_MODEL)); if (cpu->hostModel) { diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h index 9f4a23d015..685d5e2a44 100644 --- a/src/conf/domain_capabilities.h +++ b/src/conf/domain_capabilities.h @@ -145,6 +145,7 @@ typedef struct _virDomainCapsCPU virDomainCapsCPU; typedef virDomainCapsCPU *virDomainCapsCPUPtr; struct _virDomainCapsCPU { bool hostPassthrough; + virDomainCapsEnum hostPassthroughMigratable; virCPUDefPtr hostModel; virDomainCapsCPUModelsPtr custom; }; -- 2.27.0