Message ID | 20190207053740.26915-3-dave@stgolabs.net (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | None | expand |
Hi Davidlohr, On Wed, Feb 06, 2019 at 09:37:40PM -0800, Davidlohr Bueso wrote: > It is well known that because the mm can internally > call the regular gup_unlocked if the lockless approach > fails and take the sem there, the caller must not hold > the mmap_sem already. > > Fixes: e523f289fe4d (MIPS: c-r4k: Fix sigtramp SMP call to use kmap) > Cc: Ralf Baechle <ralf@linux-mips.org> > Cc: Paul Burton <paul.burton@mips.com> > Cc: James Hogan <jhogan@kernel.org> > Cc: linux-mips@vger.kernel.org > Signed-off-by: Davidlohr Bueso <dbueso@suse.de> Thanks - this looks good, but: 1) The problem it fixes was introduced in v4.8. 2) Commit adcc81f148d7 ("MIPS: math-emu: Write-protect delay slot emulation pages") actually left flush_cache_sigtramp unused, and has been backported to stable kernels also as far as v4.8. Therefore this will just fix code that never gets called, and I'll go delete the whole thing instead. Thanks, Paul
On Thu, 07 Feb 2019, Paul Burton wrote: >Hi Davidlohr, > >On Wed, Feb 06, 2019 at 09:37:40PM -0800, Davidlohr Bueso wrote: >> It is well known that because the mm can internally >> call the regular gup_unlocked if the lockless approach >> fails and take the sem there, the caller must not hold >> the mmap_sem already. >> >> Fixes: e523f289fe4d (MIPS: c-r4k: Fix sigtramp SMP call to use kmap) >> Cc: Ralf Baechle <ralf@linux-mips.org> >> Cc: Paul Burton <paul.burton@mips.com> >> Cc: James Hogan <jhogan@kernel.org> >> Cc: linux-mips@vger.kernel.org >> Signed-off-by: Davidlohr Bueso <dbueso@suse.de> > >Thanks - this looks good, but: > > 1) The problem it fixes was introduced in v4.8. > > 2) Commit adcc81f148d7 ("MIPS: math-emu: Write-protect delay slot > emulation pages") actually left flush_cache_sigtramp unused, and has > been backported to stable kernels also as far as v4.8. > >Therefore this will just fix code that never gets called, and I'll go >delete the whole thing instead. Even better. Thanks, Davidlohr
diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c index cc4e17caeb26..38fe86928837 100644 --- a/arch/mips/mm/c-r4k.c +++ b/arch/mips/mm/c-r4k.c @@ -1034,11 +1034,9 @@ static void r4k_flush_cache_sigtramp(unsigned long addr) struct flush_cache_sigtramp_args args; int npages; - down_read(¤t->mm->mmap_sem); - npages = get_user_pages_fast(addr, 1, 0, &args.page); if (npages < 1) - goto out; + return; args.mm = current->mm; args.addr = addr; @@ -1046,8 +1044,6 @@ static void r4k_flush_cache_sigtramp(unsigned long addr) r4k_on_each_cpu(R4K_HIT, local_r4k_flush_cache_sigtramp, &args); put_page(args.page); -out: - up_read(¤t->mm->mmap_sem); } static void r4k_flush_icache_all(void)
It is well known that because the mm can internally call the regular gup_unlocked if the lockless approach fails and take the sem there, the caller must not hold the mmap_sem already. Fixes: e523f289fe4d (MIPS: c-r4k: Fix sigtramp SMP call to use kmap) Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Paul Burton <paul.burton@mips.com> Cc: James Hogan <jhogan@kernel.org> Cc: linux-mips@vger.kernel.org Signed-off-by: Davidlohr Bueso <dbueso@suse.de> --- arch/mips/mm/c-r4k.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-)