summaryrefslogtreecommitdiffstats
path: root/kmod
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2022-08-15 21:52:52 +0200
committerLouis Burda <quent.burda@gmail.com>2022-08-15 21:52:52 +0200
commite80d7612f93f7d8dabe3be5152d8baa15a7d29db (patch)
tree76074fbac084e357bae9a90f5d0fceee04497ab4 /kmod
parentfef45f5207c99b00676c014bc02141e284c331ce (diff)
downloadcachepc-e80d7612f93f7d8dabe3be5152d8baa15a7d29db.tar.gz
cachepc-e80d7612f93f7d8dabe3be5152d8baa15a7d29db.zip
Minor tweaks
Diffstat (limited to 'kmod')
-rwxr-xr-xkmod/cachepc.c4
-rwxr-xr-xkmod/cachepc.h19
-rw-r--r--kmod/cachepc_user.h2
3 files changed, 9 insertions, 16 deletions
diff --git a/kmod/cachepc.c b/kmod/cachepc.c
index df8ea0e..1dcb764 100755
--- a/kmod/cachepc.c
+++ b/kmod/cachepc.c
@@ -140,7 +140,7 @@ cachepc_save_msrmts(cacheline *head)
{
cacheline *curr_cl;
- printk(KERN_WARNING "CachePC: Updating /proc/cachepc\n");
+ // printk(KERN_WARNING "CachePC: Updating /proc/cachepc\n");
curr_cl = head;
do {
@@ -369,7 +369,6 @@ void build_randomized_list_for_cache_set(cache_ctx *ctx, cacheline **cacheline_p
curr_cl = cacheline_ptr_arr[idx_map[i]];
curr_cl->next = cacheline_ptr_arr[idx_map[(i + 1) % len]];
curr_cl->prev = cacheline_ptr_arr[idx_map[(len - 1 + i) % len]];
- curr_cl->count = 0;
if (idx_map[i] == 0) {
curr_cl->flags = SET_FIRST(DEFAULT_FLAGS);
@@ -405,6 +404,7 @@ allocate_cache_ds(cache_ctx *ctx)
cl_ptr_arr[i] = cl_arr + i;
cl_ptr_arr[i]->cache_set = get_virt_cache_set(ctx, cl_ptr_arr[i]);
cl_ptr_arr[i]->cache_line = i / ctx->sets;
+ cl_ptr_arr[i]->count = 0;
}
return cl_ptr_arr;
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
diff --git a/kmod/cachepc_user.h b/kmod/cachepc_user.h
index a04b184..f815839 100644
--- a/kmod/cachepc_user.h
+++ b/kmod/cachepc_user.h
@@ -3,6 +3,6 @@
#include <linux/ioctl.h>
#define CACHEPC_IOCTL_MAGIC 0xBF
-#define CACHEPC_IOCTL_TEST_ACCESS _IOR(CACHEPC_IOCTL_MAGIC, 0, uint32_t)
+#define CACHEPC_IOCTL_TEST_ACCESS _IOWR(CACHEPC_IOCTL_MAGIC, 0, uint32_t)
#define CACHEPC_IOCTL_TEST_EVICTION _IOWR(CACHEPC_IOCTL_MAGIC, 1, uint32_t)
#define CACHEPC_IOCTL_INIT_PMC _IOW(CACHEPC_IOCTL_MAGIC, 2, uint32_t)