* [PATCH 6.1.y] KVM: arm64: Don't pass a TLBI level hint when zapping table entries
@ 2024-08-15 12:50 Will Deacon
0 siblings, 0 replies; only message in thread
From: Will Deacon @ 2024-08-15 12:50 UTC (permalink / raw)
To: stable
Cc: Will Deacon, Gavin Shan, Marc Zyngier, Quentin Perret,
Shaoqin Huang, Oliver Upton
commit 36e008323926036650299cfbb2dca704c7aba849 upstream.
The TLBI level hints are for leaf entries only, so take care not to pass
them incorrectly after clearing a table entry.
Cc: Gavin Shan <gshan@redhat.com>
Cc: Marc Zyngier <maz@kernel.org>
Cc: Quentin Perret <qperret@google.com>
Fixes: 82bb02445de5 ("KVM: arm64: Implement kvm_pgtable_hyp_unmap() at EL2")
Fixes: 6d9d2115c480 ("KVM: arm64: Add support for stage-2 map()/unmap() in generic page-table")
Reviewed-by: Shaoqin Huang <shahuang@redhat.com>
Reviewed-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20240327124853.11206-3-will@kernel.org
Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
Cc: <stable@vger.kernel.org> # 6.1.y only
[will@: Use '0' instead of TLBI_TTL_UNKNOWN_to indicate "no level". Force
level to 0 in stage2_put_pte() if we're clearing a table entry.]
Signed-off-by: Will Deacon <will@kernel.org>
---
arch/arm64/kvm/hyp/pgtable.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/arch/arm64/kvm/hyp/pgtable.c b/arch/arm64/kvm/hyp/pgtable.c
index ae5f6b5ac80f..f0167dc7438f 100644
--- a/arch/arm64/kvm/hyp/pgtable.c
+++ b/arch/arm64/kvm/hyp/pgtable.c
@@ -475,7 +475,7 @@ static int hyp_unmap_walker(u64 addr, u64 end, u32 level, kvm_pte_t *ptep,
kvm_clear_pte(ptep);
dsb(ishst);
- __tlbi_level(vae2is, __TLBI_VADDR(addr, 0), level);
+ __tlbi_level(vae2is, __TLBI_VADDR(addr, 0), 0);
} else {
if (end - addr < granule)
return -EINVAL;
@@ -699,8 +699,14 @@ static void stage2_put_pte(kvm_pte_t *ptep, struct kvm_s2_mmu *mmu, u64 addr,
* Clear the existing PTE, and perform break-before-make with
* TLB maintenance if it was valid.
*/
- if (kvm_pte_valid(*ptep)) {
+ kvm_pte_t pte = *ptep;
+
+ if (kvm_pte_valid(pte)) {
kvm_clear_pte(ptep);
+
+ if (kvm_pte_table(pte, level))
+ level = 0;
+
kvm_call_hyp(__kvm_tlb_flush_vmid_ipa, mmu, addr, level);
}
--
2.46.0.184.g6999bdac58-goog
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2024-08-15 12:50 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-15 12:50 [PATCH 6.1.y] KVM: arm64: Don't pass a TLBI level hint when zapping table entries Will Deacon
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox