# git rev-parse -q --verify 8a96efd384e6d0797a06a34503ebf21f133c74cb^{commit} 8a96efd384e6d0797a06a34503ebf21f133c74cb already have revision, skipping fetch # git checkout -q -f -B kisskb 8a96efd384e6d0797a06a34503ebf21f133c74cb # git clean -qxdf # < git log -1 # commit 8a96efd384e6d0797a06a34503ebf21f133c74cb # Author: Madhavan Srinivasan # Date: Tue Aug 27 15:46:35 2019 +0530 # # powerpc/imc: Dont create debugfs files for cpu-less nodes # # Commit <684d984038aa> ('powerpc/powernv: Add debugfs interface for # imc-mode and imc') added debugfs interface for the nest imc pmu # devices to support changing of different ucode modes. Primarily adding # this capability for debug. But when doing so, the code did not # consider the case of cpu-less nodes. So when reading the _cmd_ or # _mode_ file of a cpu-less node will create this crash. # # Faulting instruction address: 0xc0000000000d0d58 # Oops: Kernel access of bad area, sig: 11 [#1] # ... # CPU: 67 PID: 5301 Comm: cat Not tainted 5.2.0-rc6-next-20190627+ #19 # NIP: c0000000000d0d58 LR: c00000000049aa18 CTR:c0000000000d0d50 # REGS: c00020194548f9e0 TRAP: 0300 Not tainted (5.2.0-rc6-next-20190627+) # MSR: 9000000000009033 CR:28022822 XER: 00000000 # CFAR: c00000000049aa14 DAR: 000000000003fc08 DSISR:40000000 IRQMASK: 0 # ... # NIP imc_mem_get+0x8/0x20 # LR simple_attr_read+0x118/0x170 # Call Trace: # simple_attr_read+0x70/0x170 (unreliable) # debugfs_attr_read+0x6c/0xb0 # __vfs_read+0x3c/0x70 # vfs_read+0xbc/0x1a0 # ksys_read+0x7c/0x140 # system_call+0x5c/0x70 # # Patch fixes the issue with a more robust check for vbase to NULL. # # Before patch, ls output for the debugfs imc directory # # # ls /sys/kernel/debug/powerpc/imc/ # imc_cmd_0 imc_cmd_251 imc_cmd_253 imc_cmd_255 imc_mode_0 imc_mode_251 imc_mode_253 imc_mode_255 # imc_cmd_250 imc_cmd_252 imc_cmd_254 imc_cmd_8 imc_mode_250 imc_mode_252 imc_mode_254 imc_mode_8 # # After patch, ls output for the debugfs imc directory # # # ls /sys/kernel/debug/powerpc/imc/ # imc_cmd_0 imc_cmd_8 imc_mode_0 imc_mode_8 # # Actual bug here is that, we have two loops with potentially different # loop counts. That is, in imc_get_mem_addr_nest(), loop count is # obtained from the dt entries. But in case of export_imc_mode_and_cmd(), # loop was based on for_each_nid() count. Patch fixes the loop count in # latter based on the struct mem_info. Ideally it would be better to # have array size in struct imc_pmu. # # Fixes: 684d984038aa ('powerpc/powernv: Add debugfs interface for imc-mode and imc') # Reported-by: Qian Cai # Suggested-by: Michael Ellerman # Signed-off-by: Madhavan Srinivasan # Signed-off-by: Michael Ellerman # Link: https://lore.kernel.org/r/20190827101635.6942-1-maddy@linux.vnet.ibm.com # < /opt/cross/kisskb/korg/gcc-8.1.0-nolibc/hppa-linux/bin/hppa-linux-gcc --version # < /opt/cross/kisskb/korg/gcc-8.1.0-nolibc/hppa-linux/bin/hppa-linux-ld --version # < git log --format=%s --max-count=1 8a96efd384e6d0797a06a34503ebf21f133c74cb # < make -s -j 120 ARCH=parisc O=/kisskb/build/powerpc-next_parisc-defconfig_parisc CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.1.0-nolibc/hppa-linux/bin/hppa-linux- defconfig # make -s -j 120 ARCH=parisc O=/kisskb/build/powerpc-next_parisc-defconfig_parisc CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.1.0-nolibc/hppa-linux/bin/hppa-linux- /kisskb/src/arch/parisc/math-emu/fpudispatch.c: In function 'decode_0c': /kisskb/src/arch/parisc/math-emu/fpudispatch.c:312:18: warning: this statement may fall through [-Wimplicit-fallthrough=] fpregs[t+2] = fpregs[r1+2]; ~~~~~~~~~~~~^~~~~~~~~~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:313:9: note: here case 1: /* double */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:314:18: warning: this statement may fall through [-Wimplicit-fallthrough=] fpregs[t+1] = fpregs[r1+1]; ~~~~~~~~~~~~^~~~~~~~~~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:315:9: note: here case 0: /* single */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:327:18: warning: this statement may fall through [-Wimplicit-fallthrough=] fpregs[t+2] = fpregs[r1+2]; ~~~~~~~~~~~~^~~~~~~~~~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:328:9: note: here case 1: /* double */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:329:18: warning: this statement may fall through [-Wimplicit-fallthrough=] fpregs[t+1] = fpregs[r1+1]; ~~~~~~~~~~~~^~~~~~~~~~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:330:9: note: here case 0: /* single */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:343:18: warning: this statement may fall through [-Wimplicit-fallthrough=] fpregs[t+2] = fpregs[r1+2]; ~~~~~~~~~~~~^~~~~~~~~~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:344:9: note: here case 1: /* double */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:345:18: warning: this statement may fall through [-Wimplicit-fallthrough=] fpregs[t+1] = fpregs[r1+1]; ~~~~~~~~~~~~^~~~~~~~~~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:346:9: note: here case 0: /* single */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:359:18: warning: this statement may fall through [-Wimplicit-fallthrough=] fpregs[t+2] = fpregs[r1+2]; ~~~~~~~~~~~~^~~~~~~~~~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:360:9: note: here case 1: /* double */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:361:18: warning: this statement may fall through [-Wimplicit-fallthrough=] fpregs[t+1] = fpregs[r1+1]; ~~~~~~~~~~~~^~~~~~~~~~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:362:9: note: here case 0: /* single */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:305:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch (fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:319:4: note: here case 3: /* FABS */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:320:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch (fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:335:4: note: here case 6: /* FNEG */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:336:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch (fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:351:4: note: here case 7: /* FNEGABS */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:352:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch (fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:367:4: note: here case 4: /* FSQRT */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:368:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch (fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:379:4: note: here case 5: /* FRND */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:410:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch(fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:422:4: note: here case 1: /* FCNVXF */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:423:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch(fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:437:4: note: here case 2: /* FCNVFX */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:438:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch(fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:452:4: note: here case 3: /* FCNVFXT */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:453:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch(fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:467:4: note: here case 5: /* FCNVUF (PA2.0 only) */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:468:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch(fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:482:4: note: here case 6: /* FCNVFU (PA2.0 only) */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:483:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch(fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:497:4: note: here case 7: /* FCNVFUT (PA2.0 only) */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:498:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch(fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:512:4: note: here case 4: /* undefined */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:574:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch (fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:593:4: note: here case 1: /* FTEST */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:625:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch (fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:636:4: note: here case 1: /* FSUB */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:637:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch (fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:648:4: note: here case 2: /* FMPY */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:649:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch (fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:660:4: note: here case 3: /* FDIV */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:661:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch (fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:672:4: note: here case 4: /* FREM */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:300:3: warning: this statement may fall through [-Wimplicit-fallthrough=] switch (subop) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:393:2: note: here case 1: /* class 1 */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:408:3: warning: this statement may fall through [-Wimplicit-fallthrough=] switch (subop) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:516:2: note: here case 2: /* class 2 */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:521:7: warning: this statement may fall through [-Wimplicit-fallthrough=] if (fpu_type_flags & PA2_0_FPU_FLAG) { ^ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:614:2: note: here case 3: /* class 3 */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c: In function 'decode_0e': /kisskb/src/arch/parisc/math-emu/fpudispatch.c:738:18: warning: this statement may fall through [-Wimplicit-fallthrough=] fpregs[t+1] = fpregs[r1+1]; ~~~~~~~~~~~~^~~~~~~~~~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:739:9: note: here case 0: /* single */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:749:18: warning: this statement may fall through [-Wimplicit-fallthrough=] fpregs[t+1] = fpregs[r1+1]; ~~~~~~~~~~~~^~~~~~~~~~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:750:9: note: here case 0: /* single */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:760:18: warning: this statement may fall through [-Wimplicit-fallthrough=] fpregs[t+1] = fpregs[r1+1]; ~~~~~~~~~~~~^~~~~~~~~~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:761:9: note: here case 0: /* single */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:771:18: warning: this statement may fall through [-Wimplicit-fallthrough=] fpregs[t+1] = fpregs[r1+1]; ~~~~~~~~~~~~^~~~~~~~~~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:772:9: note: here case 0: /* single */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:733:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch (fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:743:4: note: here case 3: /* FABS */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:744:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch (fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:754:4: note: here case 6: /* FNEG */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:755:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch (fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:765:4: note: here case 7: /* FNEGABS */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:766:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch (fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:776:4: note: here case 4: /* FSQRT */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:777:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch (fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:788:4: note: here case 5: /* FRMD */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:817:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch(fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:829:4: note: here case 1: /* FCNVXF */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:830:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch(fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:844:4: note: here case 2: /* FCNVFX */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:845:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch(fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:859:4: note: here case 3: /* FCNVFXT */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:860:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch(fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:874:4: note: here case 5: /* FCNVUF (PA2.0 only) */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:875:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch(fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:889:4: note: here case 6: /* FCNVFU (PA2.0 only) */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:890:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch(fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:904:4: note: here case 7: /* FCNVFUT (PA2.0 only) */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:905:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch(fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:919:4: note: here case 4: /* undefined */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:1021:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch (fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:1029:4: note: here case 1: /* FSUB */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:1030:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch (fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:1038:4: note: here case 2: /* FMPY or XMPYU */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:1042:8: warning: this statement may fall through [-Wimplicit-fallthrough=] if (extru(ir,fpxpos,1)) { ^ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:1074:4: note: here case 3: /* FDIV */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:1075:5: warning: this statement may fall through [-Wimplicit-fallthrough=] switch (fmt) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:1083:4: note: here case 4: /* FREM */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:728:3: warning: this statement may fall through [-Wimplicit-fallthrough=] switch (subop) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:802:2: note: here case 1: /* class 1 */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:815:3: warning: this statement may fall through [-Wimplicit-fallthrough=] switch (subop) { ^~~~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:922:2: note: here case 2: /* class 2 */ ^~~~ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:938:7: warning: this statement may fall through [-Wimplicit-fallthrough=] if (fpu_type_flags & PA2_0_FPU_FLAG) { ^ /kisskb/src/arch/parisc/math-emu/fpudispatch.c:997:2: note: here case 3: /* class 3 */ ^~~~ /kisskb/src/arch/parisc/mm/fault.c: In function 'parisc_acctyp': /kisskb/src/arch/parisc/mm/fault.c:67:6: warning: this statement may fall through [-Wimplicit-fallthrough=] if (bit22set(inst)) ^ /kisskb/src/arch/parisc/mm/fault.c:70:2: note: here case 0x0: /* indexed/memory management */ ^~~~ /kisskb/src/drivers/scsi/ncr53c8xx.c: In function 'ncr_int_sir': /kisskb/src/drivers/scsi/ncr53c8xx.c:6713:6: warning: this statement may fall through [-Wimplicit-fallthrough=] if (tp->lp[0]) { ^ /kisskb/src/drivers/scsi/ncr53c8xx.c:6717:2: note: here case SIR_RESEL_BAD_TARGET: /* Will send a TARGET RESET message */ ^~~~ /kisskb/src/drivers/scsi/ncr53c8xx.c: In function 'ncr_prepare_setting': /kisskb/src/drivers/scsi/ncr53c8xx.c:3908:7: warning: this statement may fall through [-Wimplicit-fallthrough=] if (np->sv_scntl3) { ^ /kisskb/src/drivers/scsi/ncr53c8xx.c:3913:3: note: here case 3: /* SYMBIOS controllers report HVD through GPIO3 */ ^~~~ /kisskb/src/drivers/scsi/ncr53c8xx.c:3914:7: warning: this statement may fall through [-Wimplicit-fallthrough=] if (INB(nc_gpreg) & 0x08) ^ /kisskb/src/drivers/scsi/ncr53c8xx.c:3916:3: note: here case 2: /* Set HVD unconditionally */ ^~~~ /kisskb/src/drivers/scsi/ncr53c8xx.c:3917:18: warning: this statement may fall through [-Wimplicit-fallthrough=] np->scsi_mode = SMODE_HVD; /kisskb/src/drivers/scsi/ncr53c8xx.c:3918:3: note: here case 1: /* Trust previous settings for HVD */ ^~~~ Completed OK # rm -rf /kisskb/build/powerpc-next_parisc-defconfig_parisc # Build took: 0:00:37.867832