[libvirt] [PATCH] Add new 'kvm' domain feature and ability to hide KVM signature
Cole Robinson
crobinso at redhat.com
Tue Aug 19 16:40:50 UTC 2014
On 08/15/2014 12:32 PM, Alex Williamson wrote:
> QEMU 2.1 added support for the kvm=off option to the -cpu command,
> allowing the KVM hypervisor signature to be hidden from the guest.
> This enables disabling of some paravirualization features in the
> guest as well as allowing certain drivers which test for the
> hypervisor to load. Domain XML syntax is as follows:
>
> <domain type='kvm>
> ...
> <features>
> ...
> <kvm>
> <hidden state='on'/>
> </kvm>
> </features>
> ...
>
> Signed-off-by: Alex Williamson <alex.williamson at redhat.com>
> ---
>
> If it's not obvious, this patch is derived from copying and modifying
> the similar hyperv feature support. Hopefully I've found all the
> right pieces.
>
Seems to cover all the bases. couple minor bits:
> docs/formatdomain.html.in | 21 ++++
> docs/schemas/domaincommon.rng | 18 +++-
> src/conf/domain_conf.c | 100 ++++++++++++++++++++
> src/conf/domain_conf.h | 9 ++
> src/qemu/qemu_command.c | 22 ++++
> tests/qemuargv2xmltest.c | 2
> .../qemuxml2argv-kvm-features-off.args | 5 +
> .../qemuxml2argv-kvm-features-off.xml | 27 +++++
> .../qemuxml2argv-kvm-features.args | 5 +
> .../qemuxml2argvdata/qemuxml2argv-kvm-features.xml | 27 +++++
> tests/qemuxml2argvtest.c | 3 +
> tests/qemuxml2xmltest.c | 3 +
> 12 files changed, 240 insertions(+), 2 deletions(-)
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-kvm-features-off.args
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-kvm-features-off.xml
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-kvm-features.args
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-kvm-features.xml
>
> diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
> index bd99ae0..32cc381 100644
> --- a/docs/formatdomain.html.in
> +++ b/docs/formatdomain.html.in
> @@ -1232,6 +1232,9 @@
> <vapic state='on'/>
> <spinlocks state='on' retries='4096'/>
> </hyperv>
> + <kvm>
> + <hidden state='on'/>
> + </kvm>
> <pvspinlock/>
>
> </features>
> @@ -1310,7 +1313,23 @@
> can be explicitly disabled by using <code>state='off'</code>
> attribute.
> </dd>
> -
> + <dt><code>kvm</code></dt>
> + <dd>Various features to change the behavior of the KVM hypervisor.
> + <table class="top_table">
> + <tr>
> + <th>Feature</th>
> + <th>Description</th>
> + <th>Value</th>
> + <th>Since</th>
> + </tr>
> + <tr>
> + <td>hidden</td>
> + <td>Hide the KVM hypervisor from standard MSR based discovery</td>
> + <td> on, off</td>
> + <td><span class="since">2.1.0 (QEMU only)</span></td>
> + </tr>
> + </table>
> + </dd>
> </dl>
>
I'd specify that the default value is 'off' if using KVM, 'on' otherwise, and
can be explicitly disabled with 'on'.
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index 8a69976..77a84cc 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -6228,6 +6228,25 @@ qemuBuildCpuArgStr(virQEMUDriverPtr driver,
> }
> }
>
> + if (def->features[VIR_DOMAIN_FEATURE_KVM] == VIR_TRISTATE_SWITCH_ON) {
> + if (!have_cpu) {
> + virBufferAdd(&buf, default_model, -1);
> + have_cpu = true;
> + }
> +
> + for (i = 0; i < VIR_DOMAIN_KVM_LAST; i++) {
> + switch ((virDomainKVM) i) {
> + case VIR_DOMAIN_KVM_HIDDEN:
> + if (def->kvm_features[i] == VIR_TRISTATE_SWITCH_ON)
> + virBufferAsprintf(&buf, ",kvm=off");
> + break;
> +
There's a 'make syntax-check' warning here with latest git:
src/qemu/qemu_command.c:6241: virBufferAsprintf(&buf,
",kvm=off");
maint.mk: use virBufferAddLit, not virBufferAsprintf, with a string literal
make: *** [sc_prohibit_virBufferAsprintf_with_string_literal] Error 1
The rest looks fine, I'll commit v2 if no one has objections to the XML or
code (CCing Peter and Jan who did some of the hyperv work)
- Cole
More information about the libvir-list
mailing list