# git rev-parse -q --verify 8e0d0ad206f08506c893326ca7c9c3d9cc042cef^{commit} 8e0d0ad206f08506c893326ca7c9c3d9cc042cef already have revision, skipping fetch # git checkout -q -f -B kisskb 8e0d0ad206f08506c893326ca7c9c3d9cc042cef # git clean -qxdf # < git log -1 # commit 8e0d0ad206f08506c893326ca7c9c3d9cc042cef # Author: Linus Torvalds # Date: Tue Oct 15 09:56:36 2019 -0700 # # sparc64: disable fast-GUP due to unexplained oopses # # HAVE_FAST_GUP enables the lockless quick page table walker for simple # cases, and is a nice optimization for some random loads that can then # use get_user_pages_fast() rather than the more careful page walker. # # However, for some unexplained reason, it seems to be subtly broken on # sparc64. The breakage is only with some compiler versions and some # hardware, and nobody seems to have figured out what triggers it, # although there's a simple reprodicer for the problem when it does # trigger. # # The problem was introduced with the conversion to the generic GUP code # in commit 7b9afb86b632 ("sparc64: use the generic get_user_pages_fast # code"), but nothing looks obviously wrong in that conversion. It may be # a compiler bug that just hits us with the code reorganization. Or it # may be something very specific to sparc64. # # This disables HAVE_FAST_GUP entirely. That makes things like futexes a # bit slower, but at least they work. If we can figure out the trigger, # that would be lovely, but it's been three months already.. # # Link: https://lore.kernel.org/lkml/20190717215956.GA30369@altlinux.org/ # Fixes: 7b9afb86b632 ("sparc64: use the generic get_user_pages_fast code") # Reported-by: Dmitry V Levin # Reported-by: Anatoly Pugachev # Requested-by: Meelis Roos # Suggested-by: Christoph Hellwig # Cc: David Miller # Signed-off-by: Linus Torvalds # < /opt/cross/kisskb/korg/gcc-8.1.0-nolibc/hppa64-linux/bin/hppa64-linux-gcc --version # < /opt/cross/kisskb/korg/gcc-8.1.0-nolibc/hppa64-linux/bin/hppa64-linux-ld --version # < git log --format=%s --max-count=1 8e0d0ad206f08506c893326ca7c9c3d9cc042cef # < make -s -j 24 ARCH=parisc O=/kisskb/build/linus_a500_defconfig_parisc64 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.1.0-nolibc/hppa64-linux/bin/hppa64-linux- a500_defconfig # make -s -j 24 ARCH=parisc O=/kisskb/build/linus_a500_defconfig_parisc64 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.1.0-nolibc/hppa64-linux/bin/hppa64-linux- In file included from /kisskb/src/arch/parisc/include/asm/atomic.h:10, from /kisskb/src/include/linux/atomic.h:7, from /kisskb/src/arch/parisc/include/asm/bitops.h:13, from /kisskb/src/include/linux/bitops.h:26, from /kisskb/src/include/linux/kernel.h:12, from /kisskb/src/include/linux/list.h:9, from /kisskb/src/include/linux/module.h:9, from /kisskb/src/drivers/scsi/scsi_debug.c:18: /kisskb/src/drivers/scsi/scsi_debug.c: In function 'resp_start_stop': /kisskb/src/arch/parisc/include/asm/cmpxchg.h:48:3: warning: value computed is not used [-Wunused-value] ((__typeof__(*(ptr)))__xchg((unsigned long)(x), (ptr), sizeof(*(ptr)))) /kisskb/src/arch/parisc/include/asm/atomic.h:78:30: note: in expansion of macro 'xchg' #define atomic_xchg(v, new) (xchg(&((v)->counter), new)) ^~~~ /kisskb/src/drivers/scsi/scsi_debug.c:1618:2: note: in expansion of macro 'atomic_xchg' atomic_xchg(&devip->stopped, stop); ^~~~~~~~~~~ In file included from /kisskb/src/arch/parisc/include/asm/atomic.h:10, from /kisskb/src/include/linux/atomic.h:7, from /kisskb/src/arch/parisc/include/asm/bitops.h:13, from /kisskb/src/include/linux/bitops.h:26, from /kisskb/src/include/linux/kernel.h:12, from /kisskb/src/include/linux/list.h:9, from /kisskb/src/include/linux/preempt.h:11, from /kisskb/src/include/linux/spinlock.h:51, from /kisskb/src/include/linux/seqlock.h:36, from /kisskb/src/include/linux/time.h:6, from /kisskb/src/fs/nfs/read.c:11: /kisskb/src/fs/nfs/read.c: In function 'nfs_read_completion': /kisskb/src/arch/parisc/include/asm/cmpxchg.h:48:3: warning: value computed is not used [-Wunused-value] ((__typeof__(*(ptr)))__xchg((unsigned long)(x), (ptr), sizeof(*(ptr)))) ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /kisskb/src/fs/nfs/read.c:196:5: note: in expansion of macro 'xchg' xchg(&nfs_req_openctx(req)->error, error); ^~~~ /kisskb/src/fs/nfs/read.c: In function 'nfs_readpage': /kisskb/src/arch/parisc/include/asm/cmpxchg.h:48:3: warning: value computed is not used [-Wunused-value] ((__typeof__(*(ptr)))__xchg((unsigned long)(x), (ptr), sizeof(*(ptr)))) ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /kisskb/src/fs/nfs/read.c:352:2: note: in expansion of macro 'xchg' xchg(&ctx->error, 0); ^~~~ Completed OK # rm -rf /kisskb/build/linus_a500_defconfig_parisc64 # Build took: 0:01:33.210993