summaryrefslogtreecommitdiffstats
path: root/patch.diff
diff options
context:
space:
mode:
Diffstat (limited to 'patch.diff')
-rwxr-xr-xpatch.diff24
1 files changed, 19 insertions, 5 deletions
diff --git a/patch.diff b/patch.diff
index 28fa115..aa166bc 100755
--- a/patch.diff
+++ b/patch.diff
@@ -50,6 +50,14 @@ index 30f244b64523..e0eeffd340e8 100644
ifdef CONFIG_HYPERV
kvm-amd-y += svm/svm_onhyperv.o
+diff --git a/arch/x86/kvm/cachepc b/arch/x86/kvm/cachepc
+new file mode 120000
+index 000000000000..9119e44af1f0
+--- /dev/null
++++ b/arch/x86/kvm/cachepc
+@@ -0,0 +1 @@
++/home/louis/kvm-prime-count/cachepc
+\ No newline at end of file
diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c
index d871b8dee7b3..3b7720aebbc6 100644
--- a/arch/x86/kvm/mmu/mmu.c
@@ -181,7 +189,7 @@ index 2e09d1b6249f..9b40e71564bf 100644
EXPORT_SYMBOL_GPL(kvm_slot_page_track_add_page);
diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
-index cf0bf456d520..6687fad99e97 100644
+index cf0bf456d520..d6a4002fa550 100644
--- a/arch/x86/kvm/svm/svm.c
+++ b/arch/x86/kvm/svm/svm.c
@@ -2,6 +2,8 @@
@@ -193,7 +201,7 @@ index cf0bf456d520..6687fad99e97 100644
#include "irq.h"
#include "mmu.h"
#include "kvm_cache_regs.h"
-@@ -3788,14 +3790,33 @@ static noinstr void svm_vcpu_enter_exit(struct kvm_vcpu *vcpu)
+@@ -3788,14 +3790,37 @@ static noinstr void svm_vcpu_enter_exit(struct kvm_vcpu *vcpu)
{
struct vcpu_svm *svm = to_svm(vcpu);
unsigned long vmcb_pa = svm->current_vmcb->pa;
@@ -203,7 +211,8 @@ index cf0bf456d520..6687fad99e97 100644
if (sev_es_guest(vcpu->kvm)) {
+ memset(cachepc_msrmts, 0,
-+ cachepc_msrmts_count * sizeof(uint16_t));
++ cachepc_msrmts_count * sizeof(cpc_msrmt_t));
++ cachepc_reset_pmc(CPC_L1MISS_PMC);
+
+ cpu = get_cpu();
+ local_irq_disable();
@@ -212,13 +221,16 @@ index cf0bf456d520..6687fad99e97 100644
__svm_sev_es_vcpu_run(vmcb_pa);
+
+ cachepc_save_msrmts(cachepc_ds);
++ if (cachepc_baseline_measure)
++ cachepc_update_baseline();
+ local_irq_enable();
+ put_cpu();
} else {
struct svm_cpu_data *sd = per_cpu(svm_data, vcpu->cpu);
+ memset(cachepc_msrmts, 0,
-+ cachepc_msrmts_count * sizeof(uint16_t));
++ cachepc_msrmts_count * sizeof(cpc_msrmt_t));
++ cachepc_reset_pmc(CPC_L1MISS_PMC);
+
+ cpu = get_cpu();
+ local_irq_disable();
@@ -227,12 +239,14 @@ index cf0bf456d520..6687fad99e97 100644
/*
* Use a single vmcb (vmcb01 because it's always valid) for
* context switching guest state via VMLOAD/VMSAVE, that way
-@@ -3807,6 +3828,10 @@ static noinstr void svm_vcpu_enter_exit(struct kvm_vcpu *vcpu)
+@@ -3807,6 +3832,12 @@ static noinstr void svm_vcpu_enter_exit(struct kvm_vcpu *vcpu)
vmsave(svm->vmcb01.pa);
vmload(__sme_page_pa(sd->save_area));
+
+ cachepc_save_msrmts(cachepc_ds);
++ if (cachepc_baseline_measure)
++ cachepc_update_baseline();
+ local_irq_enable();
+ put_cpu();
}