mirror of
https://github.com/torvalds/linux.git
synced 2026-05-14 17:32:42 +02:00
The printk header file includes ratelimit_types.h for its __ratelimit() based usage. It is required for the static initializer used in printk_ratelimited(). It uses a raw_spinlock_t and includes the spinlock_types.h. PREEMPT_RT substitutes spinlock_t with a rtmutex based implementation and so its spinlock_t implmentation (provided by spinlock_rt.h) includes rtmutex.h and atomic.h which leads to recursive includes where defines are missing. By including only the raw_spinlock_t defines it avoids the atomic.h related includes at this stage. An example on powerpc: | CALL scripts/atomic/check-atomics.sh |In file included from include/linux/bug.h:5, | from include/linux/page-flags.h:10, | from kernel/bounds.c:10: |arch/powerpc/include/asm/page_32.h: In function âclear_pageâ: |arch/powerpc/include/asm/bug.h:87:4: error: implicit declaration of function â=80=98__WARNâ=80=99 [-Werror=3Dimplicit-function-declaration] | 87 | __WARN(); \ | | ^~~~~~ |arch/powerpc/include/asm/page_32.h:48:2: note: in expansion of macro âWARN_ONâ=99 | 48 | WARN_ON((unsigned long)addr & (L1_CACHE_BYTES - 1)); | | ^~~~~~~ |arch/powerpc/include/asm/bug.h:58:17: error: invalid application of âsizeofâ=99 to incomplete type âstruct bug_entryâ=99 | 58 | "i" (sizeof(struct bug_entry)), \ | | ^~~~~~ |arch/powerpc/include/asm/bug.h:89:3: note: in expansion of macro âBUG_ENTRYâ=99 | 89 | BUG_ENTRY(PPC_TLNEI " %4, 0", \ | | ^~~~~~~~~ |arch/powerpc/include/asm/page_32.h:48:2: note: in expansion of macro âWARN_ONâ=99 | 48 | WARN_ON((unsigned long)addr & (L1_CACHE_BYTES - 1)); | | ^~~~~~~ |In file included from arch/powerpc/include/asm/ptrace.h:298, | from arch/powerpc/include/asm/hw_irq.h:12, | from arch/powerpc/include/asm/irqflags.h:12, | from include/linux/irqflags.h:16, | from include/asm-generic/cmpxchg-local.h:6, | from arch/powerpc/include/asm/cmpxchg.h:526, | from arch/powerpc/include/asm/atomic.h:11, | from include/linux/atomic.h:7, | from include/linux/rwbase_rt.h:6, | from include/linux/rwlock_types.h:55, | from include/linux/spinlock_types.h:74, | from include/linux/ratelimit_types.h:7, | from include/linux/printk.h:10, | from include/asm-generic/bug.h:22, | from arch/powerpc/include/asm/bug.h:109, | from include/linux/bug.h:5, | from include/linux/page-flags.h:10, | from kernel/bounds.c:10: |include/linux/thread_info.h: In function â=80=98copy_overflowâ=80=99: |include/linux/thread_info.h:210:2: error: implicit declaration of function â=80=98WARNâ=80=99 [-Werror=3Dimplicit-function-declaration] | 210 | WARN(1, "Buffer overflow detected (%d < %lu)!\n", size, count); | | ^~~~ The WARN / BUG include pulls in printk.h and then ptrace.h expects WARN (from bug.h) which is not yet complete. Even hw_irq.h has WARN_ON() statements. On POWERPC64 there are missing atomic64 defines while building 32bit VDSO: | VDSO32C arch/powerpc/kernel/vdso32/vgettimeofday.o |In file included from include/linux/atomic.h:80, | from include/linux/rwbase_rt.h:6, | from include/linux/rwlock_types.h:55, | from include/linux/spinlock_types.h:74, | from include/linux/ratelimit_types.h:7, | from include/linux/printk.h:10, | from include/linux/kernel.h:19, | from arch/powerpc/include/asm/page.h:11, | from arch/powerpc/include/asm/vdso/gettimeofday.h:5, | from include/vdso/datapage.h:137, | from lib/vdso/gettimeofday.c:5, | from <command-line>: |include/linux/atomic-arch-fallback.h: In function âarch_atomic64_incâ=99: |include/linux/atomic-arch-fallback.h:1447:2: error: implicit declaration of function âarch_atomic64_addâ; did you mean âarch_atomic_addâ? [-Werror=3Dimpl |icit-function-declaration] | 1447 | arch_atomic64_add(1, v); | | ^~~~~~~~~~~~~~~~~ | | arch_atomic_add The generic fallback is not included, atomics itself are not used. If kernel.h does not include printk.h then it comes later from the bug.h include. Allow asm/spinlock_types.h to be included from linux/spinlock_types_raw.h. Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lkml.kernel.org/r/20211129174654.668506-12-bigeasy@linutronix.de |
||
|---|---|---|
| .. | ||
| a.out.h | ||
| agp_backend.h | ||
| agp.h | ||
| asm-offsets.h | ||
| asm-prototypes.h | ||
| atomic.h | ||
| barrier.h | ||
| bitops.h | ||
| bug.h | ||
| bugs.h | ||
| cache.h | ||
| cacheflush.h | ||
| checksum.h | ||
| cmpxchg.h | ||
| compiler.h | ||
| console.h | ||
| core_apecs.h | ||
| core_cia.h | ||
| core_irongate.h | ||
| core_lca.h | ||
| core_marvel.h | ||
| core_mcpcia.h | ||
| core_polaris.h | ||
| core_t2.h | ||
| core_titan.h | ||
| core_tsunami.h | ||
| core_wildfire.h | ||
| delay.h | ||
| device.h | ||
| div64.h | ||
| dma-mapping.h | ||
| dma.h | ||
| elf.h | ||
| emergency-restart.h | ||
| err_common.h | ||
| err_ev6.h | ||
| err_ev7.h | ||
| extable.h | ||
| floppy.h | ||
| fpu.h | ||
| ftrace.h | ||
| futex.h | ||
| gct.h | ||
| hardirq.h | ||
| hw_irq.h | ||
| hwrpb.h | ||
| io_trivial.h | ||
| io.h | ||
| irq_regs.h | ||
| irq.h | ||
| irqflags.h | ||
| jensen.h | ||
| Kbuild | ||
| kdebug.h | ||
| linkage.h | ||
| local.h | ||
| machvec.h | ||
| mc146818rtc.h | ||
| mce.h | ||
| mmu_context.h | ||
| mmu.h | ||
| module.h | ||
| page.h | ||
| pal.h | ||
| param.h | ||
| parport.h | ||
| pci.h | ||
| percpu.h | ||
| perf_event.h | ||
| pgalloc.h | ||
| pgtable.h | ||
| processor.h | ||
| ptrace.h | ||
| rwonce.h | ||
| serial.h | ||
| setup.h | ||
| sfp-machine.h | ||
| shmparam.h | ||
| signal.h | ||
| smp.h | ||
| socket.h | ||
| sparsemem.h | ||
| special_insns.h | ||
| spinlock_types.h | ||
| spinlock.h | ||
| string.h | ||
| switch_to.h | ||
| syscall.h | ||
| termios.h | ||
| thread_info.h | ||
| timex.h | ||
| tlb.h | ||
| tlbflush.h | ||
| topology.h | ||
| types.h | ||
| uaccess.h | ||
| ucontext.h | ||
| unistd.h | ||
| user.h | ||
| vga.h | ||
| vmalloc.h | ||
| word-at-a-time.h | ||
| wrperfmon.h | ||
| xchg.h | ||
| xor.h | ||