From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: Roman Kagan <rkagan@virtuozzo.com>
Subject: [Qemu-devel] [PULL 07/20] i386/hyperv: error out if features requested but unsupported
Date: Fri, 6 Apr 2018 19:11:08 +0200 [thread overview]
Message-ID: <1523034681-33787-8-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1523034681-33787-1-git-send-email-pbonzini@redhat.com>
From: Roman Kagan <rkagan@virtuozzo.com>
In order to guarantee compatibility on migration, QEMU should have
complete control over the features it announces to the guest via CPUID.
However, for a number of Hyper-V-related cpu properties, if the
corresponding feature is not supported by the underlying KVM, the
propery is silently ignored and the feature is not announced to the
guest.
Refuse to start with an error instead.
Signed-off-by: Roman Kagan <rkagan@virtuozzo.com>
Message-Id: <20180330170209.20627-3-rkagan@virtuozzo.com>
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
target/i386/kvm.c | 43 ++++++++++++++++++++++++++++++++++---------
1 file changed, 34 insertions(+), 9 deletions(-)
diff --git a/target/i386/kvm.c b/target/i386/kvm.c
index b35623a..6c49954 100644
--- a/target/i386/kvm.c
+++ b/target/i386/kvm.c
@@ -632,11 +632,6 @@ static int hyperv_handle_properties(CPUState *cs)
X86CPU *cpu = X86_CPU(cs);
CPUX86State *env = &cpu->env;
- if (cpu->hyperv_time &&
- kvm_check_extension(cs->kvm_state, KVM_CAP_HYPERV_TIME) <= 0) {
- cpu->hyperv_time = false;
- }
-
if (cpu->hyperv_relaxed_timing) {
env->features[FEAT_HYPERV_EAX] |= HV_HYPERCALL_AVAILABLE;
}
@@ -645,6 +640,12 @@ static int hyperv_handle_properties(CPUState *cs)
env->features[FEAT_HYPERV_EAX] |= HV_APIC_ACCESS_AVAILABLE;
}
if (cpu->hyperv_time) {
+ if (kvm_check_extension(cs->kvm_state, KVM_CAP_HYPERV_TIME) <= 0) {
+ fprintf(stderr, "Hyper-V clocksources "
+ "(requested by 'hv-time' cpu flag) "
+ "are not supported by kernel\n");
+ return -ENOSYS;
+ }
env->features[FEAT_HYPERV_EAX] |= HV_HYPERCALL_AVAILABLE;
env->features[FEAT_HYPERV_EAX] |= HV_TIME_REF_COUNT_AVAILABLE;
env->features[FEAT_HYPERV_EAX] |= HV_REFERENCE_TSC_AVAILABLE;
@@ -659,17 +660,41 @@ static int hyperv_handle_properties(CPUState *cs)
env->features[FEAT_HYPERV_EAX] |= HV_ACCESS_FREQUENCY_MSRS;
env->features[FEAT_HYPERV_EDX] |= HV_FREQUENCY_MSRS_AVAILABLE;
}
- if (cpu->hyperv_crash && has_msr_hv_crash) {
+ if (cpu->hyperv_crash) {
+ if (!has_msr_hv_crash) {
+ fprintf(stderr, "Hyper-V crash MSRs "
+ "(requested by 'hv-crash' cpu flag) "
+ "are not supported by kernel\n");
+ return -ENOSYS;
+ }
env->features[FEAT_HYPERV_EDX] |= HV_GUEST_CRASH_MSR_AVAILABLE;
}
env->features[FEAT_HYPERV_EDX] |= HV_CPU_DYNAMIC_PARTITIONING_AVAILABLE;
- if (cpu->hyperv_reset && has_msr_hv_reset) {
+ if (cpu->hyperv_reset) {
+ if (!has_msr_hv_reset) {
+ fprintf(stderr, "Hyper-V reset MSR "
+ "(requested by 'hv-reset' cpu flag) "
+ "is not supported by kernel\n");
+ return -ENOSYS;
+ }
env->features[FEAT_HYPERV_EAX] |= HV_RESET_AVAILABLE;
}
- if (cpu->hyperv_vpindex && has_msr_hv_vpindex) {
+ if (cpu->hyperv_vpindex) {
+ if (!has_msr_hv_vpindex) {
+ fprintf(stderr, "Hyper-V VP_INDEX MSR "
+ "(requested by 'hv-vpindex' cpu flag) "
+ "is not supported by kernel\n");
+ return -ENOSYS;
+ }
env->features[FEAT_HYPERV_EAX] |= HV_VP_INDEX_AVAILABLE;
}
- if (cpu->hyperv_runtime && has_msr_hv_runtime) {
+ if (cpu->hyperv_runtime) {
+ if (!has_msr_hv_runtime) {
+ fprintf(stderr, "Hyper-V VP_RUNTIME MSR "
+ "(requested by 'hv-runtime' cpu flag) "
+ "is not supported by kernel\n");
+ return -ENOSYS;
+ }
env->features[FEAT_HYPERV_EAX] |= HV_VP_RUNTIME_AVAILABLE;
}
if (cpu->hyperv_synic) {
--
1.8.3.1
next prev parent reply other threads:[~2018-04-06 17:11 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-06 17:11 [Qemu-devel] [PULL 00/20] Miscellaneous patches for QEMU 2.12-rc Paolo Bonzini
2018-04-06 17:11 ` [Qemu-devel] [PULL 01/20] sys_membarrier: fix up include directives Paolo Bonzini
2018-04-06 17:44 ` Eric Blake
2018-04-06 17:11 ` [Qemu-devel] [PULL 02/20] target/i386: Fix andn instruction Paolo Bonzini
2018-04-06 17:11 ` [Qemu-devel] [PULL 03/20] scripts/checkpatch.pl: Bug fix Paolo Bonzini
2018-04-06 17:11 ` [Qemu-devel] [PULL 04/20] memfd: fix vhost-user-test on non-memfd capable host Paolo Bonzini
2018-04-06 17:11 ` [Qemu-devel] [PULL 05/20] target/i386: WHPX: set CPUID_EXT_HYPERVISOR bit Paolo Bonzini
2018-04-06 17:11 ` [Qemu-devel] [PULL 06/20] i386/hyperv: add hv-frequencies cpu property Paolo Bonzini
2018-04-06 17:11 ` Paolo Bonzini [this message]
2018-04-06 17:11 ` [Qemu-devel] [PULL 08/20] configure: Add missing configure options to help text Paolo Bonzini
2018-04-06 17:11 ` [Qemu-devel] [PULL 09/20] scsi-disk: Don't enlarge min_io_size to max_io_size Paolo Bonzini
2018-04-06 17:11 ` [Qemu-devel] [PULL 10/20] scsi-disk: allow customizing the SCSI version Paolo Bonzini
2018-04-06 17:11 ` [Qemu-devel] [PULL 11/20] hw/scsi: support SCSI-2 passthrough without PI Paolo Bonzini
2018-04-06 17:11 ` [Qemu-devel] [PULL 12/20] hw/dma/i82374: Avoid double creation of the 82374 controller Paolo Bonzini
2018-04-06 17:11 ` [Qemu-devel] [PULL 13/20] kvmclock: fix clock_is_reliable on migration from QEMU < 2.9 Paolo Bonzini
2018-04-06 17:11 ` [Qemu-devel] [PULL 14/20] virtio-serial: fix heapover-flow Paolo Bonzini
2018-04-06 17:11 ` [Qemu-devel] [PULL 15/20] qemu-pr-helper: Daemonize before dropping privileges Paolo Bonzini
2018-04-06 17:11 ` [Qemu-devel] [PULL 16/20] qemu-pr-helper: Write pidfile more often Paolo Bonzini
2018-04-06 17:11 ` [Qemu-devel] [PULL 17/20] device-crash-test: Remove fixed isa-fdc entry Paolo Bonzini
2018-04-06 17:11 ` [Qemu-devel] [PULL 18/20] dump: Fix build with newer gcc Paolo Bonzini
2018-04-06 17:11 ` [Qemu-devel] [PULL 19/20] maint: Add .mailmap entries for patches claiming list authorship Paolo Bonzini
2018-04-06 17:11 ` [Qemu-devel] [PULL 20/20] Add missing bit for SSE instr in VEX decoding Paolo Bonzini
2018-04-09 9:20 ` [Qemu-devel] [PULL 00/20] Miscellaneous patches for QEMU 2.12-rc Peter Maydell
2018-04-09 10:57 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1523034681-33787-8-git-send-email-pbonzini@redhat.com \
--to=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rkagan@virtuozzo.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).