From eb81e57b5b5bd8ea69a21074d649ebd2be0c4abd Mon Sep 17 00:00:00 2001 From: Will Deacon Date: Mon, 24 Jan 2022 10:42:24 +0000 Subject: [PATCH] Revert "FROMLIST: KVM: arm64: pkvm: Use the mm_ops indirection for cache maintenance" This reverts commit 9ad5e201c7a4375d04045099c8d0862ef5b54854. The corresponding patch has been queued in the kvmarm tree as a fix for 5.17, so revert our FROMLIST version in preparation for pulling in the upstream queue instead. Bug: 209777660 Signed-off-by: Will Deacon Change-Id: I7f65941b2b13125c6c6397590abbc3e18cb54496 --- arch/arm64/kvm/hyp/pgtable.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/arch/arm64/kvm/hyp/pgtable.c b/arch/arm64/kvm/hyp/pgtable.c index 03bdf4f50826..8ca3fffe00f5 100644 --- a/arch/arm64/kvm/hyp/pgtable.c +++ b/arch/arm64/kvm/hyp/pgtable.c @@ -983,9 +983,13 @@ static int stage2_unmap_walker(u64 addr, u64 end, u32 level, kvm_pte_t *ptep, */ stage2_put_pte(ptep, mmu, addr, level, mm_ops); - if (need_flush && mm_ops->dcache_clean_inval_poc) - mm_ops->dcache_clean_inval_poc(kvm_pte_follow(pte, mm_ops), - kvm_granule_size(level)); + if (need_flush) { + kvm_pte_t *pte_follow = kvm_pte_follow(pte, mm_ops); + + dcache_clean_inval_poc((unsigned long)pte_follow, + (unsigned long)pte_follow + + kvm_granule_size(level)); + } if (childp) mm_ops->put_page(childp); @@ -1147,13 +1151,15 @@ static int stage2_flush_walker(u64 addr, u64 end, u32 level, kvm_pte_t *ptep, struct kvm_pgtable *pgt = arg; struct kvm_pgtable_mm_ops *mm_ops = pgt->mm_ops; kvm_pte_t pte = *ptep; + kvm_pte_t *pte_follow; if (!stage2_pte_cacheable(pgt, pte)) return 0; - if (mm_ops->dcache_clean_inval_poc) - mm_ops->dcache_clean_inval_poc(kvm_pte_follow(pte, mm_ops), - kvm_granule_size(level)); + pte_follow = kvm_pte_follow(pte, mm_ops); + dcache_clean_inval_poc((unsigned long)pte_follow, + (unsigned long)pte_follow + + kvm_granule_size(level)); return 0; }