projects
/
lttng-ust.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: perf counters: sign-extend pmc register
[lttng-ust.git]
/
liblttng-ust
/
lttng-context-perf-counters.c
diff --git
a/liblttng-ust/lttng-context-perf-counters.c
b/liblttng-ust/lttng-context-perf-counters.c
index 83b371c5ba91431f47f44ce6880a4087d2e0244c..61149d061310af0ec8f8f15902b36bff72bb2c15 100644
(file)
--- a/
liblttng-ust/lttng-context-perf-counters.c
+++ b/
liblttng-ust/lttng-context-perf-counters.c
@@
-110,11
+110,17
@@
uint64_t read_perf_counter(struct perf_event_mmap_page *pc)
cmm_barrier();
idx = pc->index;
cmm_barrier();
idx = pc->index;
- if (idx)
- count = pc->offset + rdpmc(idx - 1);
- else
+ if (idx) {
+ int64_t pmcval;
+
+ pmcval = rdpmc(idx - 1);
+ /* Sign-extend the pmc register result. */
+ pmcval <<= 64 - pc->pmc_width;
+ pmcval >>= 64 - pc->pmc_width;
+ count = pc->offset + pmcval;
+ } else {
count = 0;
count = 0;
-
+ }
cmm_barrier();
} while (CMM_LOAD_SHARED(pc->lock) != seq);
cmm_barrier();
} while (CMM_LOAD_SHARED(pc->lock) != seq);
This page took
0.024561 seconds
and
4
git commands to generate.