All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marcelo Tosatti <mtosatti@redhat.com>
To: Glauber Costa <glommer@redhat.com>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, avi@redhat.com
Subject: Re: [PATCH 5/6] Try using new kvm clock msrs
Date: Tue, 27 Apr 2010 10:35:43 -0300	[thread overview]
Message-ID: <20100427133543.GD18410@amt.cnet> (raw)
In-Reply-To: <1272303988-21929-6-git-send-email-glommer@redhat.com>

On Mon, Apr 26, 2010 at 01:46:27PM -0400, Glauber Costa wrote:
> We now added a new set of clock-related msrs in replacement of the old
> ones. In theory, we could just try to use them and get a return value
> indicating they do not exist, due to our use of kvm_write_msr_save.
> 
> However, kvm clock registration happens very early, and if we ever
> try to write to a non-existant MSR, we raise a lethal #GP, since our
> idt handlers are not in place yet.
> 
> So this patch tests for a cpuid feature exported by the host to
> decide which set of msrs are supported.
> 
> Signed-off-by: Glauber Costa <glommer@redhat.com>
> ---
>  arch/x86/kernel/kvmclock.c |   56 +++++++++++++++++++++++++++----------------
>  1 files changed, 35 insertions(+), 21 deletions(-)
> 
> diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
> index feaeb0d..f2f6aee 100644
> --- a/arch/x86/kernel/kvmclock.c
> +++ b/arch/x86/kernel/kvmclock.c
> @@ -29,6 +29,8 @@
>  #define KVM_SCALE 22
>  
>  static int kvmclock = 1;
> +static int msr_kvm_system_time = MSR_KVM_SYSTEM_TIME;
> +static int msr_kvm_wall_clock = MSR_KVM_WALL_CLOCK;
>  
>  static int parse_no_kvmclock(char *arg)
>  {
> @@ -41,6 +43,7 @@ early_param("no-kvmclock", parse_no_kvmclock);
>  static DEFINE_PER_CPU_SHARED_ALIGNED(struct pvclock_vcpu_time_info, hv_clock);
>  static struct pvclock_wall_clock wall_clock;
>  
> +

Extra newline.

>  /*
>   * The wallclock is the time of day when we booted. Since then, some time may
>   * have elapsed since the hypervisor wrote the data. So we try to account for
> @@ -54,7 +57,8 @@ static unsigned long kvm_get_wallclock(void)
>  
>  	low = (int)__pa_symbol(&wall_clock);
>  	high = ((u64)__pa_symbol(&wall_clock) >> 32);
> -	native_write_msr(MSR_KVM_WALL_CLOCK, low, high);
> +
> +	native_write_msr_safe(msr_kvm_wall_clock, low, high);
>  
>  	vcpu_time = &get_cpu_var(hv_clock);
>  	pvclock_read_wallclock(&wall_clock, vcpu_time, &ts);
> @@ -130,7 +134,8 @@ static int kvm_register_clock(char *txt)
>  	high = ((u64)__pa(&per_cpu(hv_clock, cpu)) >> 32);
>  	printk(KERN_INFO "kvm-clock: cpu %d, msr %x:%x, %s\n",
>  	       cpu, high, low, txt);
> -	return native_write_msr_safe(MSR_KVM_SYSTEM_TIME, low, high);
> +
> +	return native_write_msr_safe(msr_kvm_system_time, low, high);
>  }
>  
>  #ifdef CONFIG_X86_LOCAL_APIC
> @@ -165,14 +170,15 @@ static void __init kvm_smp_prepare_boot_cpu(void)
>  #ifdef CONFIG_KEXEC
>  static void kvm_crash_shutdown(struct pt_regs *regs)
>  {
> -	native_write_msr_safe(MSR_KVM_SYSTEM_TIME, 0, 0);
> +
> +	native_write_msr(msr_kvm_system_time, 0, 0);
>  	native_machine_crash_shutdown(regs);
>  }
>  #endif
>  
>  static void kvm_shutdown(void)
>  {
> -	native_write_msr_safe(MSR_KVM_SYSTEM_TIME, 0, 0);
> +	native_write_msr(msr_kvm_system_time, 0, 0);
>  	native_machine_shutdown();
>  }
>  
> @@ -181,27 +187,35 @@ void __init kvmclock_init(void)
>  	if (!kvm_para_available())
>  		return;
>  
> -	if (kvmclock && kvm_para_has_feature(KVM_FEATURE_CLOCKSOURCE)) {
> -		if (kvm_register_clock("boot clock"))
> -			return;
> -		pv_time_ops.sched_clock = kvm_clock_read;
> -		x86_platform.calibrate_tsc = kvm_get_tsc_khz;
> -		x86_platform.get_wallclock = kvm_get_wallclock;
> -		x86_platform.set_wallclock = kvm_set_wallclock;
> +	if (kvmclock && kvm_para_has_feature(KVM_FEATURE_CLOCKSOURCE2)) {
> +		msr_kvm_system_time = MSR_KVM_SYSTEM_TIME_NEW;
> +		msr_kvm_wall_clock = MSR_KVM_WALL_CLOCK_NEW;
> +	}
> +	else if (!(kvmclock && kvm_para_has_feature(KVM_FEATURE_CLOCKSOURCE)))
> +		return;

Non conformant indentation.


  parent reply	other threads:[~2010-04-27 13:41 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-04-26 17:46 [PATCH 0/6] pvclock fixes Glauber Costa
2010-04-26 17:46 ` [PATCH 1/6] Enable pvclock flags in vcpu_time_info structure Glauber Costa
2010-04-26 17:46   ` [PATCH 2/6] Add a global synchronization point for pvclock Glauber Costa
2010-04-26 17:46     ` [PATCH 3/6] change msr numbers for kvmclock Glauber Costa
2010-04-26 17:46       ` [PATCH 4/6] export new cpuid KVM_CAP Glauber Costa
2010-04-26 17:46         ` [PATCH 5/6] Try using new kvm clock msrs Glauber Costa
2010-04-26 17:46           ` [PATCH 6/6] don't compute pvclock adjustments if we trust the tsc Glauber Costa
2010-04-27 13:40             ` Marcelo Tosatti
2010-04-27 15:11               ` Glauber Costa
2010-04-27 18:03               ` Avi Kivity
2010-04-27 18:57                 ` Glauber Costa
2010-04-27 13:35           ` Marcelo Tosatti [this message]
2010-04-27 13:30         ` [PATCH 4/6] export new cpuid KVM_CAP Marcelo Tosatti
2010-04-27 15:09           ` Glauber Costa
2010-04-27 16:55           ` Glauber Costa
2010-04-27 18:12         ` Avi Kivity
2010-04-27 19:09           ` Glauber Costa
2010-04-27 19:20             ` Avi Kivity
2010-04-27 13:28     ` [PATCH 2/6] Add a global synchronization point for pvclock Marcelo Tosatti
2010-04-27 18:00       ` Jeremy Fitzhardinge
2010-04-26 18:11   ` [PATCH 1/6] Enable pvclock flags in vcpu_time_info structure Jeremy Fitzhardinge
2010-04-26 18:45     ` Glauber Costa
2010-04-27 18:07   ` Avi Kivity
2010-04-27 19:09     ` Glauber Costa
2010-04-27  2:21 ` [PATCH 0/6] pvclock fixes Zachary Amsden

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=20100427133543.GD18410@amt.cnet \
    --to=mtosatti@redhat.com \
    --cc=avi@redhat.com \
    --cc=glommer@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.