From: Leonardo Bras <[email protected]>

Add a vcpu request to exit the guest, reload stage-2, and come back
to the guest.

This will be used by subsequent patches that enable S2 HAFDBS and
HDBSS, as they may need to change VTCR bits for enabling/disabling
the feature when the vcpus are still running.

Link: https://lore.kernel.org/all/[email protected]/
Signed-off-by: Leonardo Bras <[email protected]>
[zhengtian: reword the commit message]
Signed-off-by: Tian Zheng <[email protected]>
---
 arch/arm64/include/asm/kvm_host.h | 2 ++
 arch/arm64/kvm/arm.c              | 8 ++++++++
 2 files changed, 10 insertions(+)

diff --git a/arch/arm64/include/asm/kvm_host.h 
b/arch/arm64/include/asm/kvm_host.h
index cd9b9d2462f9..86a4d6e50934 100644
--- a/arch/arm64/include/asm/kvm_host.h
+++ b/arch/arm64/include/asm/kvm_host.h
@@ -55,6 +55,8 @@
 #define KVM_REQ_GUEST_HYP_IRQ_PENDING  KVM_ARCH_REQ(9)
 #define KVM_REQ_MAP_L1_VNCR_EL2                KVM_ARCH_REQ(10)
 #define KVM_REQ_VGIC_PROCESS_UPDATE    KVM_ARCH_REQ(11)
+#define KVM_REQ_RELOAD_STAGE2 \
+       KVM_ARCH_REQ_FLAGS(12, KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP)

 #define KVM_DIRTY_LOG_MANUAL_CAPS   (KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE | \
                                     KVM_DIRTY_LOG_INITIALLY_SET)
diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c
index 0576c2022ef5..d9ad765943d9 100644
--- a/arch/arm64/kvm/arm.c
+++ b/arch/arm64/kvm/arm.c
@@ -1175,6 +1175,14 @@ static int check_vcpu_requests(struct kvm_vcpu *vcpu)
                if (kvm_dirty_ring_check_request(vcpu))
                        return 0;

+               if (kvm_check_request(KVM_REQ_RELOAD_STAGE2, vcpu)) {
+                       unsigned long flags;
+
+                       local_irq_save(flags);
+                       __load_stage2(vcpu->arch.hw_mmu);
+                       local_irq_restore(flags);
+               }
+
                check_nested_vcpu_requests(vcpu);
        }

--
2.43.0


Reply via email to