diff options
author | Andrew Turner <andrew@FreeBSD.org> | 2021-01-04 13:25:45 +0000 |
---|---|---|
committer | Andrew Turner <andrew@FreeBSD.org> | 2021-01-08 14:24:43 +0000 |
commit | 6815909abdaace1f8f70678873c763deec36223a (patch) | |
tree | f3001f36a76b28ccd8bbf4a35bed075067ba7cb9 /sys/dev/hwpmc/hwpmc_arm64.c | |
parent | 90a6e9ef6320d6e48922b32bbefcb07dbb5e1ba7 (diff) | |
download | src-6815909abdaace1f8f70678873c763deec36223a.tar.gz src-6815909abdaace1f8f70678873c763deec36223a.zip |
Move the PMC overflow count to make it per-CPU
Virtual PMCs could be running on multiple CPUs so this needs to be
a per-CPU value.
Submitted by: rwatson (earlier version)
Reviewed by: gnn
Sponsored by: Innovate UK
Differential Revision: https://reviews.freebsd.org/D27973
Diffstat (limited to 'sys/dev/hwpmc/hwpmc_arm64.c')
-rw-r--r-- | sys/dev/hwpmc/hwpmc_arm64.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/dev/hwpmc/hwpmc_arm64.c b/sys/dev/hwpmc/hwpmc_arm64.c index 15ea4f892ed0..49375219a485 100644 --- a/sys/dev/hwpmc/hwpmc_arm64.c +++ b/sys/dev/hwpmc/hwpmc_arm64.c @@ -215,12 +215,12 @@ arm64_read_pmc(int cpu, int ri, pmc_value_t *v) /* Clear Overflow Flag */ WRITE_SPECIALREG(pmovsclr_el0, reg); if (!PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm))) - pm->pm_overflowcnt++; + pm->pm_pcpu_state[cpu].pps_overflowcnt++; /* Reread counter in case we raced. */ tmp = arm64_pmcn_read(ri); } - tmp += 0x100000000llu * pm->pm_overflowcnt; + tmp += 0x100000000llu * pm->pm_pcpu_state[cpu].pps_overflowcnt; intr_restore(s); PMCDBG2(MDP, REA, 2, "arm64-read id=%d -> %jd", ri, tmp); @@ -249,7 +249,7 @@ arm64_write_pmc(int cpu, int ri, pmc_value_t v) PMCDBG3(MDP, WRI, 1, "arm64-write cpu=%d ri=%d v=%jx", cpu, ri, v); - pm->pm_overflowcnt = v >> 32; + pm->pm_pcpu_state[cpu].pps_overflowcnt = v >> 32; arm64_pmcn_write(ri, v); return 0; @@ -373,7 +373,7 @@ arm64_intr(struct trapframe *tf) retval = 1; /* Found an interrupting PMC. */ if (!PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm))) { - pm->pm_overflowcnt += 1; + pm->pm_pcpu_state[cpu].pps_overflowcnt += 1; continue; } |