[PATCH v6 15/21] KVM: ARM64: Add reset and access handlers for PMUSERENR register
From: Marc Zyngier <hidden>
Date: 2015-12-09 09:49:06
Also in:
kvm, kvmarm
On Wed, 9 Dec 2015 17:18:02 +0800 Shannon Zhao [off-list ref] wrote:
On 2015/12/9 1:03, Marc Zyngier wrote:quoted
On 08/12/15 12:47, Shannon Zhao wrote:quoted
quoted
From: Shannon Zhao <redacted> The reset value of PMUSERENR_EL0 is UNKNOWN, use reset_unknown. Signed-off-by: Shannon Zhao <redacted> --- arch/arm64/kvm/sys_regs.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index c830fde..80b66c0 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c@@ -880,7 +880,7 @@ static const struct sys_reg_desc sys_reg_descs[] = { access_pmu_pmxevcntr }, /* PMUSERENR_EL0 */ { Op0(0b11), Op1(0b011), CRn(0b1001), CRm(0b1110), Op2(0b000), - trap_raz_wi }, + access_pmu_regs, reset_unknown, PMUSERENR_EL0 },So while the 64bit view of the register resets as unknown, a CPU resetting in 32bit mode resets as 0. I suggest you reset it as zero, and document that choice. You may have to revisit all the other registers that do reset as unknown for 64bit as well.Sure. BTW, here I didn't handle the bits of PMUSERENR which are used to permit/forbid accessing some PMU registers from EL0. Does it need to add the handler? Is there any way to get the exceptional level of the accessing in hypervisor?
Ah, good point, I missed that. Yes, we need to be able to handle that. To find out, you can use vcpu_mode_priv(), which returns true if the CPU was in a high privilege mode (EL1 for 64bit, anything higher than USR on 32bit), and false otherwise. So far, the only user is arch/arm/kvm/perf.c. Thanks, M. -- Without deviation from the norm, progress is not possible.