From: Rusty Russell <rusty.russell@linaro.org>
To: Christoffer Dall <c.dall@virtualopensystems.com>,
android-virt@lists.cs.columbia.edu, kvm@vger.kernel.org
Cc: patches@linaro.org
Subject: [PATCH 2/3] ARM: KVM: Fake up performance counters a little more precisely.
Date: Thu, 29 Mar 2012 15:47:08 +1030 [thread overview]
Message-ID: <87r4wcx9yj.fsf@rustcorp.com.au> (raw)
In-Reply-To: <87y5qkxa88.fsf@rustcorp.com.au>
Rather than just making all of c9 read-zero/write-discard, this changes
it to the explicit profiling registers we need. This is a start for the
future implementation were we actually implement performance monitoring,
and makes sure we're not discarding important things.
Signed-off-by: Rusty Russell <rusty.russell@linaro.org>
---
arch/arm/kvm/emulate.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 65 insertions(+), 2 deletions(-)
diff --git a/arch/arm/kvm/emulate.c b/arch/arm/kvm/emulate.c
index aec1b6e..4bdab8f 100644
--- a/arch/arm/kvm/emulate.c
+++ b/arch/arm/kvm/emulate.c
@@ -238,6 +238,64 @@ static bool read_l2ctlr(struct kvm_vcpu *vcpu,
return true;
}
+static bool read_pmcr(struct kvm_vcpu *vcpu,
+ const struct coproc_params *p,
+ unsigned long arg)
+{
+ u32 imp, idcode, num;
+
+ imp = (vcpu->arch.cp15[c0_MIDR] & 0xFF000000) >> 24;
+ idcode = (vcpu->arch.cp15[c0_MIDR] & 0x00000FF0) >> 4;
+ /* No counters. */
+ num = 0;
+
+ /* Other bits are at reset value. */
+ *vcpu_reg(vcpu, p->Rt1) = (imp << 24) | (idcode << 16) | (num << 11);
+ return true;
+}
+
+/* FIXME: We ignore them enabling performance monitoring. */
+static bool write_pmcr(struct kvm_vcpu *vcpu,
+ const struct coproc_params *p,
+ unsigned long arg)
+{
+ u32 val = *vcpu_reg(vcpu, p->Rt1);
+
+ kvm_debug("pmcr write:%s%s%s%s%s%s\n",
+ val & (1 << 5) ? " DP" : "",
+ val & (1 << 4) ? " X" : "",
+ val & (1 << 3) ? " D" : "",
+ val & (1 << 2) ? " C" : "",
+ val & (1 << 1) ? " P" : "",
+ val & (1 << 0) ? " E" : "");
+ return true;
+}
+
+static bool read_pmcntenclr(struct kvm_vcpu *vcpu,
+ const struct coproc_params *p,
+ unsigned long arg)
+{
+ /* Cycle counter is off, there are no others. */
+ *vcpu_reg(vcpu, p->Rt1) = 0;
+ return true;
+}
+
+static bool write_pmcntenclr(struct kvm_vcpu *vcpu,
+ const struct coproc_params *p,
+ unsigned long arg)
+{
+ /* Writing a 1 means disable a counter. That's cool. */
+ return true;
+}
+
+static bool write_pmintenclr(struct kvm_vcpu *vcpu,
+ const struct coproc_params *p,
+ unsigned long arg)
+{
+ /* Writing a 1 means disable an overflow interrupt. That's cool. */
+ return true;
+}
+
static bool access_cp15_reg(struct kvm_vcpu *vcpu,
const struct coproc_params *p,
unsigned long cp15_reg)
@@ -279,13 +337,18 @@ struct coproc_emulate {
static const struct coproc_emulate coproc_emulate[] = {
/*
* L2CTLR access (guest wants to know #CPUs).
- *
- * FIXME: Hack Alert: Read zero as default case.
*/
{ CRn( 9), CRm( 0), Op1( 1), Op2( 2), is32, READ, read_l2ctlr},
{ CRn( 9), CRm(DF), Op1(DF), Op2(DF), is32, WRITE, ignore_write},
{ CRn( 9), CRm(DF), Op1(DF), Op2(DF), is32, READ, read_zero},
+ /* Guest reads/writes PMU, assuming there will be one. */
+ { CRn( 9), CRm(12), Op1( 0), Op2( 0), is32, READ, read_pmcr},
+ { CRn( 9), CRm(12), Op1( 0), Op2( 0), is32, WRITE, write_pmcr},
+ { CRn( 9), CRm(12), Op1( 0), Op2( 2), is32, READ, read_pmcntenclr},
+ { CRn( 9), CRm(12), Op1( 0), Op2( 2), is32, WRITE, write_pmcntenclr},
+ { CRn( 9), CRm(14), Op1( 0), Op2( 2), is32, WRITE, write_pmintenclr},
+
/*
* These CRn == 10 entries may not need to exist - if we can
* ignore guest attempts to tamper with TLB lockdowns then it
--
How could I marry someone with more hair than me? http://baldalex.org
next prev parent reply other threads:[~2012-03-29 5:18 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-12 6:51 [PATCH v7 00/12] KVM/ARM Implementation Christoffer Dall
2012-03-12 6:51 ` [PATCH v7 01/12] KVM: Introduce __KVM_HAVE_IRQ_LINE Christoffer Dall
2012-03-23 0:41 ` [PATCH] ARM: KVM: Check the cpuid we're being asked to emulate Rusty Russell
2012-05-14 22:57 ` Christoffer Dall
2012-05-16 23:58 ` Rusty Russell
2012-05-20 18:34 ` Christoffer Dall
2012-05-21 1:13 ` Rusty Russell
2012-03-12 6:52 ` [PATCH v7 02/12] KVM: Guard mmu_notifier specific code with CONFIG_MMU_NOTIFIER Christoffer Dall
2012-03-12 15:50 ` Avi Kivity
2012-03-12 6:52 ` [PATCH v7 03/12] ARM: KVM: Initial skeleton to compile KVM support Christoffer Dall
2012-03-12 6:52 ` [PATCH v7 04/12] ARM: KVM: Hypervisor identity mapping Christoffer Dall
2012-03-12 6:52 ` [PATCH v7 05/12] ARM: KVM: Hypervisor inititalization Christoffer Dall
2012-03-12 6:52 ` [PATCH v7 06/12] ARM: KVM: Memory virtualization setup Christoffer Dall
2012-03-12 6:52 ` [PATCH v7 07/12] ARM: KVM: Inject IRQs and FIQs from userspace Christoffer Dall
2012-03-12 6:52 ` [PATCH v7 08/12] ARM: KVM: World-switch implementation Christoffer Dall
2012-03-23 0:23 ` Rusty Russell
2012-03-28 13:05 ` Avi Kivity
2012-03-28 21:57 ` Rusty Russell
2012-03-29 10:49 ` Avi Kivity
2012-05-14 18:08 ` Christoffer Dall
2012-03-12 6:52 ` [PATCH v7 09/12] ARM: KVM: Emulation framework and CP15 emulation Christoffer Dall
2012-03-12 6:52 ` [PATCH v7 10/12] ARM: KVM: Handle guest faults in KVM Christoffer Dall
2012-03-12 15:31 ` [Android-virt] " Marc Zyngier
2012-03-12 16:23 ` Christoffer Dall
2012-03-12 16:28 ` Marc Zyngier
2012-03-12 6:53 ` [PATCH v7 11/12] ARM: KVM: Handle I/O aborts Christoffer Dall
2012-03-12 6:53 ` [PATCH v7 12/12] ARM: KVM: Guest wait-for-interrupts (WFI) support Christoffer Dall
2012-03-12 17:36 ` [PATCH v7 00/12] KVM/ARM Implementation Avi Kivity
2012-03-23 0:40 ` [PATCH] ARM: KVM: Remove l2ctlr write Rusty Russell
2012-05-14 22:59 ` Christoffer Dall
2012-03-29 5:11 ` [PATCH 0/3] Emulation cleanups Rusty, Russell <rusty.russell
2012-03-29 5:15 ` [PATCH 1/3] ARM: KVM: Remove l2ctlr write Rusty Russell
2012-03-29 5:17 ` Rusty Russell [this message]
2012-05-14 22:49 ` [PATCH 2/3] ARM: KVM: Fake up performance counters a little more precisely Christoffer Dall
2012-05-17 0:12 ` Rusty Russell
2012-03-29 5:17 ` [PATCH 3/3] ARM: KVM: Check the cpuid we're being asked to emulate Rusty Russell
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=87r4wcx9yj.fsf@rustcorp.com.au \
--to=rusty.russell@linaro.org \
--cc=android-virt@lists.cs.columbia.edu \
--cc=c.dall@virtualopensystems.com \
--cc=kvm@vger.kernel.org \
--cc=patches@linaro.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.