summaryrefslogtreecommitdiffstats
path: root/kmod/cachepc.h
diff options
context:
space:
mode:
Diffstat (limited to 'kmod/cachepc.h')
-rwxr-xr-xkmod/cachepc.h19
1 files changed, 6 insertions, 13 deletions
diff --git a/kmod/cachepc.h b/kmod/cachepc.h
index 0e02678..13d38ca 100755
--- a/kmod/cachepc.h
+++ b/kmod/cachepc.h
@@ -49,21 +49,21 @@ extern cacheline *cachepc_ds;
cacheline *
cachepc_prime(cacheline *head)
{
- cacheline *curr_cl;
+ cacheline *curr_cl, *prev_cl;
cachepc_mfence();
cachepc_cpuid();
curr_cl = head;
do {
+ prev_cl = curr_cl;
curr_cl = curr_cl->next;
} while (curr_cl != head);
- curr_cl = curr_cl->prev;
cachepc_mfence();
cachepc_cpuid();
- return curr_cl;
+ return prev_cl;
}
/*
@@ -114,9 +114,6 @@ cachepc_probe(cacheline *start_cl)
do {
pre = cachepc_read_pmc(0);
- cachepc_mfence();
- //cachepc_cpuid();
-
asm volatile(
"mov 8(%[curr_cl]), %%rax \n\t" // +8
"mov 8(%%rax), %%rcx \n\t" // +16
@@ -132,24 +129,20 @@ cachepc_probe(cacheline *start_cl)
: "rax", "rcx"
);
- cachepc_mfence();
- //cachepc_cpuid();
-
post = cachepc_read_pmc(0);
- cachepc_mfence();
- //cachepc_cpuid();
-
/* works across size boundary */
curr_cl->count = post - pre;
curr_cl = next_cl;
} while (__builtin_expect(curr_cl != start_cl, 1));
+ next_cl = curr_cl->next;
+
cachepc_mfence();
cachepc_cpuid();
- return curr_cl->next;
+ return next_cl;
}
void