# git rev-parse -q --verify 3c53776e29f81719efcf8f7a6e30cdf753bee94d^{commit} 3c53776e29f81719efcf8f7a6e30cdf753bee94d already have revision, skipping fetch # git checkout -q -f -B kisskb 3c53776e29f81719efcf8f7a6e30cdf753bee94d # git clean -qxdf # < git log -1 # commit 3c53776e29f81719efcf8f7a6e30cdf753bee94d # Author: Linus Torvalds # Date: Mon Jan 8 11:51:04 2018 -0800 # # Mark HI and TASKLET softirq synchronous # # Way back in 4.9, we committed 4cd13c21b207 ("softirq: Let ksoftirqd do # its job"), and ever since we've had small nagging issues with it. For # example, we've had: # # 1ff688209e2e ("watchdog: core: make sure the watchdog_worker is not deferred") # 8d5755b3f77b ("watchdog: softdog: fire watchdog even if softirqs do not get to run") # 217f69743681 ("net: busy-poll: allow preemption in sk_busy_loop()") # # all of which worked around some of the effects of that commit. # # The DVB people have also complained that the commit causes excessive USB # URB latencies, which seems to be due to the USB code using tasklets to # schedule USB traffic. This seems to be an issue mainly when already # living on the edge, but waiting for ksoftirqd to handle it really does # seem to cause excessive latencies. # # Now Hanna Hawa reports that this issue isn't just limited to USB URB and # DVB, but also causes timeout problems for the Marvell SoC team: # # "I'm facing kernel panic issue while running raid 5 on sata disks # connected to Macchiatobin (Marvell community board with Armada-8040 # SoC with 4 ARMv8 cores of CA72) Raid 5 built with Marvell DMA engine # and async_tx mechanism (ASYNC_TX_DMA [=y]); the DMA driver (mv_xor_v2) # uses a tasklet to clean the done descriptors from the queue" # # The latency problem causes a panic: # # mv_xor_v2 f0400000.xor: dma_sync_wait: timeout! # Kernel panic - not syncing: async_tx_quiesce: DMA error waiting for transaction # # We've discussed simply just reverting the original commit entirely, and # also much more involved solutions (with per-softirq threads etc). This # patch is intentionally stupid and fairly limited, because the issue # still remains, and the other solutions either got sidetracked or had # other issues. # # We should probably also consider the timer softirqs to be synchronous # and not be delayed to ksoftirqd (since they were the issue with the # earlier watchdog problems), but that should be done as a separate patch. # This does only the tasklet cases. # # Reported-and-tested-by: Hanna Hawa # Reported-and-tested-by: Josef Griebichler # Reported-by: Mauro Carvalho Chehab # Cc: Alan Stern # Cc: Greg Kroah-Hartman # Cc: Eric Dumazet # Cc: Ingo Molnar # Signed-off-by: Linus Torvalds # < /opt/cross/kisskb/gcc-5.3.0-nolibc/powerpc64-linux/bin/powerpc64-linux-gcc --version # < git log --format=%s --max-count=1 3c53776e29f81719efcf8f7a6e30cdf753bee94d # < make -s -j 10 ARCH=powerpc O=/kisskb/build/linus-rand_powerpc-randconfig_powerpc-5.3 CROSS_COMPILE=/opt/cross/kisskb/gcc-5.3.0-nolibc/powerpc64-linux/bin/powerpc64-linux- randconfig KCONFIG_SEED=0xE9A4F876 # Added to kconfig CONFIG_STANDALONE=y # Added to kconfig CONFIG_BUILD_DOCSRC=n # Added to kconfig CONFIG_MODULE_SIG=n # Added to kconfig CONFIG_CPU_BIG_ENDIAN=y # Added to kconfig CONFIG_PPC64=y # Added to kconfig CONFIG_PPC_DISABLE_WERROR=y # Added to kconfig CONFIG_SECTION_MISMATCH_WARN_ONLY=y # Added to kconfig CONFIG_PREVENT_FIRMWARE_BUILD=y # Added to kconfig CONFIG_CC_STACKPROTECTOR_STRONG=n # Added to kconfig CONFIG_GCC_PLUGINS=n # Added to kconfig CONFIG_LD_HEAD_STUB_CATCH=y # Added to kconfig # yes \n | make -s -j 10 ARCH=powerpc O=/kisskb/build/linus-rand_powerpc-randconfig_powerpc-5.3 CROSS_COMPILE=/opt/cross/kisskb/gcc-5.3.0-nolibc/powerpc64-linux/bin/powerpc64-linux- oldconfig yes: standard output: Broken pipe yes: write error # make -s -j 10 ARCH=powerpc O=/kisskb/build/linus-rand_powerpc-randconfig_powerpc-5.3 CROSS_COMPILE=/opt/cross/kisskb/gcc-5.3.0-nolibc/powerpc64-linux/bin/powerpc64-linux- In file included from /kisskb/src/arch/powerpc/include/asm/mmu.h:338:0, from /kisskb/src/arch/powerpc/include/asm/paca.h:22, from /kisskb/src/arch/powerpc/include/asm/hw_irq.h:64, from /kisskb/src/arch/powerpc/include/asm/irqflags.h:12, from /kisskb/src/include/linux/irqflags.h:16, from /kisskb/src/include/linux/spinlock.h:54, from /kisskb/src/include/linux/wait.h:9, from /kisskb/src/include/linux/wait_bit.h:8, from /kisskb/src/include/linux/fs.h:6, from /kisskb/src/scripts/gdb/linux/constants.py.in:15: /kisskb/src/arch/powerpc/include/asm/mmu-book3e.h:275:2: error: #error Unsupported page size #error Unsupported page size ^ In file included from /kisskb/src/arch/powerpc/include/asm/mmu.h:338:0, from /kisskb/src/arch/powerpc/include/asm/paca.h:22, from /kisskb/src/arch/powerpc/include/asm/hw_irq.h:64, from /kisskb/src/arch/powerpc/include/asm/irqflags.h:12, from /kisskb/src/include/linux/irqflags.h:16, from /kisskb/src/include/linux/spinlock.h:54, from /kisskb/src/include/linux/seqlock.h:36, from /kisskb/src/include/linux/time.h:6, from /kisskb/src/include/linux/stat.h:19, from /kisskb/src/include/linux/compat.h:12, from /kisskb/src/arch/powerpc/kernel/asm-offsets.c:16: /kisskb/src/arch/powerpc/include/asm/mmu-book3e.h:275:2: error: #error Unsupported page size #error Unsupported page size ^ /kisskb/src/scripts/gdb/linux/Makefile:19: recipe for target 'scripts/gdb/linux/constants.py' failed make[3]: *** [scripts/gdb/linux/constants.py] Error 1 /kisskb/src/./Kbuild:81: recipe for target 'build_constants_py' failed make[2]: *** [build_constants_py] Error 2 make[2]: *** Waiting for unfinished jobs.... In file included from /kisskb/src/arch/powerpc/include/asm/nohash/pgtable.h:6:0, from /kisskb/src/arch/powerpc/include/asm/pgtable.h:20, from /kisskb/src/include/linux/memremap.h:7, from /kisskb/src/include/linux/mm.h:27, from /kisskb/src/include/linux/mman.h:5, from /kisskb/src/arch/powerpc/kernel/asm-offsets.c:23: /kisskb/src/arch/powerpc/include/asm/nohash/64/pgtable.h:13:2: error: #error "Page size not supported" #error "Page size not supported" ^ In file included from /kisskb/src/arch/powerpc/include/asm/nohash/pgtable.h:6:0, from /kisskb/src/arch/powerpc/include/asm/pgtable.h:20, from /kisskb/src/include/linux/memremap.h:7, from /kisskb/src/include/linux/mm.h:27, from /kisskb/src/include/linux/mman.h:5, from /kisskb/src/arch/powerpc/kernel/asm-offsets.c:23: /kisskb/src/arch/powerpc/include/asm/nohash/64/pgtable.h:121:28: error: unknown type name 'pud_t' static inline void pud_set(pud_t *pudp, unsigned long val) ^ /kisskb/src/arch/powerpc/include/asm/nohash/64/pgtable.h:126:30: error: unknown type name 'pud_t' static inline void pud_clear(pud_t *pudp) ^ /kisskb/src/arch/powerpc/include/asm/nohash/64/pgtable.h:137:30: error: unknown type name 'pud_t' extern struct page *pud_page(pud_t pud); ^ /kisskb/src/arch/powerpc/include/asm/nohash/64/pgtable.h:139:29: error: unknown type name 'pud_t' static inline pte_t pud_pte(pud_t pud) ^ /kisskb/src/arch/powerpc/include/asm/nohash/64/pgtable.h:144:15: error: unknown type name 'pud_t' static inline pud_t pte_pud(pte_t pte) ^ /kisskb/src/arch/powerpc/include/asm/nohash/64/pgtable.h: In function 'pte_pud': /kisskb/src/arch/powerpc/include/asm/nohash/64/pgtable.h:146:9: error: implicit declaration of function '__pud' [-Werror=implicit-function-declaration] return __pud(pte_val(pte)); ^ In file included from /kisskb/src/arch/powerpc/include/asm/pgtable.h:51:0, from /kisskb/src/include/linux/memremap.h:7, from /kisskb/src/include/linux/mm.h:27, from /kisskb/src/include/linux/mman.h:5, from /kisskb/src/arch/powerpc/kernel/asm-offsets.c:23: /kisskb/src/include/asm-generic/pgtable.h: At top level: /kisskb/src/include/asm-generic/pgtable.h:16:2: error: #error CONFIG_PGTABLE_LEVELS is not consistent with __PAGETABLE_{P4D,PUD,PMD}_FOLDED #error CONFIG_PGTABLE_LEVELS is not consistent with __PAGETABLE_{P4D,PUD,PMD}_FOLDED ^ /kisskb/src/include/asm-generic/pgtable.h:52:29: error: unknown type name 'pud_t' unsigned long address, pud_t *pudp, ^ /kisskb/src/include/asm-generic/pgtable.h:53:6: error: unknown type name 'pud_t' pud_t entry, int dirty) ^ /kisskb/src/include/asm-generic/pgtable.h:215:8: error: unknown type name 'pud_t' extern pud_t pudp_huge_clear_flush(struct vm_area_struct *vma, ^ /kisskb/src/include/asm-generic/pgtable.h:217:10: error: unknown type name 'pud_t' pud_t *pudp); ^ /kisskb/src/include/asm-generic/pgtable.h:280:34: error: unknown type name 'pud_t' unsigned long address, pud_t *pudp) ^ /kisskb/src/include/asm-generic/pgtable.h:395:28: error: unknown type name 'pud_t' static inline int pud_same(pud_t pud_a, pud_t pud_b) ^ /kisskb/src/include/asm-generic/pgtable.h:395:41: error: unknown type name 'pud_t' static inline int pud_same(pud_t pud_a, pud_t pud_b) ^ /kisskb/src/include/asm-generic/pgtable.h:524:20: error: unknown type name 'pud_t' void pud_clear_bad(pud_t *); ^ /kisskb/src/include/asm-generic/pgtable.h:549:41: error: unknown type name 'pud_t' static inline int pud_none_or_clear_bad(pud_t *pud) ^ /kisskb/src/include/asm-generic/pgtable.h:871:34: error: unknown type name 'pud_t' static inline int pud_trans_huge(pud_t pud) ^ /kisskb/src/include/asm-generic/pgtable.h:1029:32: error: unknown type name 'pud_t' static inline int pud_set_huge(pud_t *pud, phys_addr_t addr, pgprot_t prot) ^ /kisskb/src/include/asm-generic/pgtable.h:1041:34: error: unknown type name 'pud_t' static inline int pud_clear_huge(pud_t *pud) ^ /kisskb/src/include/asm-generic/pgtable.h:1049:37: error: unknown type name 'pud_t' static inline int pud_free_pmd_page(pud_t *pud) ^ In file included from /kisskb/src/include/linux/mman.h:5:0, from /kisskb/src/arch/powerpc/kernel/asm-offsets.c:23: /kisskb/src/include/linux/mm.h:349:2: error: unknown type name 'pud_t' pud_t *pud; /* Pointer to pud entry matching ^ /kisskb/src/include/linux/mm.h:464:30: error: unknown type name 'pud_t' static inline int pud_devmap(pud_t pud) ^ In file included from /kisskb/src/include/linux/mm.h:479:0, from /kisskb/src/include/linux/mman.h:5, from /kisskb/src/arch/powerpc/kernel/asm-offsets.c:23: /kisskb/src/include/linux/huge_mm.h:15:5: error: unknown type name 'pud_t' pud_t *dst_pud, pud_t *src_pud, unsigned long addr, ^ /kisskb/src/include/linux/huge_mm.h:15:21: error: unknown type name 'pud_t' pud_t *dst_pud, pud_t *src_pud, unsigned long addr, ^ /kisskb/src/include/linux/huge_mm.h:21:64: error: unknown type name 'pud_t' static inline void huge_pud_set_accessed(struct vm_fault *vmf, pud_t orig_pud) ^ /kisskb/src/include/linux/huge_mm.h:39:4: error: unknown type name 'pud_t' pud_t *pud, unsigned long addr); ^ /kisskb/src/include/linux/huge_mm.h:52:4: error: unknown type name 'pud_t' pud_t *pud, pfn_t pfn, bool write); ^ /kisskb/src/include/linux/huge_mm.h:318:47: error: unknown type name 'pud_t' static inline spinlock_t *pud_trans_huge_lock(pud_t *pud, ^ /kisskb/src/include/linux/huge_mm.h:334:37: error: unknown type name 'pud_t' static inline bool is_huge_zero_pud(pud_t pud) ^ /kisskb/src/include/linux/huge_mm.h:351:23: error: unknown type name 'pud_t' unsigned long addr, pud_t *pud, int flags) ^ In file included from /kisskb/src/include/linux/mman.h:5:0, from /kisskb/src/arch/powerpc/kernel/asm-offsets.c:23: /kisskb/src/include/linux/mm.h:1351:19: error: unknown type name 'pud_t' int (*pud_entry)(pud_t *pud, unsigned long addr, ^ /kisskb/src/include/linux/mm.h: In function 'mm_inc_nr_puds': /kisskb/src/include/linux/mm.h:1716:40: error: 'pud_t' undeclared (first use in this function) atomic_long_add(PTRS_PER_PUD * sizeof(pud_t), &mm->pgtables_bytes); ^ /kisskb/src/include/linux/mm.h:1716:40: note: each undeclared identifier is reported only once for each function it appears in /kisskb/src/include/linux/mm.h: In function 'mm_dec_nr_puds': /kisskb/src/include/linux/mm.h:1721:40: error: 'pud_t' undeclared (first use in this function) atomic_long_sub(PTRS_PER_PUD * sizeof(pud_t), &mm->pgtables_bytes); ^ /kisskb/src/include/linux/mm.h: At top level: /kisskb/src/include/linux/mm.h:1736:39: error: unknown type name 'pud_t' int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address); ^ /kisskb/src/include/linux/mm.h:1806:54: error: unknown type name 'pud_t' static inline pmd_t *pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address) ^ /kisskb/src/include/linux/mm.h:1992:61: error: unknown type name 'pud_t' static inline spinlock_t *pud_lockptr(struct mm_struct *mm, pud_t *pud) ^ /kisskb/src/include/linux/mm.h:1997:58: error: unknown type name 'pud_t' static inline spinlock_t *pud_lock(struct mm_struct *mm, pud_t *pud) ^ In file included from /kisskb/src/include/linux/mman.h:5:0, from /kisskb/src/arch/powerpc/kernel/asm-offsets.c:23: /kisskb/src/include/linux/mm.h:2659:1: error: unknown type name 'pud_t' pud_t *vmemmap_pud_populate(p4d_t *p4d, unsigned long addr, int node); ^ /kisskb/src/include/linux/mm.h:2660:29: error: unknown type name 'pud_t' pmd_t *vmemmap_pmd_populate(pud_t *pud, unsigned long addr, int node); ^ cc1: some warnings being treated as errors /kisskb/src/./Kbuild:56: recipe for target 'arch/powerpc/kernel/asm-offsets.s' failed make[2]: *** [arch/powerpc/kernel/asm-offsets.s] Error 1 /kisskb/src/Makefile:1081: recipe for target 'prepare0' failed make[1]: *** [prepare0] Error 2 make[1]: *** Waiting for unfinished jobs.... Makefile:146: recipe for target 'sub-make' failed make: *** [sub-make] Error 2 Command 'make -s -j 10 ARCH=powerpc O=/kisskb/build/linus-rand_powerpc-randconfig_powerpc-5.3 CROSS_COMPILE=/opt/cross/kisskb/gcc-5.3.0-nolibc/powerpc64-linux/bin/powerpc64-linux- ' returned non-zero exit status 2 # rm -rf /kisskb/build/linus-rand_powerpc-randconfig_powerpc-5.3 # Build took: 0:00:08.293085