summaryrefslogtreecommitdiffstats
path: root/kmod/cachepc.h
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2022-08-15 16:20:27 +0200
committerLouis Burda <quent.burda@gmail.com>2022-08-15 16:20:27 +0200
commitfef45f5207c99b00676c014bc02141e284c331ce (patch)
tree136766ab312e5bd56582fb54dbd2932005c18ad7 /kmod/cachepc.h
parent2ee8bd2f14f1fe909108e89a24ec9f6de814f438 (diff)
downloadcachepc-fef45f5207c99b00676c014bc02141e284c331ce.tar.gz
cachepc-fef45f5207c99b00676c014bc02141e284c331ce.zip
Stash version with no consistent noise in eviction test
Diffstat (limited to 'kmod/cachepc.h')
-rwxr-xr-xkmod/cachepc.h63
1 files changed, 45 insertions, 18 deletions
diff --git a/kmod/cachepc.h b/kmod/cachepc.h
index 97746ec..0e02678 100755
--- a/kmod/cachepc.h
+++ b/kmod/cachepc.h
@@ -49,16 +49,21 @@ extern cacheline *cachepc_ds;
cacheline *
cachepc_prime(cacheline *head)
{
- cacheline *curr_cl;
+ cacheline *curr_cl;
- //cachepc_cpuid();
- curr_cl = head;
- do {
- curr_cl = curr_cl->next;
- } while(curr_cl != head);
- //cachepc_cpuid();
+ cachepc_mfence();
+ cachepc_cpuid();
+
+ curr_cl = head;
+ do {
+ curr_cl = curr_cl->next;
+ } while (curr_cl != head);
+ curr_cl = curr_cl->prev;
- return curr_cl->prev;
+ cachepc_mfence();
+ cachepc_cpuid();
+
+ return curr_cl;
}
/*
@@ -78,16 +83,20 @@ cachepc_prime(cacheline *head)
cacheline *
cachepc_prime_rev(cacheline *head)
{
- cacheline *curr_cl;
+ cacheline *curr_cl;
- //cachepc_cpuid();
- curr_cl = head;
- do {
- curr_cl = curr_cl->prev;
- } while(curr_cl != head);
- //cachepc_cpuid();
+ cachepc_mfence();
+ cachepc_cpuid();
+
+ curr_cl = head;
+ do {
+ curr_cl = curr_cl->prev;
+ } while(curr_cl != head);
+
+ cachepc_mfence();
+ cachepc_cpuid();
- return curr_cl->prev;
+ return curr_cl->prev;
}
cacheline *
@@ -97,6 +106,9 @@ cachepc_probe(cacheline *start_cl)
cacheline *next_cl;
cacheline *curr_cl;
+ cachepc_mfence();
+ cachepc_cpuid();
+
curr_cl = start_cl;
do {
@@ -134,21 +146,32 @@ cachepc_probe(cacheline *start_cl)
curr_cl = next_cl;
} while (__builtin_expect(curr_cl != start_cl, 1));
+ cachepc_mfence();
+ cachepc_cpuid();
+
return curr_cl->next;
}
void
cachepc_victim(void *p)
{
- cachepc_cpuid();
cachepc_mfence();
+ cachepc_cpuid();
+
cachepc_readq(p);
+
+ cachepc_mfence();
+ cachepc_cpuid();
}
uint64_t
cachepc_read_pmc(uint64_t event)
{
uint32_t lo, hi;
+ uint64_t res;
+
+ cachepc_mfence();
+ cachepc_cpuid();
event = 0xC0010201 + 2 * event;
@@ -157,6 +180,10 @@ cachepc_read_pmc(uint64_t event)
: "=a" (lo), "=d" (hi)
: "c"(event)
);
+ res = ((uint64_t) hi << 32) | (uint64_t) lo;
+
+ cachepc_mfence();
+ cachepc_cpuid();
- return ((uint64_t) hi << 32) | (uint64_t) lo;
+ return res;
}