qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 2/4] kvm: Allow invtsc migration if tsc-khz is s


From: Marcelo Tosatti
Subject: Re: [Qemu-devel] [PATCH 2/4] kvm: Allow invtsc migration if tsc-khz is set explicitly
Date: Wed, 4 Jan 2017 09:44:06 -0200
User-agent: Mutt/1.5.21 (2010-09-15)

On Tue, Dec 27, 2016 at 05:21:18PM -0200, Eduardo Habkost wrote:
> We can safely allow a VM to be migrated with invtsc enabled if
> tsc-khz is set explicitly, because QEMU already refuses to start
> if it can't set the TSC frequency to the configured value.

On the source host, yes, but on the destination it does not.

SOURCE: -cpu kvm64,tsc-frequency=2660001000
DESTINATION: -cpu kvm64

Only prints:

qemu-system-x86_64: warning: TSC frequency mismatch between VM (2660001
kHz) and host (2893428 kHz), and TSC scaling unavailable
qemu-system-x86_64: warning: TSC frequency mismatch between VM (2660001
kHz) and host (2893428 kHz), and TSC scaling unavailable

And allows migration.

> Signed-off-by: Eduardo Habkost <address@hidden>
> ---
>  target/i386/kvm.c | 19 ++++++++++---------
>  1 file changed, 10 insertions(+), 9 deletions(-)
> 
> diff --git a/target/i386/kvm.c b/target/i386/kvm.c
> index a26290f..6a51399 100644
> --- a/target/i386/kvm.c
> +++ b/target/i386/kvm.c
> @@ -962,15 +962,16 @@ int kvm_arch_init_vcpu(CPUState *cs)
>          has_msr_mcg_ext_ctl = has_msr_feature_control = true;
>      }
>  
> -    if ((env->features[FEAT_8000_0007_EDX] & CPUID_APM_INVTSC) &&
> -        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;
> +    if (!env->user_tsc_khz) {
> +        if ((env->features[FEAT_8000_0007_EDX] & CPUID_APM_INVTSC) &&
> +            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;
> -- 
> 2.7.4



reply via email to

[Prev in Thread] Current Thread [Next in Thread]