[RFC PATCH part-7 05/12] pkvm: x86: Expose host EPT lock

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Shaoqin Huang <shaoqin.huang@xxxxxxxxx>

pKVM already has host EPT lock which is used to protect host EPT
violation. such lock will be used for other use cases in page state
management in the future.

Signed-off-by: Shaoqin Huang <shaoqin.huang@xxxxxxxxx>
Signed-off-by: Jason Chen CJ <jason.cj.chen@xxxxxxxxx>
---
 arch/x86/kvm/vmx/pkvm/hyp/ept.c | 16 +++++++++++++---
 arch/x86/kvm/vmx/pkvm/hyp/ept.h |  2 ++
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/arch/x86/kvm/vmx/pkvm/hyp/ept.c b/arch/x86/kvm/vmx/pkvm/hyp/ept.c
index 2a4d6cc7fa81..f7d3510cf0e2 100644
--- a/arch/x86/kvm/vmx/pkvm/hyp/ept.c
+++ b/arch/x86/kvm/vmx/pkvm/hyp/ept.c
@@ -24,7 +24,7 @@
 
 static struct hyp_pool host_ept_pool;
 static struct pkvm_pgtable host_ept;
-static pkvm_spinlock_t host_ept_lock = __PKVM_SPINLOCK_UNLOCKED;
+static pkvm_spinlock_t _host_ept_lock = __PKVM_SPINLOCK_UNLOCKED;
 
 static struct hyp_pool shadow_ept_pool;
 static struct rsvd_bits_validate ept_zero_check;
@@ -153,6 +153,16 @@ int pkvm_host_ept_unmap(unsigned long vaddr_start, unsigned long phys_start,
 	return pkvm_pgtable_unmap_safe(&host_ept, vaddr_start, phys_start, size);
 }
 
+void host_ept_lock(void)
+{
+	pkvm_spin_lock(&_host_ept_lock);
+}
+
+void host_ept_unlock(void)
+{
+	pkvm_spin_unlock(&_host_ept_lock);
+}
+
 static void reset_rsvds_bits_mask_ept(struct rsvd_bits_validate *rsvd_check,
 				      u64 pa_bits_rsvd, bool execonly,
 				      int huge_page_level)
@@ -227,7 +237,7 @@ int handle_host_ept_violation(unsigned long gpa)
 		return -EPERM;
 	}
 
-	pkvm_spin_lock(&host_ept_lock);
+	pkvm_spin_lock(&_host_ept_lock);
 
 	pkvm_pgtable_lookup(&host_ept, gpa, &hpa, NULL, &level);
 	if (hpa != INVALID_ADDR) {
@@ -269,7 +279,7 @@ int handle_host_ept_violation(unsigned long gpa)
 			 __func__, gpa);
 	}
 out:
-	pkvm_spin_unlock(&host_ept_lock);
+	pkvm_spin_unlock(&_host_ept_lock);
 	return ret;
 }
 
diff --git a/arch/x86/kvm/vmx/pkvm/hyp/ept.h b/arch/x86/kvm/vmx/pkvm/hyp/ept.h
index f63538368746..9d7d2c2f9be3 100644
--- a/arch/x86/kvm/vmx/pkvm/hyp/ept.h
+++ b/arch/x86/kvm/vmx/pkvm/hyp/ept.h
@@ -18,6 +18,8 @@ enum sept_handle_ret {
 	PKVM_INJECT_EPT_MISC,
 };
 
+void host_ept_lock(void);
+void host_ept_unlock(void);
 int pkvm_host_ept_map(unsigned long vaddr_start, unsigned long phys_start,
 		unsigned long size, int pgsz_mask, u64 prot);
 int pkvm_host_ept_unmap(unsigned long vaddr_start, unsigned long phys_start,
-- 
2.25.1




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux