summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2023-02-03 12:08:28 -0600
committerLouis Burda <quent.burda@gmail.com>2023-02-03 12:08:28 -0600
commit0d4f62bcc065026390dd1f19b0bb462d07dcf9ff (patch)
treeebf4b2d751a8c91c137f611cf1033b804382e448
parent1715c9d6e1aa977b407081fb3164edbf1534fb5c (diff)
downloadcachepc-0d4f62bcc065026390dd1f19b0bb462d07dcf9ff.tar.gz
cachepc-0d4f62bcc065026390dd1f19b0bb462d07dcf9ff.zip
Simplify target gfn stepping by tracking a single page
-rw-r--r--cachepc/cachepc.h10
-rw-r--r--cachepc/kvm.c3
m---------linux0
3 files changed, 2 insertions, 11 deletions
diff --git a/cachepc/cachepc.h b/cachepc/cachepc.h
index 5b4308f..f44b169 100644
--- a/cachepc/cachepc.h
+++ b/cachepc/cachepc.h
@@ -60,16 +60,6 @@ struct cpc_track_steps {
uint64_t target_gfn;
bool stepping;
bool use_filter;
-
- /* simplified page tracking without singlestep resolve, since we
- * only care about when we reach the target page, not accuracy..
- * in contrast to page_track, we keep two pages tracked at all times
- * this helps prevent it looking like a A is tracked after B
- * when in reality we just untracked A too early on a A -> B boundary */
- bool prev_avail;
- uint64_t prev_gfn;
- bool cur_avail;
- uint64_t cur_gfn;
};
static_assert(sizeof(struct cpc_cl) == L1_LINESIZE, "Bad cacheline struct");
diff --git a/cachepc/kvm.c b/cachepc/kvm.c
index 9c17498..11a18d2 100644
--- a/cachepc/kvm.c
+++ b/cachepc/kvm.c
@@ -525,7 +525,8 @@ cpc_track_mode_ioctl(void __user *arg_user)
cpc_singlestep_reset = true;
cpc_track_steps.stepping = true;
} else {
- cpc_track_all(vcpu, KVM_PAGE_TRACK_EXEC);
+ cpc_track_single(vcpu, cpc_track_steps.target_gfn,
+ KVM_PAGE_TRACK_EXEC);
cpc_track_steps.stepping = false;
}
break;
diff --git a/linux b/linux
-Subproject 725983359162c9cb3a273fe375fe79bfadf80d2
+Subproject 6342cefc67f3b4dff3d3b0ac031e2d9513596d8