summaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/svm/vmenter.S
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2022-10-04 14:44:21 +0200
committerLouis Burda <quent.burda@gmail.com>2022-10-04 14:44:21 +0200
commit1739f9c7cc0ac4ba04c7e02ad7790d765be6a35f (patch)
tree026207310f84e4696028a208c407f8b300b76d4e /arch/x86/kvm/svm/vmenter.S
parente902dc1ac4db1f4dc711fa12ad6976fb3fcddf1a (diff)
downloadcachepc-linux-1739f9c7cc0ac4ba04c7e02ad7790d765be6a35f.tar.gz
cachepc-linux-1739f9c7cc0ac4ba04c7e02ad7790d765be6a35f.zip
Add page tracking
Diffstat (limited to 'arch/x86/kvm/svm/vmenter.S')
-rwxr-xr-x[-rw-r--r--]arch/x86/kvm/svm/vmenter.S129
1 files changed, 66 insertions, 63 deletions
diff --git a/arch/x86/kvm/svm/vmenter.S b/arch/x86/kvm/svm/vmenter.S
index 5e62795a4bc1..0626f3fdddfd 100644..100755
--- a/arch/x86/kvm/svm/vmenter.S
+++ b/arch/x86/kvm/svm/vmenter.S
@@ -27,50 +27,53 @@
#define VCPU_R15 __VCPU_REGS_R15 * WORD_SIZE
#endif
+.section .noinstr.text, "ax"
+
+.extern cachepc_msrmts
+.extern cachepc_regs_tmp
+.extern cachepc_regs_vm
+
.macro load_tmp off reg
- mov cachepc_regs_tmp(off), reg
+ mov cachepc_regs_tmp+\off(%rip), \reg
.endm
.macro save_tmp off reg
- mov reg, cachepc_regs_tmp(off)
+ mov \reg, cachepc_regs_tmp+\off(%rip)
.endm
.macro load_vm off reg
- mov cachepc_regs_vm(off), reg
+ mov cachepc_regs_vm+\off(%rip), \reg
.endm
.macro save_vm off reg
- mov reg, cachepc_regs_vm(off)
+ mov \reg, cachepc_regs_vm+\off(%rip)
.endm
.macro apply_regs func
- func 0x00, %rax
- func 0x08, %rbx
- func 0x10, %rcx
- func 0x18, %rdx
- func 0x20, %rbp
- func 0x28, %rsp
- func 0x30, %rdi
- func 0x38, %rsi
- func 0x40, %r8
- func 0x48, %r9
- func 0x50, %r10
- func 0x58, %r11
- func 0x60, %r12
- func 0x68, %r13
- func 0x70, %r14
- func 0x78, %r15
+ \func 0x00, %rax
+ \func 0x08, %rbx
+ \func 0x10, %rcx
+ \func 0x18, %rdx
+ \func 0x20, %rbp
+ \func 0x28, %rsp
+ \func 0x30, %rdi
+ \func 0x38, %rsi
+ \func 0x40, %r8
+ \func 0x48, %r9
+ \func 0x50, %r10
+ \func 0x58, %r11
+ \func 0x60, %r12
+ \func 0x68, %r13
+ \func 0x70, %r14
+ \func 0x78, %r15
.endm
.macro barrier
- mfence
- mov $0x80000005,%eax
- cpuid
+ mfence
+ mov $0x80000005,%eax
+ cpuid
.endm
-
-.section .noinstr.text, "ax"
-
/**
* __svm_vcpu_run - Run a vCPU via a transition to SVM guest mode
* @vmcb_pa: unsigned long
@@ -125,26 +128,26 @@ SYM_FUNC_START(__svm_vcpu_run)
sti
1:
- //apply_regs save_vm
- //apply_regs load_tmp
- //mov cachepc_ds, %rsi
- //mov 0x8(%rsi), %r15
- //lea sev_prime_ret(%rip), %rdi
- //jmp cachepc_prime_vcall+1 // skip stack pushs
-//sev_prime_ret:
- //apply_regs save_tmp
- //apply_regs load_vm
+ apply_regs save_vm
+ apply_regs load_tmp
+ mov cachepc_ds, %rsi
+ mov 0x8(%rsi), %r15
+ lea sev_prime_ret(%rip), %rdi
+ jmp cachepc_prime_vcall+5+1 // skip stack pushs
+sev_prime_ret:
+ apply_regs save_tmp
+ apply_regs load_vm
vmrun %_ASM_AX
-// apply_regs save_vm
-// apply_regs load_tmp
-// mov %r15, %rsi
-// lea sev_probe_ret(%rip), %rdi
-// jmp cachepc_probe_vcall+6 // skip stack pushs
-//sev_probe_ret:
-// apply_regs save_tmp
-// apply_regs load_vm
+ apply_regs save_vm
+ apply_regs load_tmp
+ mov %r15, %rsi
+ lea sev_probe_ret(%rip), %rdi
+ jmp cachepc_probe_vcall+5+8 // skip stack pushs
+sev_probe_ret:
+ apply_regs save_tmp
+ apply_regs load_vm
2: cli
@@ -249,26 +252,26 @@ SYM_FUNC_START(__svm_sev_es_vcpu_run)
1:
-// apply_regs save_vm
-// apply_regs load_tmp
-// mov cachepc_ds, %rsi
-// mov 0x8(%rsi), %r15
-// lea sev_es_prime_ret(%rip), %rdi
-// jmp cachepc_prime_vcall+1 // skip stack pushes
-//sev_es_prime_ret:
-// apply_regs save_tmp
-// apply_regs load_vm
-//
- vmrun %_ASM_AX
-//
-// apply_regs save_vm
-// apply_regs load_tmp
-// mov %r15, %rsi
-// lea sev_es_probe_ret(%rip), %rdi
-// jmp cachepc_probe_vcall+6 // skip stack pushs
-//sev_es_probe_ret:
-// apply_regs save_tmp
-// apply_regs load_vm
+ apply_regs save_vm
+ apply_regs load_tmp
+ mov cachepc_ds, %rsi
+ mov 0x8(%rsi), %r15
+ lea sev_es_prime_ret(%rip), %rdi
+ jmp cachepc_prime_vcall+5+1 // skip stack pushes
+sev_es_prime_ret:
+ apply_regs save_tmp
+ apply_regs load_vm
+
+ vmrun %_ASM_AX
+
+ apply_regs save_vm
+ apply_regs load_tmp
+ mov %r15, %rsi
+ lea sev_es_probe_ret(%rip), %rdi
+ jmp cachepc_probe_vcall+5+8 // skip stack pushs
+sev_es_probe_ret:
+ apply_regs save_tmp
+ apply_regs load_vm
2: cli