summaryrefslogtreecommitdiff
path: root/sys/dev/hwpmc
diff options
context:
space:
mode:
authorAdrian Chadd <adrian@FreeBSD.org>2008-03-18 08:39:11 +0000
committerAdrian Chadd <adrian@FreeBSD.org>2008-03-18 08:39:11 +0000
commit05e486c71e98f57f7e0afe9044eb947e7926997b (patch)
tree622c4f699cb3263ced49fbf0620fb29bdc394a0e /sys/dev/hwpmc
parent4dd3c84f5fce08990863ce94e194c7e88f310768 (diff)
Notes
Diffstat (limited to 'sys/dev/hwpmc')
-rw-r--r--sys/dev/hwpmc/hwpmc_amd.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/sys/dev/hwpmc/hwpmc_amd.c b/sys/dev/hwpmc/hwpmc_amd.c
index 26216beac25b..8f8641ecd1f8 100644
--- a/sys/dev/hwpmc/hwpmc_amd.c
+++ b/sys/dev/hwpmc/hwpmc_amd.c
@@ -302,12 +302,15 @@ amd_read_pmc(int cpu, int ri, pmc_value_t *v)
#endif
tmp = rdmsr(pd->pm_perfctr); /* RDMSR serializes */
- if (PMC_IS_SAMPLING_MODE(mode))
- *v = AMD_PERFCTR_VALUE_TO_RELOAD_COUNT(tmp);
- else
- *v = tmp;
+ PMCDBG(MDP,REA,2,"amd-read (pre-munge) id=%d -> %jd", ri, tmp);
+ if (PMC_IS_SAMPLING_MODE(mode)) {
+ /* Sign extend 48 bit value to 64 bits. */
+ tmp = (pmc_value_t) (((int64_t) tmp << 16) >> 16);
+ tmp = AMD_PERFCTR_VALUE_TO_RELOAD_COUNT(tmp);
+ }
+ *v = tmp;
- PMCDBG(MDP,REA,2,"amd-read id=%d -> %jd", ri, *v);
+ PMCDBG(MDP,REA,2,"amd-read (post-munge) id=%d -> %jd", ri, *v);
return 0;
}