# git rev-parse -q --verify 0f1a7b3fac0583083ca19d4de47403511ced3521^{commit} 0f1a7b3fac0583083ca19d4de47403511ced3521 already have revision, skipping fetch # git checkout -q -f -B kisskb 0f1a7b3fac0583083ca19d4de47403511ced3521 # git clean -qxdf # < git log -1 # commit 0f1a7b3fac0583083ca19d4de47403511ced3521 # Author: Linus Torvalds # Date: Wed Oct 2 16:16:07 2019 -0700 # # timer-of: don't use conditional expression with mixed 'void' types # # Randy Dunlap reports on the sparse list that sparse warns about this # expression: # # of_irq->percpu ? free_percpu_irq(of_irq->irq, clkevt) : # free_irq(of_irq->irq, clkevt); # # and honestly, sparse is correct to warn. The return type of # free_percpu_irq() is 'void', while free_irq() returns a 'const void *' # that is the devname argument passed in to the request_irq(). # # You can't mix a void type with a non-void types in a conditional # expression according to the C standard. It so happens that gcc seems to # accept it - and the resulting type of the expression is void - but # there's really no reason for the kernel to have this kind of # non-standard expression with no real upside. # # The natural way to write that expression is with an if-statement: # # if (of_irq->percpu) # free_percpu_irq(of_irq->irq, clkevt); # else # free_irq(of_irq->irq, clkevt); # # which is more legible anyway. # # I'm not sure why that timer-of code seems to have this odd pattern. It # does the same at allocation time, but at least there the types match, # and it makes sense as an expression. # # Reported-by: Randy Dunlap # 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 0f1a7b3fac0583083ca19d4de47403511ced3521 # < make -s -j 10 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 10 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:19, 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); ^~~~ 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:19, 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); ^~~~~~~~~~~ Completed OK # rm -rf /kisskb/build/linus_a500_defconfig_parisc64 # Build took: 0:01:30.955905