mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 16:23:55 -06:00
target-i386: block migration and savevm if invariant tsc is exposed
Invariant TSC documentation mentions that "invariant TSC will run at a constant rate in all ACPI P-, C-. and T-states". This is not the case if migration to a host with different TSC frequency is allowed, or if savevm is performed. So block migration/savevm. Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com> Reviewed-by: Eduardo Habkost <ehabkost@redhat.com> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> [AF+mtosatti: Updated error message] Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
parent
7d854c471a
commit
68bfd0ad4a
3 changed files with 17 additions and 2 deletions
|
@ -35,6 +35,8 @@
|
|||
#include "exec/ioport.h"
|
||||
#include <asm/hyperv.h>
|
||||
#include "hw/pci/pci.h"
|
||||
#include "migration/migration.h"
|
||||
#include "qapi/qmp/qerror.h"
|
||||
|
||||
//#define DEBUG_KVM
|
||||
|
||||
|
@ -448,6 +450,8 @@ static bool hyperv_enabled(X86CPU *cpu)
|
|||
cpu->hyperv_relaxed_timing);
|
||||
}
|
||||
|
||||
static Error *invtsc_mig_blocker;
|
||||
|
||||
#define KVM_MAX_CPUID_ENTRIES 100
|
||||
|
||||
int kvm_arch_init_vcpu(CPUState *cs)
|
||||
|
@ -705,6 +709,17 @@ int kvm_arch_init_vcpu(CPUState *cs)
|
|||
!!(c->ecx & CPUID_EXT_SMX);
|
||||
}
|
||||
|
||||
c = cpuid_find_entry(&cpuid_data.cpuid, 0x80000007, 0);
|
||||
if (c && (c->edx & 1<<8) && invtsc_mig_blocker == NULL) {
|
||||
/* for migration */
|
||||
error_setg(&invtsc_mig_blocker,
|
||||
"State blocked by non-migratable CPU device"
|
||||
" (invtsc flag)");
|
||||
migrate_add_blocker(invtsc_mig_blocker);
|
||||
/* for savevm */
|
||||
vmstate_x86_cpu.unmigratable = 1;
|
||||
}
|
||||
|
||||
cpuid_data.cpuid.padding = 0;
|
||||
r = kvm_vcpu_ioctl(cs, KVM_SET_CPUID2, &cpuid_data);
|
||||
if (r) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue