From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52625) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WlE5C-0007uQ-N1 for qemu-devel@nongnu.org; Fri, 16 May 2014 05:05:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WlE55-0007BO-Q0 for qemu-devel@nongnu.org; Fri, 16 May 2014 05:05:38 -0400 Received: from cantor2.suse.de ([195.135.220.15]:59614 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WlE55-0007AN-FN for qemu-devel@nongnu.org; Fri, 16 May 2014 05:05:31 -0400 Message-ID: <5375D4D8.1020700@suse.de> Date: Fri, 16 May 2014 11:05:28 +0200 From: =?ISO-8859-15?Q?Andreas_F=E4rber?= MIME-Version: 1.0 References: <1398876525-28831-1-git-send-email-ehabkost@redhat.com> <1398876525-28831-18-git-send-email-ehabkost@redhat.com> <5375220F.6060505@suse.de> In-Reply-To: <5375220F.6060505@suse.de> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v4 17/18] target-i386: block migration and savevm if invariant tsc is exposed List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eduardo Habkost , qemu-devel@nongnu.org, Marcelo Tosatti Cc: Juan Quintela , Cole Robinson , Luiz Capitulino , Paolo Bonzini , Igor Mammedov , Aurelien Jarno , Richard Henderson Am 15.05.2014 22:22, schrieb Andreas F=E4rber: > Am 30.04.2014 18:48, schrieb Eduardo Habkost: >> From: Marcelo Tosatti >> >> 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 frequen= cy >> is allowed, or if savevm is performed. So block migration/savevm. >> >> Also do not expose invariant tsc flag by default. >> >> Cc: Juan Quintela >> Signed-off-by: Marcelo Tosatti >> Reviewed-by: Eduardo Habkost >> Signed-off-by: Eduardo Habkost >> --- >> target-i386/cpu-qom.h | 2 +- >> target-i386/kvm.c | 13 +++++++++++++ >> target-i386/machine.c | 2 +- >> 3 files changed, 15 insertions(+), 2 deletions(-) >> >> diff --git a/target-i386/cpu-qom.h b/target-i386/cpu-qom.h >> index 016f90d..473d803 100644 >> --- a/target-i386/cpu-qom.h >> +++ b/target-i386/cpu-qom.h >> @@ -121,7 +121,7 @@ static inline X86CPU *x86_env_get_cpu(CPUX86State = *env) >> #define ENV_OFFSET offsetof(X86CPU, env) >> =20 >> #ifndef CONFIG_USER_ONLY >> -extern const struct VMStateDescription vmstate_x86_cpu; >> +extern struct VMStateDescription vmstate_x86_cpu; >> #endif >> =20 >> /** >> diff --git a/target-i386/kvm.c b/target-i386/kvm.c >> index 4389959..99cc7e3 100644 >> --- a/target-i386/kvm.c >> +++ b/target-i386/kvm.c >> @@ -33,6 +33,8 @@ >> #include "exec/ioport.h" >> #include >> #include "hw/pci/pci.h" >> +#include "migration/migration.h" >> +#include "qapi/qmp/qerror.h" >> =20 >> //#define DEBUG_KVM >> =20 >> @@ -447,6 +449,8 @@ static bool hyperv_enabled(X86CPU *cpu) >> cpu->hyperv_relaxed_timing); >> } >> =20 >> +Error *invtsc_mig_blocker; >=20 > This should be static, even if no zero-initialization is needed below. >=20 >> + >> #define KVM_MAX_CPUID_ENTRIES 100 >> =20 >> int kvm_arch_init_vcpu(CPUState *cs) >> @@ -702,6 +706,15 @@ int kvm_arch_init_vcpu(CPUState *cs) >> !!(c->ecx & CPUID_EXT_SMX); >> } >> =20 >> + c =3D cpuid_find_entry(&cpuid_data.cpuid, 0x80000007, 0); >> + if (c && (c->edx & 1<<8) && invtsc_mig_blocker =3D=3D NULL) { >> + /* for migration */ >> + error_set(&invtsc_mig_blocker, QERR_MIGRATION_NOT_SUPPORTED, = "cpu"); >=20 > This does not compile for me. error_setg()? With what text? http://git.qemu-project.org/?p=3Dqemu.git;a=3Dblobdiff;f=3Dinclude/qapi/q= mp/qerror.h;h=3D01d1d0661c607ace1c5d3831e5c79eeab851f6b7;hp=3Da72bbc98503= fe261bb8d2c407220252b1e6a85a4;hb=3Df231b88db14f13ee9a41599896f57f3594c1ca= 8b;hpb=3Dd73f0beadb57f885e678bffc362864f4401262e0 -#define QERR_MIGRATION_NOT_SUPPORTED \ - ERROR_CLASS_GENERIC_ERROR, "State blocked by non-migratable device '%s'" Suggesting something nicer than "device 'cpu'": diff --git a/target-i386/kvm.c b/target-i386/kvm.c index 1fe8512..9b09a1a 100644 --- a/target-i386/kvm.c +++ b/target-i386/kvm.c @@ -710,7 +710,8 @@ int kvm_arch_init_vcpu(CPUState *cs) c =3D cpuid_find_entry(&cpuid_data.cpuid, 0x80000007, 0); if (c && (c->edx & 1<<8) && invtsc_mig_blocker =3D=3D NULL) { /* for migration */ - error_set(&invtsc_mig_blocker, QERR_MIGRATION_NOT_SUPPORTED, "cpu"); + error_setg(&invtsc_mig_blocker, + "State blocked by non-migratable CPU device"); migrate_add_blocker(invtsc_mig_blocker); /* for savevm */ vmstate_x86_cpu.unmigratable =3D 1; >=20 > Regards, > Andreas --=20 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 N=FCrnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imend=F6rffer; HRB 16746 AG N=FCrnbe= rg