@@ -528,7 +528,7 @@ static int hyp_unmap_walker(const struct kvm_pgtable_visit_ctx *ctx,
528
528
529
529
kvm_clear_pte (ctx -> ptep );
530
530
dsb (ishst );
531
- __tlbi_level (vae2is , __TLBI_VADDR (ctx -> addr , 0 ), ctx -> level );
531
+ __tlbi_level (vae2is , __TLBI_VADDR (ctx -> addr , 0 ), TLBI_TTL_UNKNOWN );
532
532
} else {
533
533
if (ctx -> end - ctx -> addr < granule )
534
534
return - EINVAL ;
@@ -896,10 +896,12 @@ static void stage2_unmap_put_pte(const struct kvm_pgtable_visit_ctx *ctx,
896
896
if (kvm_pte_valid (ctx -> old )) {
897
897
kvm_clear_pte (ctx -> ptep );
898
898
899
- if (!stage2_unmap_defer_tlb_flush (pgt ) ||
900
- kvm_pte_table (ctx -> old , ctx -> level )) {
901
- kvm_call_hyp (__kvm_tlb_flush_vmid_ipa , mmu ,
902
- ctx -> addr , ctx -> level );
899
+ if (kvm_pte_table (ctx -> old , ctx -> level )) {
900
+ kvm_call_hyp (__kvm_tlb_flush_vmid_ipa , mmu , ctx -> addr ,
901
+ TLBI_TTL_UNKNOWN );
902
+ } else if (!stage2_unmap_defer_tlb_flush (pgt )) {
903
+ kvm_call_hyp (__kvm_tlb_flush_vmid_ipa , mmu , ctx -> addr ,
904
+ ctx -> level );
903
905
}
904
906
}
905
907
0 commit comments