All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] RISC-V: KVM: Allow to downgrade HGATP mode via SATP mode
@ 2025-11-22  7:50 ` fangyu.yu
  0 siblings, 0 replies; 22+ messages in thread
From: fangyu.yu @ 2025-11-22  7:50 UTC (permalink / raw)
  To: anup, atish.patra, pjw, palmer, aou, alex
  Cc: guoren, ajones, kvm, kvm-riscv, linux-riscv, linux-kernel,
	Fangyu Yu

From: Fangyu Yu <fangyu.yu@linux.alibaba.com>

Currently, HGATP mode uses the maximum value detected by the hardware
but often such a wide GPA is unnecessary, just as a host sometimes
doesn't need sv57.
It's likely that no additional parameters (like no5lvl and no4lvl) are
needed, aligning HGATP mode to SATP mode should meet the requirements
of most scenarios.

Signed-off-by: Fangyu Yu <fangyu.yu@linux.alibaba.com>
---
 arch/riscv/kvm/gstage.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/arch/riscv/kvm/gstage.c b/arch/riscv/kvm/gstage.c
index b67d60d722c2..bff80c80ead3 100644
--- a/arch/riscv/kvm/gstage.c
+++ b/arch/riscv/kvm/gstage.c
@@ -320,7 +320,6 @@ void __init kvm_riscv_gstage_mode_detect(void)
 	csr_write(CSR_HGATP, HGATP_MODE_SV57X4 << HGATP_MODE_SHIFT);
 	if ((csr_read(CSR_HGATP) >> HGATP_MODE_SHIFT) == HGATP_MODE_SV57X4) {
 		kvm_riscv_gstage_mode = HGATP_MODE_SV57X4;
-		kvm_riscv_gstage_pgd_levels = 5;
 		goto done;
 	}
 
@@ -328,7 +327,6 @@ void __init kvm_riscv_gstage_mode_detect(void)
 	csr_write(CSR_HGATP, HGATP_MODE_SV48X4 << HGATP_MODE_SHIFT);
 	if ((csr_read(CSR_HGATP) >> HGATP_MODE_SHIFT) == HGATP_MODE_SV48X4) {
 		kvm_riscv_gstage_mode = HGATP_MODE_SV48X4;
-		kvm_riscv_gstage_pgd_levels = 4;
 		goto done;
 	}
 
@@ -336,7 +334,6 @@ void __init kvm_riscv_gstage_mode_detect(void)
 	csr_write(CSR_HGATP, HGATP_MODE_SV39X4 << HGATP_MODE_SHIFT);
 	if ((csr_read(CSR_HGATP) >> HGATP_MODE_SHIFT) == HGATP_MODE_SV39X4) {
 		kvm_riscv_gstage_mode = HGATP_MODE_SV39X4;
-		kvm_riscv_gstage_pgd_levels = 3;
 		goto done;
 	}
 #else /* CONFIG_32BIT */
@@ -354,6 +351,10 @@ void __init kvm_riscv_gstage_mode_detect(void)
 	kvm_riscv_gstage_pgd_levels = 0;
 
 done:
+#ifdef CONFIG_64BIT
+	kvm_riscv_gstage_mode = min(satp_mode >> SATP_MODE_SHIFT, kvm_riscv_gstage_mode);
+	kvm_riscv_gstage_pgd_levels = kvm_riscv_gstage_mode - HGATP_MODE_SV39X4 + 3;
+#endif
 	csr_write(CSR_HGATP, 0);
 	kvm_riscv_local_hfence_gvma_all();
 }
-- 
2.50.1


-- 
kvm-riscv mailing list
kvm-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kvm-riscv

^ permalink raw reply related	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2025-12-03  6:09 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-22  7:50 [PATCH] RISC-V: KVM: Allow to downgrade HGATP mode via SATP mode fangyu.yu
2025-11-22  7:50 ` fangyu.yu
2025-11-22  7:50 ` fangyu.yu
2025-11-23  2:33 ` Guo Ren
2025-11-23  2:33   ` Guo Ren
2025-11-23  2:33   ` Guo Ren
2025-11-24 15:27   ` Andrew Jones
2025-11-24 15:27     ` Andrew Jones
2025-11-24 15:27     ` Andrew Jones
2025-11-25 14:18     ` fangyu.yu
2025-11-25 14:18       ` fangyu.yu
2025-11-25 14:18       ` fangyu.yu
2025-11-25 18:15       ` Radim Krčmář
2025-11-25 18:15         ` Radim Krčmář
2025-11-25 18:15         ` Radim Krčmář
2025-11-27  1:39         ` Guo Ren
2025-12-03  6:08           ` Anup Patel
2025-12-03  6:08             ` Anup Patel
2025-12-03  6:08             ` Anup Patel
2025-11-29  9:25         ` fangyu.yu
2025-11-29  9:25           ` fangyu.yu
2025-11-29  9:25           ` fangyu.yu

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.