diff options
| author | Adrian Chadd <adrian@FreeBSD.org> | 2008-03-18 08:39:11 +0000 |
|---|---|---|
| committer | Adrian Chadd <adrian@FreeBSD.org> | 2008-03-18 08:39:11 +0000 |
| commit | 05e486c71e98f57f7e0afe9044eb947e7926997b (patch) | |
| tree | 622c4f699cb3263ced49fbf0620fb29bdc394a0e /sys/dev/hwpmc | |
| parent | 4dd3c84f5fce08990863ce94e194c7e88f310768 (diff) | |
Notes
Diffstat (limited to 'sys/dev/hwpmc')
| -rw-r--r-- | sys/dev/hwpmc/hwpmc_amd.c | 13 |
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; } |
