Message ID | 20250203181026.159721-1-oliver.upton@linux.dev (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [kvm-unit-tests] arm: pmu: Actually use counter 0 in test_event_counter_config() | expand |
Hi Oliver, On 2/3/25 7:10 PM, Oliver Upton wrote: > test_event_counter_config() checks that there is at least one event > counter but mistakenly uses counter 1 for part of the test. > > Most implementations have more than a single event counter which is > probably why this went unnoticed. However, due to limitations of the > underlying hardware, KVM's PMUv3 emulation on Apple silicon can only > provide 1 event counter. > > Consistenly use counter 0 throughout the test, matching the precondition > and allowing the test to pass on Apple parts. > > Cc: Eric Auger <eric.auger@redhat.com> > Fixes: 4ce2a804 ("arm: pmu: Basic event counter Tests") > Signed-off-by: Oliver Upton <oliver.upton@linux.dev> > --- > arm/pmu.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/arm/pmu.c b/arm/pmu.c > index 9ff7a301..2dc0822b 100644 > --- a/arm/pmu.c > +++ b/arm/pmu.c > @@ -396,13 +396,13 @@ static void test_event_counter_config(void) > * Test setting through PMESELR/PMXEVTYPER and PMEVTYPERn read, > * select counter 0 > */ > - write_sysreg(1, PMSELR_EL0); > + write_sysreg(0, PMSELR_EL0); > /* program this counter to count unsupported event */ > write_sysreg(0xEA, PMXEVTYPER_EL0); > write_sysreg(0xdeadbeef, PMXEVCNTR_EL0); > - report((read_regn_el0(pmevtyper, 1) & 0xFFF) == 0xEA, > + report((read_regn_el0(pmevtyper, 0) & 0xFFF) == 0xEA, > "PMESELR/PMXEVTYPER/PMEVTYPERn"); > - report((read_regn_el0(pmevcntr, 1) == 0xdeadbeef), > + report((read_regn_el0(pmevcntr, 0) == 0xdeadbeef), > "PMESELR/PMXEVCNTR/PMEVCNTRn"); Reviewed-by: Eric Auger <eric.auger@redhat.com> Thank you for noticing and fixing that Eric > > /* try to configure an unsupported event within the range [0x0, 0x3F] */ > > base-commit: 1f08a91a41402b0e032ecce8ed1b5952cbfca0ea
On Mon, Feb 03, 2025 at 10:10:26AM -0800, Oliver Upton wrote: > test_event_counter_config() checks that there is at least one event > counter but mistakenly uses counter 1 for part of the test. > > Most implementations have more than a single event counter which is > probably why this went unnoticed. However, due to limitations of the > underlying hardware, KVM's PMUv3 emulation on Apple silicon can only > provide 1 event counter. > > Consistenly use counter 0 throughout the test, matching the precondition > and allowing the test to pass on Apple parts. > > Cc: Eric Auger <eric.auger@redhat.com> > Fixes: 4ce2a804 ("arm: pmu: Basic event counter Tests") > Signed-off-by: Oliver Upton <oliver.upton@linux.dev> > --- > arm/pmu.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/arm/pmu.c b/arm/pmu.c > index 9ff7a301..2dc0822b 100644 > --- a/arm/pmu.c > +++ b/arm/pmu.c > @@ -396,13 +396,13 @@ static void test_event_counter_config(void) > * Test setting through PMESELR/PMXEVTYPER and PMEVTYPERn read, > * select counter 0 > */ > - write_sysreg(1, PMSELR_EL0); > + write_sysreg(0, PMSELR_EL0); > /* program this counter to count unsupported event */ > write_sysreg(0xEA, PMXEVTYPER_EL0); > write_sysreg(0xdeadbeef, PMXEVCNTR_EL0); > - report((read_regn_el0(pmevtyper, 1) & 0xFFF) == 0xEA, > + report((read_regn_el0(pmevtyper, 0) & 0xFFF) == 0xEA, > "PMESELR/PMXEVTYPER/PMEVTYPERn"); > - report((read_regn_el0(pmevcntr, 1) == 0xdeadbeef), > + report((read_regn_el0(pmevcntr, 0) == 0xdeadbeef), > "PMESELR/PMXEVCNTR/PMEVCNTRn"); > > /* try to configure an unsupported event within the range [0x0, 0x3F] */ > > base-commit: 1f08a91a41402b0e032ecce8ed1b5952cbfca0ea > -- > 2.39.5 > Merged. Thanks, drew
diff --git a/arm/pmu.c b/arm/pmu.c index 9ff7a301..2dc0822b 100644 --- a/arm/pmu.c +++ b/arm/pmu.c @@ -396,13 +396,13 @@ static void test_event_counter_config(void) * Test setting through PMESELR/PMXEVTYPER and PMEVTYPERn read, * select counter 0 */ - write_sysreg(1, PMSELR_EL0); + write_sysreg(0, PMSELR_EL0); /* program this counter to count unsupported event */ write_sysreg(0xEA, PMXEVTYPER_EL0); write_sysreg(0xdeadbeef, PMXEVCNTR_EL0); - report((read_regn_el0(pmevtyper, 1) & 0xFFF) == 0xEA, + report((read_regn_el0(pmevtyper, 0) & 0xFFF) == 0xEA, "PMESELR/PMXEVTYPER/PMEVTYPERn"); - report((read_regn_el0(pmevcntr, 1) == 0xdeadbeef), + report((read_regn_el0(pmevcntr, 0) == 0xdeadbeef), "PMESELR/PMXEVCNTR/PMEVCNTRn"); /* try to configure an unsupported event within the range [0x0, 0x3F] */
test_event_counter_config() checks that there is at least one event counter but mistakenly uses counter 1 for part of the test. Most implementations have more than a single event counter which is probably why this went unnoticed. However, due to limitations of the underlying hardware, KVM's PMUv3 emulation on Apple silicon can only provide 1 event counter. Consistenly use counter 0 throughout the test, matching the precondition and allowing the test to pass on Apple parts. Cc: Eric Auger <eric.auger@redhat.com> Fixes: 4ce2a804 ("arm: pmu: Basic event counter Tests") Signed-off-by: Oliver Upton <oliver.upton@linux.dev> --- arm/pmu.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) base-commit: 1f08a91a41402b0e032ecce8ed1b5952cbfca0ea