From: Avi Kivity <avi@redhat.com>
To: Glauber Costa <glommer@redhat.com>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
Rik van Riel <riel@redhat.com>,
Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>,
Peter Zijlstra <peterz@infradead.org>
Subject: Re: [PATCH v3 4/6] KVM-GST: KVM Steal time registration
Date: Tue, 15 Feb 2011 16:41:21 +0200 [thread overview]
Message-ID: <4D5A9091.6090506@redhat.com> (raw)
In-Reply-To: <1297448364-14051-5-git-send-email-glommer@redhat.com>
On 02/11/2011 08:19 PM, Glauber Costa wrote:
> Register steal time within KVM. Everytime we sample the steal time
> information, we update a local variable that tells what was the
> last time read. We then account the difference.
>
>
>
> +static int kvm_register_steal_time(void)
> +{
> + int cpu = smp_processor_id();
> + int low, high, ret;
> + struct kvm_steal_time *st =&per_cpu(steal_time, cpu);
> +
> + if (!hypervisor_steal_time)
> + return 0;
You're using hypervisor_steal_time to communicate the existence of the
feature. Yuck.
> +
> + memset(st, 0, sizeof(*st));
> +
> + low = (int)__pa(st) | 1;
Named constant.
> + high = ((u64)__pa(st)>> 32);
> + ret = wrmsr_safe(MSR_KVM_STEAL_TIME, low, high);
No need for wrmsr_safe() since you're checking the cpuid bit. The other
APIs are nicer (no need to break into two words).
> + printk(KERN_INFO "kvm-stealtime: cpu %d, msr %x:%x\n",
> + cpu, high, low);
> + return ret;
> +}
> +
> #ifdef CONFIG_SMP
> static void __init kvm_smp_prepare_boot_cpu(void)
> {
> #ifdef CONFIG_KVM_CLOCK
> WARN_ON(kvm_register_clock("primary cpu clock"));
> #endif
> + WARN_ON(kvm_register_steal_time());
> kvm_guest_cpu_init();
> native_smp_prepare_boot_cpu();
> }
>
> static void __cpuinit kvm_guest_cpu_online(void *dummy)
> {
> + WARN_ON(kvm_register_steal_time());
> kvm_guest_cpu_init();
> }
>
> static void kvm_guest_cpu_offline(void *dummy)
> {
> kvm_pv_disable_apf(NULL);
> + wrmsr(MSR_KVM_STEAL_TIME, 0, 0);
This will trap if running on a hypervisor without this MSR.
> apf_task_wake_all();
> }
>
> @@ -534,6 +557,23 @@ static void __init kvm_apf_trap_init(void)
> set_intr_gate(14,&async_page_fault);
> }
>
> +static u64 kvm_account_steal_time(int cpu)
> +{
> + u64 steal;
> + struct kvm_steal_time *src;
> + int version;
> +
> + src =&per_cpu(steal_time, cpu);
> + do {
> + version = src->version;
> + rmb();
> + steal = src->steal;
> + rmb();
> + } while ((src->version& 1) || (version != src->version));
Check version & 1 instead of src->version & 1, slightly cheaper.
> +
> + return steal;
> +}
> +
>
> index f98d3ea..dcb6a67 100644
> --- a/arch/x86/kernel/kvmclock.c
> +++ b/arch/x86/kernel/kvmclock.c
> @@ -164,6 +164,7 @@ static void __cpuinit kvm_setup_secondary_clock(void)
> static void kvm_crash_shutdown(struct pt_regs *regs)
> {
> native_write_msr(msr_kvm_system_time, 0, 0);
> + wrmsr(MSR_KVM_STEAL_TIME, 0, 0);
> native_machine_crash_shutdown(regs);
> }
Make conditional. Needed for the previous wrmsr as well.
> #endif
> @@ -171,6 +172,7 @@ static void kvm_crash_shutdown(struct pt_regs *regs)
> static void kvm_shutdown(void)
> {
> native_write_msr(msr_kvm_system_time, 0, 0);
> + wrmsr(MSR_KVM_STEAL_TIME, 0, 0);
> native_machine_shutdown();
> }
>
Ditto. Is it me, or is the code duplicated?
--
error compiling committee.c: too many arguments to function
next prev parent reply other threads:[~2011-02-15 14:41 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-02-11 18:19 [PATCH v3 0/6] Steal time for KVM Glauber Costa
2011-02-11 18:19 ` [PATCH v3 1/6] KVM-HDR: KVM Steal time implementation Glauber Costa
2011-02-15 14:25 ` Avi Kivity
2011-02-11 18:19 ` [PATCH v3 2/6] KVM-HV: " Glauber Costa
2011-02-15 14:34 ` Avi Kivity
2011-02-11 18:19 ` [PATCH v3 3/6] KVM-GST: KVM Steal time accounting Glauber Costa
2011-02-11 19:05 ` Peter Zijlstra
2011-02-12 23:46 ` Glauber Costa
2011-02-15 14:35 ` Avi Kivity
2011-02-15 14:45 ` Peter Zijlstra
2011-02-15 15:17 ` Avi Kivity
2011-02-15 15:24 ` Rik van Riel
2011-02-15 15:26 ` Avi Kivity
2011-02-15 15:27 ` Peter Zijlstra
2011-02-11 18:19 ` [PATCH v3 4/6] KVM-GST: KVM Steal time registration Glauber Costa
2011-02-15 14:41 ` Avi Kivity [this message]
2011-02-15 15:48 ` Peter Zijlstra
2011-02-11 18:19 ` [PATCH v3 5/6] KVM-GST: adjust scheduler cpu power Glauber Costa
2011-02-11 19:05 ` Peter Zijlstra
2011-02-11 18:19 ` [PATCH v3 6/6] Describe KVM_MSR_STEAL_TIME Glauber Costa
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=4D5A9091.6090506@redhat.com \
--to=avi@redhat.com \
--cc=glommer@redhat.com \
--cc=jeremy.fitzhardinge@citrix.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=riel@redhat.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 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.