From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Eduardo Habkost" <ehabkost@redhat.com>,
"Marcelo Tosatti" <mtosatti@redhat.com>,
"Andrey Smetanin" <asmetanin@virtuozzo.com>,
"Denis V. Lunev" <den@openvz.org>,
"Andreas Färber" <afaerber@suse.de>,
"Richard Henderson" <rth@twiddle.net>
Subject: [Qemu-devel] [PULL 12/49] target-i386/kvm: Hyper-V HV_X64_MSR_VP_RUNTIME support
Date: Fri, 16 Oct 2015 10:49:34 +0200 [thread overview]
Message-ID: <1444985411-17803-13-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1444985411-17803-1-git-send-email-pbonzini@redhat.com>
From: Andrey Smetanin <asmetanin@virtuozzo.com>
HV_X64_MSR_VP_RUNTIME msr used by guest to get
"the time the virtual processor consumes running guest code,
and the time the associated logical processor spends running
hypervisor code on behalf of that guest."
Calculation of that time is performed by task_cputime_adjusted()
for vcpu task by KVM side.
Signed-off-by: Andrey Smetanin <asmetanin@virtuozzo.com>
Signed-off-by: Denis V. Lunev <den@openvz.org>
CC: Paolo Bonzini <pbonzini@redhat.com>
CC: Richard Henderson <rth@twiddle.net>
CC: Eduardo Habkost <ehabkost@redhat.com>
CC: "Andreas Färber" <afaerber@suse.de>
CC: Marcelo Tosatti <mtosatti@redhat.com>
Message-Id: <1442397584-16698-4-git-send-email-den@openvz.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
target-i386/cpu-qom.h | 1 +
target-i386/cpu.c | 1 +
target-i386/cpu.h | 1 +
target-i386/kvm.c | 21 ++++++++++++++++++++-
target-i386/machine.c | 20 ++++++++++++++++++++
5 files changed, 43 insertions(+), 1 deletion(-)
diff --git a/target-i386/cpu-qom.h b/target-i386/cpu-qom.h
index 8b5439b..9eab41b 100644
--- a/target-i386/cpu-qom.h
+++ b/target-i386/cpu-qom.h
@@ -92,6 +92,7 @@ typedef struct X86CPU {
bool hyperv_crash;
bool hyperv_reset;
bool hyperv_vpindex;
+ bool hyperv_runtime;
bool check_cpuid;
bool enforce_cpuid;
bool expose_kvm;
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index 741b94e..d2b0619 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -3142,6 +3142,7 @@ static Property x86_cpu_properties[] = {
DEFINE_PROP_BOOL("hv-crash", X86CPU, hyperv_crash, false),
DEFINE_PROP_BOOL("hv-reset", X86CPU, hyperv_reset, false),
DEFINE_PROP_BOOL("hv-vpindex", X86CPU, hyperv_vpindex, false),
+ DEFINE_PROP_BOOL("hv-runtime", X86CPU, hyperv_runtime, false),
DEFINE_PROP_BOOL("check", X86CPU, check_cpuid, false),
DEFINE_PROP_BOOL("enforce", X86CPU, enforce_cpuid, false),
DEFINE_PROP_BOOL("kvm", X86CPU, expose_kvm, true),
diff --git a/target-i386/cpu.h b/target-i386/cpu.h
index 54d9d50..a395b4b 100644
--- a/target-i386/cpu.h
+++ b/target-i386/cpu.h
@@ -911,6 +911,7 @@ typedef struct CPUX86State {
uint64_t msr_hv_vapic;
uint64_t msr_hv_tsc;
uint64_t msr_hv_crash_params[HV_X64_MSR_CRASH_PARAMS];
+ uint64_t msr_hv_runtime;
/* exception/interrupt handling */
int error_code;
diff --git a/target-i386/kvm.c b/target-i386/kvm.c
index 4d5ff9a..65cd944 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -84,6 +84,7 @@ static bool has_msr_hv_tsc;
static bool has_msr_hv_crash;
static bool has_msr_hv_reset;
static bool has_msr_hv_vpindex;
+static bool has_msr_hv_runtime;
static bool has_msr_mtrr;
static bool has_msr_xss;
@@ -464,7 +465,8 @@ static bool hyperv_enabled(X86CPU *cpu)
cpu->hyperv_relaxed_timing ||
cpu->hyperv_crash ||
cpu->hyperv_reset ||
- cpu->hyperv_vpindex);
+ cpu->hyperv_vpindex ||
+ cpu->hyperv_runtime);
}
static Error *invtsc_mig_blocker;
@@ -539,6 +541,9 @@ int kvm_arch_init_vcpu(CPUState *cs)
if (cpu->hyperv_vpindex && has_msr_hv_vpindex) {
c->eax |= HV_X64_MSR_VP_INDEX_AVAILABLE;
}
+ if (cpu->hyperv_runtime && has_msr_hv_runtime) {
+ c->eax |= HV_X64_MSR_VP_RUNTIME_AVAILABLE;
+ }
c = &cpuid_data.entries[cpuid_i++];
c->function = HYPERV_CPUID_ENLIGHTMENT_INFO;
if (cpu->hyperv_relaxed_timing) {
@@ -875,6 +880,10 @@ static int kvm_get_supported_msrs(KVMState *s)
has_msr_hv_vpindex = true;
continue;
}
+ if (kvm_msr_list->indices[i] == HV_X64_MSR_VP_RUNTIME) {
+ has_msr_hv_runtime = true;
+ continue;
+ }
}
}
@@ -1420,6 +1429,10 @@ static int kvm_put_msrs(X86CPU *cpu, int level)
kvm_msr_entry_set(&msrs[n++], HV_X64_MSR_CRASH_CTL,
HV_X64_MSR_CRASH_CTL_NOTIFY);
}
+ if (has_msr_hv_runtime) {
+ kvm_msr_entry_set(&msrs[n++], HV_X64_MSR_VP_RUNTIME,
+ env->msr_hv_runtime);
+ }
if (has_msr_mtrr) {
kvm_msr_entry_set(&msrs[n++], MSR_MTRRdefType, env->mtrr_deftype);
kvm_msr_entry_set(&msrs[n++],
@@ -1785,6 +1798,9 @@ static int kvm_get_msrs(X86CPU *cpu)
msrs[n++].index = HV_X64_MSR_CRASH_P0 + j;
}
}
+ if (has_msr_hv_runtime) {
+ msrs[n++].index = HV_X64_MSR_VP_RUNTIME;
+ }
if (has_msr_mtrr) {
msrs[n++].index = MSR_MTRRdefType;
msrs[n++].index = MSR_MTRRfix64K_00000;
@@ -1938,6 +1954,9 @@ static int kvm_get_msrs(X86CPU *cpu)
case HV_X64_MSR_CRASH_P0 ... HV_X64_MSR_CRASH_P4:
env->msr_hv_crash_params[index - HV_X64_MSR_CRASH_P0] = msrs[i].data;
break;
+ case HV_X64_MSR_VP_RUNTIME:
+ env->msr_hv_runtime = msrs[i].data;
+ break;
case MSR_MTRRdefType:
env->mtrr_deftype = msrs[i].data;
break;
diff --git a/target-i386/machine.c b/target-i386/machine.c
index 9fa0563..6737366 100644
--- a/target-i386/machine.c
+++ b/target-i386/machine.c
@@ -687,6 +687,25 @@ static const VMStateDescription vmstate_msr_hyperv_crash = {
}
};
+static bool hyperv_runtime_enable_needed(void *opaque)
+{
+ X86CPU *cpu = opaque;
+ CPUX86State *env = &cpu->env;
+
+ return env->msr_hv_runtime != 0;
+}
+
+static const VMStateDescription vmstate_msr_hyperv_runtime = {
+ .name = "cpu/msr_hyperv_runtime",
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .needed = hyperv_runtime_enable_needed,
+ .fields = (VMStateField[]) {
+ VMSTATE_UINT64(env.msr_hv_runtime, X86CPU),
+ VMSTATE_END_OF_LIST()
+ }
+};
+
static bool avx512_needed(void *opaque)
{
X86CPU *cpu = opaque;
@@ -869,6 +888,7 @@ VMStateDescription vmstate_x86_cpu = {
&vmstate_msr_hyperv_vapic,
&vmstate_msr_hyperv_time,
&vmstate_msr_hyperv_crash,
+ &vmstate_msr_hyperv_runtime,
&vmstate_avx512,
&vmstate_xss,
NULL
--
2.5.0
next prev parent reply other threads:[~2015-10-16 8:50 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-16 8:49 [Qemu-devel] [PULL 00/49] Misc patches for 2015-10-16 Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 01/49] nbd: switch from g_slice allocator to malloc Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 02/49] scsi: " Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 03/49] megasas: fix megasas_get_sata_addr Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 04/49] configure: Require Python 2.6 Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 05/49] exec.c: Don't call cpu_reload_memory_map() from cpu_exec_init() Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 06/49] cpu-exec-common.c: Clarify comment about cpu_reload_memory_map()'s RCU operations Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 07/49] exec.c: Collect AddressSpace related fields into a CPUAddressSpace struct Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 08/49] checkpatch: allow open braces on typedef lines Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 09/49] linux-headers: update from kvm/next Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 10/49] target-i386/kvm: Hyper-V HV_X64_MSR_RESET support Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 11/49] target-i386/kvm: set Hyper-V features cpuid bit HV_X64_MSR_VP_INDEX_AVAILABLE Paolo Bonzini
2015-10-16 8:49 ` Paolo Bonzini [this message]
2015-10-16 8:49 ` [Qemu-devel] [PULL 13/49] exec: remove non-TCG stuff from exec-all.h header Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 14/49] kvm-all: Align to qemu_real_host_page_size in kvm_set_phys_mem Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 15/49] checkpatch: port fix from kernel "## is not a valid modifier" Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 16/49] MAINTAINERS: add two devices to the e500 section Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 18/49] MAINTAINERS: Add more pxa2xx files and boards Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 19/49] MAINTAINERS: Add maintainer for ARM PrimeCell and integrated devices Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 20/49] MAINTAINERS: Add more devices to realview board Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 21/49] qemu-sockets: fix conversion of ipv4/ipv6 JSON to QemuOpts Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 22/49] README: fill out some useful quickstart information Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 23/49] qemu-char: cleanup qmp_chardev_add Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 24/49] qemu-char: cleanup HAVE_CHARDEV_* Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 25/49] qemu-char: add create to register_char_driver Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 26/49] qemu-char: convert file backend to data-driven creation Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 27/49] qemu-char: convert serial " Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 28/49] qemu-char: convert parallel " Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 29/49] qemu-char: convert pipe " Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 30/49] qemu-char: convert socket " Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 31/49] qemu-char: convert UDP " Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 32/49] qemu-char: convert pty " Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 33/49] qemu-char: convert null " Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 34/49] qemu-char: convert mux " Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 35/49] qemu-char: convert msmouse " Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 36/49] qemu-char: convert braille " Paolo Bonzini
2015-10-16 8:49 ` [Qemu-devel] [PULL 37/49] qemu-char: convert testdev " Paolo Bonzini
2015-10-16 12:23 ` Eric Blake
2015-10-16 8:50 ` [Qemu-devel] [PULL 38/49] qemu-char: convert stdio " Paolo Bonzini
2015-10-16 8:50 ` [Qemu-devel] [PULL 39/49] qemu-char: convert console " Paolo Bonzini
2015-10-16 8:50 ` [Qemu-devel] [PULL 40/49] qemu-char: convert spice " Paolo Bonzini
2015-10-16 8:50 ` [Qemu-devel] [PULL 41/49] qemu-char: convert vc " Paolo Bonzini
2015-10-16 8:50 ` [Qemu-devel] [PULL 42/49] qemu-char: convert ringbuf " Paolo Bonzini
2015-10-16 8:50 ` [Qemu-devel] [PULL 43/49] qemu-char: cleanup after completed conversion to cd->create Paolo Bonzini
2015-10-16 8:50 ` [Qemu-devel] [PULL 44/49] doc/rcu: fix g_free_rcu() usage example Paolo Bonzini
2015-10-16 8:50 ` [Qemu-devel] [PULL 45/49] kvm: Make KVM_CAP_SIGNAL_MSI globally available Paolo Bonzini
2015-10-16 8:50 ` [Qemu-devel] [PULL 46/49] hw/pci: Introduce pci_requester_id() Paolo Bonzini
2015-10-16 8:50 ` [Qemu-devel] [PULL 47/49] kvm: Pass PCI device pointer to MSI routing functions Paolo Bonzini
2015-10-16 8:50 ` [Qemu-devel] [PULL 48/49] kvm: Move x86-specific functions into target-i386/kvm.c Paolo Bonzini
2015-10-16 8:50 ` [Qemu-devel] [PULL 49/49] kvm: Allow the Hyper-V vendor ID to be specified Paolo Bonzini
2015-10-16 15:26 ` [Qemu-devel] [PULL 00/49] Misc patches for 2015-10-16 Paolo Bonzini
2015-10-18 16:55 ` Peter Maydell
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=1444985411-17803-13-git-send-email-pbonzini@redhat.com \
--to=pbonzini@redhat.com \
--cc=afaerber@suse.de \
--cc=asmetanin@virtuozzo.com \
--cc=den@openvz.org \
--cc=ehabkost@redhat.com \
--cc=mtosatti@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).