From: Gleb Natapov <gleb@redhat.com>
To: Marcelo Tosatti <mtosatti@redhat.com>
Cc: kvm <kvm@vger.kernel.org>
Subject: Re: [uq/master PATCH] target-i386: kvm: save/restore steal time MSR
Date: Wed, 20 Feb 2013 16:26:03 +0200 [thread overview]
Message-ID: <20130220142603.GO3600@redhat.com> (raw)
In-Reply-To: <20130220022720.GA18505@amt.cnet>
On Tue, Feb 19, 2013 at 11:27:20PM -0300, Marcelo Tosatti wrote:
>
> Read and write steal time MSR, so that reporting is functional across
> migration.
>
> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
>
Reviewed-by: Gleb Natapov <gleb@redhat.com>
> diff --git a/target-i386/cpu.h b/target-i386/cpu.h
> index 7577e4f..17c7293 100644
> --- a/target-i386/cpu.h
> +++ b/target-i386/cpu.h
> @@ -792,6 +792,7 @@ typedef struct CPUX86State {
> #endif
> uint64_t system_time_msr;
> uint64_t wall_clock_msr;
> + uint64_t steal_time_msr;
> uint64_t async_pf_en_msr;
> uint64_t pv_eoi_en_msr;
>
> diff --git a/target-i386/kvm.c b/target-i386/kvm.c
> index 0cf413d..9ae9d74 100644
> --- a/target-i386/kvm.c
> +++ b/target-i386/kvm.c
> @@ -68,6 +68,7 @@ static bool has_msr_tsc_deadline;
> static bool has_msr_async_pf_en;
> static bool has_msr_pv_eoi_en;
> static bool has_msr_misc_enable;
> +static bool has_msr_kvm_steal_time;
> static int lm_capable_kernel;
>
> bool kvm_allows_irq0_override(void)
> @@ -507,6 +508,8 @@ int kvm_arch_init_vcpu(CPUState *cs)
>
> has_msr_pv_eoi_en = c->eax & (1 << KVM_FEATURE_PV_EOI);
>
> + has_msr_kvm_steal_time = c->eax & (1 << KVM_FEATURE_STEAL_TIME);
> +
> cpu_x86_cpuid(env, 0, 0, &limit, &unused, &unused, &unused);
>
> for (i = 0; i <= limit; i++) {
> @@ -1107,6 +1110,10 @@ static int kvm_put_msrs(X86CPU *cpu, int level)
> kvm_msr_entry_set(&msrs[n++], MSR_KVM_PV_EOI_EN,
> env->pv_eoi_en_msr);
> }
> + if (has_msr_kvm_steal_time) {
> + kvm_msr_entry_set(&msrs[n++], MSR_KVM_STEAL_TIME,
> + env->steal_time_msr);
> + }
> if (hyperv_hypercall_available()) {
> kvm_msr_entry_set(&msrs[n++], HV_X64_MSR_GUEST_OS_ID, 0);
> kvm_msr_entry_set(&msrs[n++], HV_X64_MSR_HYPERCALL, 0);
> @@ -1360,6 +1367,9 @@ static int kvm_get_msrs(X86CPU *cpu)
> if (has_msr_pv_eoi_en) {
> msrs[n++].index = MSR_KVM_PV_EOI_EN;
> }
> + if (has_msr_kvm_steal_time) {
> + msrs[n++].index = MSR_KVM_STEAL_TIME;
> + }
>
> if (env->mcg_cap) {
> msrs[n++].index = MSR_MCG_STATUS;
> @@ -1445,6 +1455,9 @@ static int kvm_get_msrs(X86CPU *cpu)
> case MSR_KVM_PV_EOI_EN:
> env->pv_eoi_en_msr = msrs[i].data;
> break;
> + case MSR_KVM_STEAL_TIME:
> + env->steal_time_msr = msrs[i].data;
> + break;
> }
> }
>
> diff --git a/target-i386/machine.c b/target-i386/machine.c
> index 8df6a6b..1feb9ca 100644
> --- a/target-i386/machine.c
> +++ b/target-i386/machine.c
> @@ -287,6 +287,24 @@ static bool pv_eoi_msr_needed(void *opaque)
> return cpu->pv_eoi_en_msr != 0;
> }
>
> +static bool steal_time_msr_needed(void *opaque)
> +{
> + CPUX86State *cpu = opaque;
> +
> + return cpu->steal_time_msr != 0;
> +}
> +
> +static const VMStateDescription vmstate_steal_time_msr = {
> + .name = "cpu/steal_time_msr",
> + .version_id = 1,
> + .minimum_version_id = 1,
> + .minimum_version_id_old = 1,
> + .fields = (VMStateField []) {
> + VMSTATE_UINT64(steal_time_msr, CPUX86State),
> + VMSTATE_END_OF_LIST()
> + }
> +};
> +
> static const VMStateDescription vmstate_async_pf_msr = {
> .name = "cpu/async_pf_msr",
> .version_id = 1,
> @@ -494,6 +512,9 @@ static const VMStateDescription vmstate_cpu = {
> .vmsd = &vmstate_pv_eoi_msr,
> .needed = pv_eoi_msr_needed,
> } , {
> + .vmsd = &vmstate_steal_time_msr,
> + .needed = steal_time_msr_needed,
> + } , {
> .vmsd = &vmstate_fpop_ip_dp,
> .needed = fpop_ip_dp_needed,
> }, {
--
Gleb.
next prev parent reply other threads:[~2013-02-20 14:26 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-20 2:27 [uq/master PATCH] target-i386: kvm: save/restore steal time MSR Marcelo Tosatti
2013-02-20 14:26 ` Gleb Natapov [this message]
2013-02-28 6:33 ` Gleb Natapov
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=20130220142603.GO3600@redhat.com \
--to=gleb@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=mtosatti@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.