From: Eric Auger <eric.auger@redhat.com>
To: eric.auger.pro@gmail.com, eric.auger@redhat.com,
kvm@vger.kernel.org, kvmarm@lists.linux.dev,
andrew.jones@linux.dev, maz@kernel.org, will@kernel.org,
oliver.upton@linux.dev, ricarkol@google.com, reijiw@google.com,
alexandru.elisei@arm.com
Subject: [kvm-unit-tests PATCH 2/6] arm: pmu: pmu-chain-promotion: Introduce defines for count and margin values
Date: Wed, 15 Mar 2023 12:07:21 +0100 [thread overview]
Message-ID: <20230315110725.1215523-3-eric.auger@redhat.com> (raw)
In-Reply-To: <20230315110725.1215523-1-eric.auger@redhat.com>
The pmu-chain-promotion test is composed of separate subtests.
Some of them apply some settings on a first MEM_ACCESS loop
iterations, change the settings and run another MEM_ACCESS loop.
The PRE_OVERFLOW2 MEM_ACCESS counter init value is defined so that
the first loop does not overflow and the second loop overflows.
At the moment the MEM_ACCESS count number is hardcoded to 20 and
PRE_OVERFLOW2 is set to UINT32_MAX - 20 - 15 where 15 acts as a
margin.
Introduce defines for the count number and the margin so that it
becomes easier to change them.
Signed-off-by: Eric Auger <eric.auger@redhat.com>
---
arm/pmu.c | 35 +++++++++++++++++++++--------------
1 file changed, 21 insertions(+), 14 deletions(-)
diff --git a/arm/pmu.c b/arm/pmu.c
index dad7d4b4..b88366a8 100644
--- a/arm/pmu.c
+++ b/arm/pmu.c
@@ -55,11 +55,18 @@
#define EXT_COMMON_EVENTS_LOW 0x4000
#define EXT_COMMON_EVENTS_HIGH 0x403F
-#define ALL_SET_32 0x00000000FFFFFFFFULL
+#define ALL_SET_32 0x00000000FFFFFFFFULL
#define ALL_CLEAR 0x0000000000000000ULL
#define PRE_OVERFLOW_32 0x00000000FFFFFFF0ULL
-#define PRE_OVERFLOW2_32 0x00000000FFFFFFDCULL
#define PRE_OVERFLOW_64 0xFFFFFFFFFFFFFFF0ULL
+#define COUNT 20
+#define MARGIN 15
+/*
+ * PRE_OVERFLOW2 is set so that 1st COUNT iterations do not
+ * produce 32b overflow and 2d COUNT iterations do. To accommodate
+ * for some observed variability we take into account a given @MARGIN
+ */
+#define PRE_OVERFLOW2_32 (ALL_SET_32 - COUNT - MARGIN)
#define PRE_OVERFLOW(__overflow_at_64bits) \
(__overflow_at_64bits ? PRE_OVERFLOW_64 : PRE_OVERFLOW_32)
@@ -737,7 +744,7 @@ static void test_chain_promotion(bool unused)
write_sysreg_s(0x2, PMCNTENSET_EL0);
isb();
- mem_access_loop(addr, 20, pmu.pmcr_ro | PMU_PMCR_E);
+ mem_access_loop(addr, COUNT, pmu.pmcr_ro | PMU_PMCR_E);
PRINT_REGS("post");
report(!read_regn_el0(pmevcntr, 0),
"chain counter not counting if even counter is disabled");
@@ -750,13 +757,13 @@ static void test_chain_promotion(bool unused)
write_sysreg_s(0x1, PMCNTENSET_EL0);
isb();
- mem_access_loop(addr, 20, pmu.pmcr_ro | PMU_PMCR_E);
+ mem_access_loop(addr, COUNT, pmu.pmcr_ro | PMU_PMCR_E);
PRINT_REGS("post");
report(!read_regn_el0(pmevcntr, 1) && (read_sysreg(pmovsclr_el0) == 0x1),
"odd counter did not increment on overflow if disabled");
report_prefix_pop();
- /* start at 0xFFFFFFDC, +20 with CHAIN enabled, +20 with CHAIN disabled */
+ /* 1st COUNT with CHAIN enabled, next COUNT with CHAIN disabled */
report_prefix_push("subtest3");
pmu_reset();
write_sysreg_s(0x3, PMCNTENSET_EL0);
@@ -764,12 +771,12 @@ static void test_chain_promotion(bool unused)
isb();
PRINT_REGS("init");
- mem_access_loop(addr, 20, pmu.pmcr_ro | PMU_PMCR_E);
+ mem_access_loop(addr, COUNT, pmu.pmcr_ro | PMU_PMCR_E);
PRINT_REGS("After 1st loop");
/* disable the CHAIN event */
write_sysreg_s(0x2, PMCNTENCLR_EL0);
- mem_access_loop(addr, 20, pmu.pmcr_ro | PMU_PMCR_E);
+ mem_access_loop(addr, COUNT, pmu.pmcr_ro | PMU_PMCR_E);
PRINT_REGS("After 2d loop");
report(read_sysreg(pmovsclr_el0) == 0x1,
"should have triggered an overflow on #0");
@@ -777,7 +784,7 @@ static void test_chain_promotion(bool unused)
"CHAIN counter #1 shouldn't have incremented");
report_prefix_pop();
- /* start at 0xFFFFFFDC, +20 with CHAIN disabled, +20 with CHAIN enabled */
+ /* 1st COUNT with CHAIN disabled, next COUNT with CHAIN enabled */
report_prefix_push("subtest4");
pmu_reset();
@@ -786,13 +793,13 @@ static void test_chain_promotion(bool unused)
isb();
PRINT_REGS("init");
- mem_access_loop(addr, 20, pmu.pmcr_ro | PMU_PMCR_E);
+ mem_access_loop(addr, COUNT, pmu.pmcr_ro | PMU_PMCR_E);
PRINT_REGS("After 1st loop");
/* enable the CHAIN event */
write_sysreg_s(0x3, PMCNTENSET_EL0);
isb();
- mem_access_loop(addr, 20, pmu.pmcr_ro | PMU_PMCR_E);
+ mem_access_loop(addr, COUNT, pmu.pmcr_ro | PMU_PMCR_E);
PRINT_REGS("After 2d loop");
@@ -811,7 +818,7 @@ static void test_chain_promotion(bool unused)
isb();
PRINT_REGS("init");
- mem_access_loop(addr, 20, pmu.pmcr_ro | PMU_PMCR_E);
+ mem_access_loop(addr, COUNT, pmu.pmcr_ro | PMU_PMCR_E);
PRINT_REGS("After 1st loop");
/* 0 becomes CHAINED */
@@ -820,7 +827,7 @@ static void test_chain_promotion(bool unused)
write_sysreg_s(0x3, PMCNTENSET_EL0);
write_regn_el0(pmevcntr, 1, 0x0);
- mem_access_loop(addr, 20, pmu.pmcr_ro | PMU_PMCR_E);
+ mem_access_loop(addr, COUNT, pmu.pmcr_ro | PMU_PMCR_E);
PRINT_REGS("After 2d loop");
report((read_regn_el0(pmevcntr, 1) == 1) &&
@@ -837,14 +844,14 @@ static void test_chain_promotion(bool unused)
write_sysreg_s(0x3, PMCNTENSET_EL0);
PRINT_REGS("init");
- mem_access_loop(addr, 20, pmu.pmcr_ro | PMU_PMCR_E);
+ mem_access_loop(addr, COUNT, pmu.pmcr_ro | PMU_PMCR_E);
PRINT_REGS("After 1st loop");
write_sysreg_s(0x0, PMCNTENSET_EL0);
write_regn_el0(pmevtyper, 1, CPU_CYCLES | PMEVTYPER_EXCLUDE_EL0);
write_sysreg_s(0x3, PMCNTENSET_EL0);
- mem_access_loop(addr, 20, pmu.pmcr_ro | PMU_PMCR_E);
+ mem_access_loop(addr, COUNT, pmu.pmcr_ro | PMU_PMCR_E);
PRINT_REGS("After 2d loop");
report(read_sysreg(pmovsclr_el0) == 1,
"overflow is expected on counter 0");
--
2.38.1
next prev parent reply other threads:[~2023-03-15 11:07 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-15 11:07 [kvm-unit-tests PATCH 0/6] arm: pmu: Fix random failures of pmu-chain-promotion Eric Auger
2023-03-15 11:07 ` [kvm-unit-tests PATCH 1/6] arm: pmu: pmu-chain-promotion: Improve debug messages Eric Auger
2023-04-21 9:25 ` Alexandru Elisei
2023-04-24 20:09 ` Eric Auger
2023-03-15 11:07 ` Eric Auger [this message]
2023-04-21 9:55 ` [kvm-unit-tests PATCH 2/6] arm: pmu: pmu-chain-promotion: Introduce defines for count and margin values Alexandru Elisei
2023-04-24 20:09 ` Eric Auger
2023-03-15 11:07 ` [kvm-unit-tests PATCH 3/6] arm: pmu: Add extra DSB barriers in the mem_access loop Eric Auger
2023-04-21 10:25 ` Alexandru Elisei
2023-04-24 20:11 ` Eric Auger
2023-04-25 13:00 ` Alexandru Elisei
2023-05-31 20:14 ` Eric Auger
2023-03-15 11:07 ` [kvm-unit-tests PATCH 4/6] arm: pmu: Fix chain counter enable/disable sequences Eric Auger
2023-04-21 10:52 ` Alexandru Elisei
2023-04-21 11:24 ` Marc Zyngier
2023-05-31 20:15 ` Eric Auger
2023-03-15 11:07 ` [kvm-unit-tests PATCH 5/6] arm: pmu: Add pmu-memaccess-reliability test Eric Auger
2023-04-21 11:13 ` Alexandru Elisei
2023-05-31 20:15 ` Eric Auger
2023-03-15 11:07 ` [kvm-unit-tests PATCH 6/6] arm: pmu-chain-promotion: Increase the count and margin values Eric Auger
2023-04-04 6:23 ` [kvm-unit-tests PATCH 0/6] arm: pmu: Fix random failures of pmu-chain-promotion Eric Auger
2023-04-04 12:47 ` Andrew Jones
2023-04-12 7:34 ` Andrew Jones
2023-04-12 8:55 ` Alexandru Elisei
2023-04-12 8:47 ` Mark Rutland
2023-04-19 7:32 ` Eric Auger
2023-04-19 9:39 ` Alexandru Elisei
2023-04-21 8:11 ` Eric Auger
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=20230315110725.1215523-3-eric.auger@redhat.com \
--to=eric.auger@redhat.com \
--cc=alexandru.elisei@arm.com \
--cc=andrew.jones@linux.dev \
--cc=eric.auger.pro@gmail.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.linux.dev \
--cc=maz@kernel.org \
--cc=oliver.upton@linux.dev \
--cc=reijiw@google.com \
--cc=ricarkol@google.com \
--cc=will@kernel.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.