From: Liam R. Howlett Date: Tue, 16 Mar 2021 19:55:38 +0000 (-0400) Subject: parisc: Fix cache rcu lock X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=2f5fbbfac15e3eb0f55d729962ff69ced9d77240;p=users%2Fjedix%2Flinux-maple.git parisc: Fix cache rcu lock Signed-off-by: Liam R. Howlett --- diff --git a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c index 288a25e1b1c2..edb8696612d0 100644 --- a/arch/parisc/kernel/cache.c +++ b/arch/parisc/kernel/cache.c @@ -522,8 +522,11 @@ static inline unsigned long mm_total_size(struct mm_struct *mm) unsigned long usize = 0; MA_STATE(mas, &mm->mm_mt, 0, 0); + rcu_read_lock(); mas_for_each(&mas, vma, ULONG_MAX) usize += vma->vm_end - vma->vm_start; + rcu_read_unlock(); + return usize; } @@ -562,16 +565,19 @@ void flush_cache_mm(struct mm_struct *mm) } if (mm->context == mfsp(3)) { + rcu_read_lock(); mas_for_each(&mas, vma, ULONG_MAX) { flush_user_dcache_range_asm(vma->vm_start, vma->vm_end); if (vma->vm_flags & VM_EXEC) flush_user_icache_range_asm(vma->vm_start, vma->vm_end); flush_tlb_range(vma, vma->vm_start, vma->vm_end); } + rcu_read_unlock(); return; } pgd = mm->pgd; + rcu_read_lock(); mas_for_each(&mas, vma, ULONG_MAX) { unsigned long addr; @@ -592,6 +598,7 @@ void flush_cache_mm(struct mm_struct *mm) } } } + rcu_unread_lock(); } void flush_cache_range(struct vm_area_struct *vma,