summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
380a81f)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
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 {
cmm_barrier();
} while (CMM_LOAD_SHARED(pc->lock) != seq);
cmm_barrier();
} while (CMM_LOAD_SHARED(pc->lock) != seq);