* [PATCH v3 0/2] KVM: arm64: PMU event filtering fixes
@ 2023-10-19 18:56 Oliver Upton
2023-10-19 18:56 ` [PATCH v3 1/2] KVM: arm64: Make PMEVTYPER<n>_EL0.NSH RES0 if EL2 isn't advertised Oliver Upton
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Oliver Upton @ 2023-10-19 18:56 UTC (permalink / raw)
To: kvmarm
Cc: kvm, Marc Zyngier, James Morse, Suzuki K Poulose, Zenghui Yu,
Oliver Upton
PMU event exception level filtering fixes
Fixes to KVM's handling of the PMUv3 exception level filtering bits:
- NSH (count at EL2) and M (count at EL3) should be stateful when the
respective EL is advertised in the ID registers but have no effect on
event counting.
- NSU and NSK modify the event filtering of EL0 and EL1, respectively.
Though the kernel may not use these bits, other KVM guests might.
Implement these bits exactly as written in the pseudocode if EL3 is
advertised.
v2: https://lore.kernel.org/kvmarm/20231013052901.170138-1-oliver.upton@linux.dev/
v2 -> v3:
- Make the bits conditional on the ID register values
- Allow the guest to set the M and NSH bits without effect (Marc)
Oliver Upton (2):
KVM: arm64: Make PMEVTYPER<n>_EL0.NSH RES0 if EL2 isn't advertised
KVM: arm64: Add PMU event filter bits required if EL3 is implemented
arch/arm64/kvm/pmu-emul.c | 36 +++++++++++++++++++++++++---------
arch/arm64/kvm/sys_regs.c | 8 ++++++--
include/kvm/arm_pmu.h | 5 +++++
include/linux/perf/arm_pmuv3.h | 9 ++++++---
4 files changed, 44 insertions(+), 14 deletions(-)
base-commit: 6465e260f48790807eef06b583b38ca9789b6072
--
2.42.0.655.g421f12c284-goog
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH v3 1/2] KVM: arm64: Make PMEVTYPER<n>_EL0.NSH RES0 if EL2 isn't advertised 2023-10-19 18:56 [PATCH v3 0/2] KVM: arm64: PMU event filtering fixes Oliver Upton @ 2023-10-19 18:56 ` Oliver Upton 2023-10-24 2:47 ` kernel test robot 2023-10-19 18:56 ` [PATCH v3 2/2] KVM: arm64: Add PMU event filter bits required if EL3 is implemented Oliver Upton 2023-10-24 19:33 ` [PATCH v3 0/2] KVM: arm64: PMU event filtering fixes Oliver Upton 2 siblings, 1 reply; 6+ messages in thread From: Oliver Upton @ 2023-10-19 18:56 UTC (permalink / raw) To: kvmarm Cc: kvm, Marc Zyngier, James Morse, Suzuki K Poulose, Zenghui Yu, Oliver Upton The NSH bit, which filters event counting at EL2, is required by the architecture if an implementation has EL2. Even though KVM doesn't support nested virt yet, it makes no effort to hide the existence of EL2 from the ID registers. Userspace can, however, change the value of PFR0 to hide EL2. Align KVM's sysreg emulation with the architecture and make NSH RES0 if EL2 isn't advertised. Keep in mind the bit is ignored when constructing the backing perf event. While at it, build the event type mask using explicit field definitions instead of relying on ARMV8_PMU_EVTYPE_MASK. KVM probably should've been doing this in the first place, as it avoids changes to the aforementioned mask affecting sysreg emulation. Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com> Signed-off-by: Oliver Upton <oliver.upton@linux.dev> --- arch/arm64/kvm/pmu-emul.c | 21 ++++++++++++++------- arch/arm64/kvm/sys_regs.c | 8 ++++++-- include/kvm/arm_pmu.h | 5 +++++ 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/arch/arm64/kvm/pmu-emul.c b/arch/arm64/kvm/pmu-emul.c index 6b066e04dc5d..32d83db9674e 100644 --- a/arch/arm64/kvm/pmu-emul.c +++ b/arch/arm64/kvm/pmu-emul.c @@ -60,6 +60,18 @@ static u32 kvm_pmu_event_mask(struct kvm *kvm) return __kvm_pmu_event_mask(pmuver); } +u64 kvm_pmu_evtyper_mask(struct kvm *kvm) +{ + u64 mask = ARMV8_PMU_EXCLUDE_EL1 | ARMV8_PMU_EXCLUDE_EL0 | + kvm_pmu_event_mask(kvm); + u64 pfr0 = IDREG(kvm, SYS_ID_AA64PFR0_EL1); + + if (SYS_FIELD_GET(ID_AA64PFR0_EL1, EL2, pfr0)) + mask |= ARMV8_PMU_INCLUDE_EL2; + + return mask; +} + /** * kvm_pmc_is_64bit - determine if counter is 64bit * @pmc: counter context @@ -657,18 +669,13 @@ void kvm_pmu_set_counter_event_type(struct kvm_vcpu *vcpu, u64 data, u64 select_idx) { struct kvm_pmc *pmc = kvm_vcpu_idx_to_pmc(vcpu, select_idx); - u64 reg, mask; + u64 reg; if (!kvm_vcpu_has_pmu(vcpu)) return; - mask = ARMV8_PMU_EVTYPE_MASK; - mask &= ~ARMV8_PMU_EVTYPE_EVENT; - mask |= kvm_pmu_event_mask(vcpu->kvm); - reg = counter_index_to_evtreg(pmc->idx); - - __vcpu_sys_reg(vcpu, reg) = data & mask; + __vcpu_sys_reg(vcpu, reg) = data & kvm_pmu_evtyper_mask(vcpu->kvm); kvm_pmu_create_perf_event(pmc); } diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index e92ec810d449..78720c373904 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -746,8 +746,12 @@ static u64 reset_pmevcntr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r) static u64 reset_pmevtyper(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r) { + /* This thing will UNDEF, who cares about the reset value? */ + if (!kvm_vcpu_has_pmu(vcpu)) + return 0; + reset_unknown(vcpu, r); - __vcpu_sys_reg(vcpu, r->reg) &= ARMV8_PMU_EVTYPE_MASK; + __vcpu_sys_reg(vcpu, r->reg) &= kvm_pmu_evtyper_mask(vcpu->kvm); return __vcpu_sys_reg(vcpu, r->reg); } @@ -988,7 +992,7 @@ static bool access_pmu_evtyper(struct kvm_vcpu *vcpu, struct sys_reg_params *p, kvm_pmu_set_counter_event_type(vcpu, p->regval, idx); kvm_vcpu_pmu_restore_guest(vcpu); } else { - p->regval = __vcpu_sys_reg(vcpu, reg) & ARMV8_PMU_EVTYPE_MASK; + p->regval = __vcpu_sys_reg(vcpu, reg); } return true; diff --git a/include/kvm/arm_pmu.h b/include/kvm/arm_pmu.h index 31029f4f7be8..e0bcf447a2ab 100644 --- a/include/kvm/arm_pmu.h +++ b/include/kvm/arm_pmu.h @@ -101,6 +101,7 @@ void kvm_vcpu_pmu_resync_el0(void); }) u8 kvm_arm_pmu_get_pmuver_limit(void); +u64 kvm_pmu_evtyper_mask(struct kvm *kvm); #else struct kvm_pmu { @@ -172,6 +173,10 @@ static inline u8 kvm_arm_pmu_get_pmuver_limit(void) { return 0; } +static inline u64 kvm_pmu_evtyper_mask(void) +{ + return 0; +} static inline void kvm_vcpu_pmu_resync_el0(void) {} #endif -- 2.42.0.655.g421f12c284-goog ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v3 1/2] KVM: arm64: Make PMEVTYPER<n>_EL0.NSH RES0 if EL2 isn't advertised 2023-10-19 18:56 ` [PATCH v3 1/2] KVM: arm64: Make PMEVTYPER<n>_EL0.NSH RES0 if EL2 isn't advertised Oliver Upton @ 2023-10-24 2:47 ` kernel test robot 2023-10-24 18:58 ` Oliver Upton 0 siblings, 1 reply; 6+ messages in thread From: kernel test robot @ 2023-10-24 2:47 UTC (permalink / raw) To: Oliver Upton, kvmarm Cc: oe-kbuild-all, kvm, Marc Zyngier, James Morse, Suzuki K Poulose, Zenghui Yu, Oliver Upton Hi Oliver, kernel test robot noticed the following build errors: [auto build test ERROR on 6465e260f48790807eef06b583b38ca9789b6072] url: https://github.com/intel-lab-lkp/linux/commits/Oliver-Upton/KVM-arm64-Make-PMEVTYPER-n-_EL0-NSH-RES0-if-EL2-isn-t-advertised/20231020-025836 base: 6465e260f48790807eef06b583b38ca9789b6072 patch link: https://lore.kernel.org/r/20231019185618.3442949-2-oliver.upton%40linux.dev patch subject: [PATCH v3 1/2] KVM: arm64: Make PMEVTYPER<n>_EL0.NSH RES0 if EL2 isn't advertised config: arm64-randconfig-004-20231023 (https://download.01.org/0day-ci/archive/20231024/202310241025.FmLnpSTG-lkp@intel.com/config) compiler: aarch64-linux-gcc (GCC) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231024/202310241025.FmLnpSTG-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202310241025.FmLnpSTG-lkp@intel.com/ All errors (new ones prefixed by >>): arch/arm64/kvm/sys_regs.c: In function 'reset_pmevtyper': >> arch/arm64/kvm/sys_regs.c:754:41: error: too many arguments to function 'kvm_pmu_evtyper_mask' 754 | __vcpu_sys_reg(vcpu, r->reg) &= kvm_pmu_evtyper_mask(vcpu->kvm); | ^~~~~~~~~~~~~~~~~~~~ In file included from arch/arm64/include/asm/kvm_host.h:37, from include/linux/kvm_host.h:45, from arch/arm64/kvm/sys_regs.c:15: include/kvm/arm_pmu.h:176:19: note: declared here 176 | static inline u64 kvm_pmu_evtyper_mask(void) | ^~~~~~~~~~~~~~~~~~~~ arch/arm64/kvm/sys_regs.c: At top level: arch/arm64/kvm/sys_regs.c:2174:20: warning: initialized field overwritten [-Woverride-init] 2174 | .reset = reset_pmcr, .reg = PMCR_EL0 }, | ^~~~~~~~~~ arch/arm64/kvm/sys_regs.c:2174:20: note: (near initialization for 'sys_reg_descs[233].reset') In file included from include/uapi/linux/posix_types.h:5, from include/uapi/linux/types.h:14, from include/linux/types.h:6, from include/linux/kasan-checks.h:5, from include/asm-generic/rwonce.h:26, from arch/arm64/include/asm/rwonce.h:71, from include/linux/compiler.h:246, from include/linux/build_bug.h:5, from include/linux/bitfield.h:10, from arch/arm64/kvm/sys_regs.c:12: include/linux/stddef.h:8:14: warning: initialized field overwritten [-Woverride-init] 8 | #define NULL ((void *)0) | ^ arch/arm64/kvm/sys_regs.c:2187:46: note: in expansion of macro 'NULL' 2187 | .access = access_pmswinc, .reset = NULL }, | ^~~~ include/linux/stddef.h:8:14: note: (near initialization for 'sys_reg_descs[237].reset') 8 | #define NULL ((void *)0) | ^ arch/arm64/kvm/sys_regs.c:2187:46: note: in expansion of macro 'NULL' 2187 | .access = access_pmswinc, .reset = NULL }, | ^~~~ arch/arm64/kvm/sys_regs.c:2189:45: warning: initialized field overwritten [-Woverride-init] 2189 | .access = access_pmselr, .reset = reset_pmselr, .reg = PMSELR_EL0 }, | ^~~~~~~~~~~~ arch/arm64/kvm/sys_regs.c:2189:45: note: (near initialization for 'sys_reg_descs[238].reset') include/linux/stddef.h:8:14: warning: initialized field overwritten [-Woverride-init] 8 | #define NULL ((void *)0) | ^ arch/arm64/kvm/sys_regs.c:2191:45: note: in expansion of macro 'NULL' 2191 | .access = access_pmceid, .reset = NULL }, | ^~~~ include/linux/stddef.h:8:14: note: (near initialization for 'sys_reg_descs[239].reset') 8 | #define NULL ((void *)0) | ^ arch/arm64/kvm/sys_regs.c:2191:45: note: in expansion of macro 'NULL' 2191 | .access = access_pmceid, .reset = NULL }, | ^~~~ include/linux/stddef.h:8:14: warning: initialized field overwritten [-Woverride-init] 8 | #define NULL ((void *)0) | ^ arch/arm64/kvm/sys_regs.c:2193:45: note: in expansion of macro 'NULL' 2193 | .access = access_pmceid, .reset = NULL }, | ^~~~ include/linux/stddef.h:8:14: note: (near initialization for 'sys_reg_descs[240].reset') 8 | #define NULL ((void *)0) | ^ arch/arm64/kvm/sys_regs.c:2193:45: note: in expansion of macro 'NULL' 2193 | .access = access_pmceid, .reset = NULL }, | ^~~~ arch/arm64/kvm/sys_regs.c:2195:49: warning: initialized field overwritten [-Woverride-init] 2195 | .access = access_pmu_evcntr, .reset = reset_unknown, | ^~~~~~~~~~~~~ arch/arm64/kvm/sys_regs.c:2195:49: note: (near initialization for 'sys_reg_descs[241].reset') include/linux/stddef.h:8:14: warning: initialized field overwritten [-Woverride-init] 8 | #define NULL ((void *)0) | ^ arch/arm64/kvm/sys_regs.c:2198:50: note: in expansion of macro 'NULL' 2198 | .access = access_pmu_evtyper, .reset = NULL }, | ^~~~ include/linux/stddef.h:8:14: note: (near initialization for 'sys_reg_descs[242].reset') 8 | #define NULL ((void *)0) | ^ arch/arm64/kvm/sys_regs.c:2198:50: note: in expansion of macro 'NULL' 2198 | .access = access_pmu_evtyper, .reset = NULL }, | ^~~~ include/linux/stddef.h:8:14: warning: initialized field overwritten [-Woverride-init] 8 | #define NULL ((void *)0) | ^ arch/arm64/kvm/sys_regs.c:2200:49: note: in expansion of macro 'NULL' 2200 | .access = access_pmu_evcntr, .reset = NULL }, | ^~~~ include/linux/stddef.h:8:14: note: (near initialization for 'sys_reg_descs[243].reset') 8 | #define NULL ((void *)0) | ^ arch/arm64/kvm/sys_regs.c:2200:49: note: in expansion of macro 'NULL' 2200 | .access = access_pmu_evcntr, .reset = NULL }, | ^~~~ arch/arm64/kvm/sys_regs.c:2206:20: warning: initialized field overwritten [-Woverride-init] 2206 | .reset = reset_val, .reg = PMUSERENR_EL0, .val = 0 }, | ^~~~~~~~~ arch/arm64/kvm/sys_regs.c:2206:20: note: (near initialization for 'sys_reg_descs[244].reset') arch/arm64/kvm/sys_regs.c:1128:20: warning: initialized field overwritten [-Woverride-init] 1128 | .reset = reset_pmevcntr, .get_user = get_pmu_evcntr, \ | ^~~~~~~~~~~~~~ arch/arm64/kvm/sys_regs.c:2296:9: note: in expansion of macro 'PMU_PMEVCNTR_EL0' 2296 | PMU_PMEVCNTR_EL0(0), vim +/kvm_pmu_evtyper_mask +754 arch/arm64/kvm/sys_regs.c 746 747 static u64 reset_pmevtyper(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r) 748 { 749 /* This thing will UNDEF, who cares about the reset value? */ 750 if (!kvm_vcpu_has_pmu(vcpu)) 751 return 0; 752 753 reset_unknown(vcpu, r); > 754 __vcpu_sys_reg(vcpu, r->reg) &= kvm_pmu_evtyper_mask(vcpu->kvm); 755 756 return __vcpu_sys_reg(vcpu, r->reg); 757 } 758 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3 1/2] KVM: arm64: Make PMEVTYPER<n>_EL0.NSH RES0 if EL2 isn't advertised 2023-10-24 2:47 ` kernel test robot @ 2023-10-24 18:58 ` Oliver Upton 0 siblings, 0 replies; 6+ messages in thread From: Oliver Upton @ 2023-10-24 18:58 UTC (permalink / raw) To: kernel test robot Cc: kvmarm, oe-kbuild-all, kvm, Marc Zyngier, James Morse, Suzuki K Poulose, Zenghui Yu On Tue, Oct 24, 2023 at 10:47:58AM +0800, kernel test robot wrote: > Hi Oliver, > > kernel test robot noticed the following build errors: > > [auto build test ERROR on 6465e260f48790807eef06b583b38ca9789b6072] > > url: https://github.com/intel-lab-lkp/linux/commits/Oliver-Upton/KVM-arm64-Make-PMEVTYPER-n-_EL0-NSH-RES0-if-EL2-isn-t-advertised/20231020-025836 > base: 6465e260f48790807eef06b583b38ca9789b6072 > patch link: https://lore.kernel.org/r/20231019185618.3442949-2-oliver.upton%40linux.dev > patch subject: [PATCH v3 1/2] KVM: arm64: Make PMEVTYPER<n>_EL0.NSH RES0 if EL2 isn't advertised > config: arm64-randconfig-004-20231023 (https://download.01.org/0day-ci/archive/20231024/202310241025.FmLnpSTG-lkp@intel.com/config) > compiler: aarch64-linux-gcc (GCC) 13.2.0 > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231024/202310241025.FmLnpSTG-lkp@intel.com/reproduce) > > If you fix the issue in a separate patch/commit (i.e. not just a new version of > the same patch/commit), kindly add following tags > | Reported-by: kernel test robot <lkp@intel.com> > | Closes: https://lore.kernel.org/oe-kbuild-all/202310241025.FmLnpSTG-lkp@intel.com/ > > All errors (new ones prefixed by >>): > > arch/arm64/kvm/sys_regs.c: In function 'reset_pmevtyper': > >> arch/arm64/kvm/sys_regs.c:754:41: error: too many arguments to function 'kvm_pmu_evtyper_mask' Ah, the prototype for !CONFIG_HW_PERF_EVENTS is wrong. I'll squash this in: diff --git a/include/kvm/arm_pmu.h b/include/kvm/arm_pmu.h index e0bcf447a2ab..fd0aa8105a5b 100644 --- a/include/kvm/arm_pmu.h +++ b/include/kvm/arm_pmu.h @@ -173,7 +173,7 @@ static inline u8 kvm_arm_pmu_get_pmuver_limit(void) { return 0; } -static inline u64 kvm_pmu_evtyper_mask(void) +static inline u64 kvm_pmu_evtyper_mask(struct kvm *kvm) { return 0; } -- Thanks, Oliver ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v3 2/2] KVM: arm64: Add PMU event filter bits required if EL3 is implemented 2023-10-19 18:56 [PATCH v3 0/2] KVM: arm64: PMU event filtering fixes Oliver Upton 2023-10-19 18:56 ` [PATCH v3 1/2] KVM: arm64: Make PMEVTYPER<n>_EL0.NSH RES0 if EL2 isn't advertised Oliver Upton @ 2023-10-19 18:56 ` Oliver Upton 2023-10-24 19:33 ` [PATCH v3 0/2] KVM: arm64: PMU event filtering fixes Oliver Upton 2 siblings, 0 replies; 6+ messages in thread From: Oliver Upton @ 2023-10-19 18:56 UTC (permalink / raw) To: kvmarm Cc: kvm, Marc Zyngier, James Morse, Suzuki K Poulose, Zenghui Yu, Oliver Upton Suzuki noticed that KVM's PMU emulation is oblivious to the NSU and NSK event filter bits. On systems that have EL3 these bits modify the filter behavior in non-secure EL0 and EL1, respectively. Even though the kernel doesn't use these bits, it is entirely possible some other guest OS does. Additionally, it would appear that these and the M bit are required by the architecture if EL3 is implemented. Allow the EL3 event filter bits to be set if EL3 is advertised in the guest's ID register. Implement the behavior of NSU and NSK according to the pseudocode, and entirely ignore the M bit for perf event creation. Reported-by: Suzuki K Poulose <suzuki.poulose@arm.com> Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com> Signed-off-by: Oliver Upton <oliver.upton@linux.dev> --- arch/arm64/kvm/pmu-emul.c | 15 +++++++++++++-- include/linux/perf/arm_pmuv3.h | 9 ++++++--- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/arch/arm64/kvm/pmu-emul.c b/arch/arm64/kvm/pmu-emul.c index 32d83db9674e..e6be14e38cee 100644 --- a/arch/arm64/kvm/pmu-emul.c +++ b/arch/arm64/kvm/pmu-emul.c @@ -69,6 +69,11 @@ u64 kvm_pmu_evtyper_mask(struct kvm *kvm) if (SYS_FIELD_GET(ID_AA64PFR0_EL1, EL2, pfr0)) mask |= ARMV8_PMU_INCLUDE_EL2; + if (SYS_FIELD_GET(ID_AA64PFR0_EL1, EL3, pfr0)) + mask |= ARMV8_PMU_EXCLUDE_NS_EL0 | + ARMV8_PMU_EXCLUDE_NS_EL1 | + ARMV8_PMU_EXCLUDE_EL3; + return mask; } @@ -596,6 +601,7 @@ static void kvm_pmu_create_perf_event(struct kvm_pmc *pmc) struct perf_event *event; struct perf_event_attr attr; u64 eventsel, reg, data; + bool p, u, nsk, nsu; reg = counter_index_to_evtreg(pmc->idx); data = __vcpu_sys_reg(vcpu, reg); @@ -622,13 +628,18 @@ static void kvm_pmu_create_perf_event(struct kvm_pmc *pmc) !test_bit(eventsel, vcpu->kvm->arch.pmu_filter)) return; + p = data & ARMV8_PMU_EXCLUDE_EL1; + u = data & ARMV8_PMU_EXCLUDE_EL0; + nsk = data & ARMV8_PMU_EXCLUDE_NS_EL1; + nsu = data & ARMV8_PMU_EXCLUDE_NS_EL0; + memset(&attr, 0, sizeof(struct perf_event_attr)); attr.type = arm_pmu->pmu.type; attr.size = sizeof(attr); attr.pinned = 1; attr.disabled = !kvm_pmu_counter_is_enabled(pmc); - attr.exclude_user = data & ARMV8_PMU_EXCLUDE_EL0 ? 1 : 0; - attr.exclude_kernel = data & ARMV8_PMU_EXCLUDE_EL1 ? 1 : 0; + attr.exclude_user = (u != nsu); + attr.exclude_kernel = (p != nsk); attr.exclude_hv = 1; /* Don't count EL2 events */ attr.exclude_host = 1; /* Don't count host events */ attr.config = eventsel; diff --git a/include/linux/perf/arm_pmuv3.h b/include/linux/perf/arm_pmuv3.h index e3899bd77f5c..9c226adf938a 100644 --- a/include/linux/perf/arm_pmuv3.h +++ b/include/linux/perf/arm_pmuv3.h @@ -234,9 +234,12 @@ /* * Event filters for PMUv3 */ -#define ARMV8_PMU_EXCLUDE_EL1 (1U << 31) -#define ARMV8_PMU_EXCLUDE_EL0 (1U << 30) -#define ARMV8_PMU_INCLUDE_EL2 (1U << 27) +#define ARMV8_PMU_EXCLUDE_EL1 (1U << 31) +#define ARMV8_PMU_EXCLUDE_EL0 (1U << 30) +#define ARMV8_PMU_EXCLUDE_NS_EL1 (1U << 29) +#define ARMV8_PMU_EXCLUDE_NS_EL0 (1U << 28) +#define ARMV8_PMU_INCLUDE_EL2 (1U << 27) +#define ARMV8_PMU_EXCLUDE_EL3 (1U << 26) /* * PMUSERENR: user enable reg -- 2.42.0.655.g421f12c284-goog ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v3 0/2] KVM: arm64: PMU event filtering fixes 2023-10-19 18:56 [PATCH v3 0/2] KVM: arm64: PMU event filtering fixes Oliver Upton 2023-10-19 18:56 ` [PATCH v3 1/2] KVM: arm64: Make PMEVTYPER<n>_EL0.NSH RES0 if EL2 isn't advertised Oliver Upton 2023-10-19 18:56 ` [PATCH v3 2/2] KVM: arm64: Add PMU event filter bits required if EL3 is implemented Oliver Upton @ 2023-10-24 19:33 ` Oliver Upton 2 siblings, 0 replies; 6+ messages in thread From: Oliver Upton @ 2023-10-24 19:33 UTC (permalink / raw) To: Oliver Upton, kvmarm Cc: Suzuki K Poulose, Marc Zyngier, kvm, James Morse, Zenghui Yu On Thu, 19 Oct 2023 18:56:16 +0000, Oliver Upton wrote: > PMU event exception level filtering fixes > > Fixes to KVM's handling of the PMUv3 exception level filtering bits: > > - NSH (count at EL2) and M (count at EL3) should be stateful when the > respective EL is advertised in the ID registers but have no effect on > event counting. > > [...] Applied to kvmarm/next, thanks! [1/2] KVM: arm64: Make PMEVTYPER<n>_EL0.NSH RES0 if EL2 isn't advertised https://git.kernel.org/kvmarm/kvmarm/c/bc512d6a9b92 [2/2] KVM: arm64: Add PMU event filter bits required if EL3 is implemented https://git.kernel.org/kvmarm/kvmarm/c/ae8d3522e5b7 -- Best, Oliver ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-10-24 19:34 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-10-19 18:56 [PATCH v3 0/2] KVM: arm64: PMU event filtering fixes Oliver Upton 2023-10-19 18:56 ` [PATCH v3 1/2] KVM: arm64: Make PMEVTYPER<n>_EL0.NSH RES0 if EL2 isn't advertised Oliver Upton 2023-10-24 2:47 ` kernel test robot 2023-10-24 18:58 ` Oliver Upton 2023-10-19 18:56 ` [PATCH v3 2/2] KVM: arm64: Add PMU event filter bits required if EL3 is implemented Oliver Upton 2023-10-24 19:33 ` [PATCH v3 0/2] KVM: arm64: PMU event filtering fixes Oliver Upton
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox