Skip to content

Commit d3ba35b

Browse files
committed
KVM: arm64: nv: Reload PMU events upon MDCR_EL2.HPME change
MDCR_EL2.HPME is the 'global' enable bit for event counters reserved for EL2. Give the PMU a kick when it's changed to ensure events are reprogrammed before returning to the guest. Reviewed-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/20241217175550.3658212-1-oliver.upton@linux.dev Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
1 parent adf8623 commit d3ba35b

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

arch/arm64/kvm/sys_regs.c

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2448,6 +2448,26 @@ static unsigned int s1pie_el2_visibility(const struct kvm_vcpu *vcpu,
24482448
return __el2_visibility(vcpu, rd, s1pie_visibility);
24492449
}
24502450

2451+
static bool access_mdcr(struct kvm_vcpu *vcpu,
2452+
struct sys_reg_params *p,
2453+
const struct sys_reg_desc *r)
2454+
{
2455+
u64 old = __vcpu_sys_reg(vcpu, MDCR_EL2);
2456+
2457+
if (!access_rw(vcpu, p, r))
2458+
return false;
2459+
2460+
/*
2461+
* Request a reload of the PMU to enable/disable the counters affected
2462+
* by HPME.
2463+
*/
2464+
if ((old ^ __vcpu_sys_reg(vcpu, MDCR_EL2)) & MDCR_EL2_HPME)
2465+
kvm_make_request(KVM_REQ_RELOAD_PMU, vcpu);
2466+
2467+
return true;
2468+
}
2469+
2470+
24512471
/*
24522472
* Architected system registers.
24532473
* Important: Must be sorted ascending by Op0, Op1, CRn, CRm, Op2
@@ -2981,7 +3001,7 @@ static const struct sys_reg_desc sys_reg_descs[] = {
29813001
EL2_REG(SCTLR_EL2, access_rw, reset_val, SCTLR_EL2_RES1),
29823002
EL2_REG(ACTLR_EL2, access_rw, reset_val, 0),
29833003
EL2_REG_VNCR(HCR_EL2, reset_hcr, 0),
2984-
EL2_REG(MDCR_EL2, access_rw, reset_val, 0),
3004+
EL2_REG(MDCR_EL2, access_mdcr, reset_val, 0),
29853005
EL2_REG(CPTR_EL2, access_rw, reset_val, CPTR_NVHE_EL2_RES1),
29863006
EL2_REG_VNCR(HSTR_EL2, reset_val, 0),
29873007
EL2_REG_VNCR(HFGRTR_EL2, reset_val, 0),

0 commit comments

Comments
 (0)