]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
arm64: tlb: Pass the corresponding mm to __tlbi_sync_s1ish()
authorCatalin Marinas <catalin.marinas@arm.com>
Tue, 7 Apr 2026 10:28:42 +0000 (11:28 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Fri, 10 Apr 2026 18:46:14 +0000 (19:46 +0100)
The mm structure will be used for workarounds that need limiting to
specific tasks.

Acked-by: Mark Rutland <mark.rutland@arm.com>
Cc: Will Deacon <will@kernel.org>
Reviewed-by: Will Deacon <will@kernel.org>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/include/asm/tlbflush.h
arch/arm64/kernel/sys_compat.c

index f41eebf009902f9da1f6781483dd1a211cc3a1bd..2627911919350350f6cc36686c60781480fa8e1c 100644 (file)
@@ -185,7 +185,7 @@ do {                                                                                \
  * Complete broadcast TLB maintenance issued by the host which invalidates
  * stage 1 information in the host's own translation regime.
  */
-static inline void __tlbi_sync_s1ish(void)
+static inline void __tlbi_sync_s1ish(struct mm_struct *mm)
 {
        dsb(ish);
        __repeat_tlbi_sync(vale1is, 0);
@@ -323,7 +323,7 @@ static inline void flush_tlb_mm(struct mm_struct *mm)
        asid = __TLBI_VADDR(0, ASID(mm));
        __tlbi(aside1is, asid);
        __tlbi_user(aside1is, asid);
-       __tlbi_sync_s1ish();
+       __tlbi_sync_s1ish(mm);
        mmu_notifier_arch_invalidate_secondary_tlbs(mm, 0, -1UL);
 }
 
@@ -377,7 +377,7 @@ static inline void flush_tlb_page(struct vm_area_struct *vma,
                                  unsigned long uaddr)
 {
        flush_tlb_page_nosync(vma, uaddr);
-       __tlbi_sync_s1ish();
+       __tlbi_sync_s1ish(vma->vm_mm);
 }
 
 static inline bool arch_tlbbatch_should_defer(struct mm_struct *mm)
@@ -532,7 +532,7 @@ static inline void __flush_tlb_range(struct vm_area_struct *vma,
 {
        __flush_tlb_range_nosync(vma->vm_mm, start, end, stride,
                                 last_level, tlb_level);
-       __tlbi_sync_s1ish();
+       __tlbi_sync_s1ish(vma->vm_mm);
 }
 
 static inline void local_flush_tlb_contpte(struct vm_area_struct *vma,
index b9d4998c97efac79bdd32133cf6edbce5f08b208..03fde2677d5be74c58a89202b27cfc3c55f286d2 100644 (file)
@@ -37,7 +37,7 @@ __do_compat_cache_op(unsigned long start, unsigned long end)
                         * We pick the reserved-ASID to minimise the impact.
                         */
                        __tlbi(aside1is, __TLBI_VADDR(0, 0));
-                       __tlbi_sync_s1ish();
+                       __tlbi_sync_s1ish(current->mm);
                }
 
                ret = caches_clean_inval_user_pou(start, start + chunk);