linux/arch/csky/include/asm
Kees Cook 4452a0dfc5 csky: Add __attribute_const__ to ffs()-family implementations
While tracking down a problem where constant expressions used by
BUILD_BUG_ON() suddenly stopped working[1], we found that an added static
initializer was convincing the compiler that it couldn't track the state
of the prior statically initialized value. Tracing this down found that
ffs() was used in the initializer macro, but since it wasn't marked with
__attribute__const__, the compiler had to assume the function might
change variable states as a side-effect (which is not true for ffs(),
which provides deterministic math results).

Add missing __attribute_const__ annotations to C-SKY's implementations of
ffs(), __ffs(), fls(), and __fls() functions. These are pure mathematical
functions that always return the same result for the same input with no
side effects, making them eligible for compiler optimization.

Build tested ARCH=csky defconfig with GCC csky-linux 15.1.0.

Link: https://github.com/KSPP/linux/issues/364 [1]
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/r/20250804164417.1612371-3-kees@kernel.org
Signed-off-by: Kees Cook <kees@kernel.org>
2025-09-08 14:58:50 -07:00
..
Kbuild asm-generic: introduce text-patching.h 2024-11-07 14:25:15 -08:00
addrspace.h csky: Fixup compile error 2021-02-27 22:04:14 +08:00
asid.h csky: Fixup typos 2021-04-20 09:58:29 +08:00
atomic.h locking/atomic: make atomic*_{cmp,}xchg optional 2023-06-05 09:57:14 +02:00
barrier.h csky: atomic: Optimize cmpxchg with acquire & release 2022-04-25 13:51:42 +08:00
bitops.h csky: Add __attribute_const__ to ffs()-family implementations 2025-09-08 14:58:50 -07:00
bug.h csky: Fixup compile error 2021-02-27 22:04:14 +08:00
cache.h csky: Support icache flush without specific instructions 2020-02-21 15:43:24 +08:00
cacheflush.h csky: Fixup compile error 2021-02-27 22:04:14 +08:00
cachetype.h Introduce cpu_dcache_is_aliasing() across all architectures 2024-02-22 15:27:19 -08:00
checksum.h csky: Fixup compile error 2021-02-27 22:04:14 +08:00
clocksource.h csky: Add VDSO with GENERIC_GETTIMEOFDAY, GENERIC_TIME_VSYSCALL, HAVE_GENERIC_VDSO 2021-02-27 16:35:09 +08:00
cmpxchg.h csky: Emulate one-byte cmpxchg 2024-05-11 07:07:07 -07:00
elf.h csky: Fixup compile error 2021-02-27 22:04:14 +08:00
fixmap.h csky: Fixup compile error 2021-02-27 22:04:14 +08:00
ftrace.h function_graph: Everyone uses HAVE_FUNCTION_GRAPH_RET_ADDR_PTR, remove it 2024-06-11 11:18:24 -04:00
futex.h csky: Fixup futex SMP implementation 2021-01-12 09:52:40 +08:00
highmem.h csky: Fixup compile error 2021-02-27 22:04:14 +08:00
io.h mm/ioremap: pass pgprot_t to ioremap_prot() instead of unsigned long 2025-03-16 22:06:23 -07:00
irq_work.h arch: consolidate arch_irq_work_raise prototypes 2023-11-23 11:32:29 +01:00
irqflags.h csky: IRQ handling 2018-10-26 00:54:22 +08:00
jump_label.h work around gcc bugs with 'asm goto' with outputs 2024-02-09 15:57:48 -08:00
kprobes.h kprobes: treewide: Make it harder to refer kretprobe_trampoline directly 2021-09-30 21:24:06 -04:00
memory.h csky: Add memory layout 2.5G(user):1.5G(kernel) 2021-01-12 09:52:40 +08:00
mmu.h csky: Fixup compile error 2021-02-27 22:04:14 +08:00
mmu_context.h csky: Fixup compile error 2021-02-27 22:04:14 +08:00
page.h asm-generic updates for 6.13 2024-11-20 15:13:02 -08:00
pci.h asm-generic: Add new pci.h and use it 2022-07-22 17:34:57 -05:00
perf_event.h csky: Fixup compile error 2021-02-27 22:04:14 +08:00
pgalloc.h mm: call ctor/dtor for kernel PTEs 2025-05-11 17:48:21 -07:00
pgtable.h mm: pgtable: fix pte_swp_exclusive 2025-06-11 14:52:08 -07:00
probes.h csky: Add kprobes supported 2020-04-03 11:14:17 +08:00
processor.h csky: Remove kernel_thread declaration 2023-03-12 10:52:42 +01:00
ptrace.h csky: Fixup -Wmissing-prototypes warning 2023-08-10 23:06:32 -04:00
reg_ops.h csky: Misc headers 2018-10-26 00:54:26 +08:00
seccomp.h csky: Enable seccomp architecture tracking 2020-11-20 11:16:34 -08:00
sections.h csky: Fixup -Wmissing-prototypes warning 2023-08-10 23:06:32 -04:00
shmparam.h csky: Fixup compile error 2021-02-27 22:04:14 +08:00
smp.h csky/smp: Switch to hotplug core state synchronization 2023-05-15 13:44:58 +02:00
spinlock.h csky: Add qspinlock support 2022-07-31 05:24:42 -04:00
spinlock_types.h csky: Add qspinlock support 2022-07-31 05:24:42 -04:00
stackprotector.h stackprotector: actually use get_random_canary() 2022-11-18 02:18:10 +01:00
string.h csky: Fixup compile error 2021-02-27 22:04:14 +08:00
switch_to.h csky: Fixup compile error 2021-02-27 22:04:14 +08:00
syscall.h syscall.h: add syscall_set_arguments() 2025-05-11 17:48:15 -07:00
syscalls.h csky: Fixup compile error 2021-02-27 22:04:14 +08:00
tcm.h treewide: Convert macro and uses of __section(foo) to __section("foo") 2020-10-25 14:51:49 -07:00
thread_info.h uaccess: remove CONFIG_SET_FS 2022-02-25 09:36:06 +01:00
tlb.h csky/tlb: Remove tlb_flush() define 2022-07-21 10:50:13 -07:00
tlbflush.h csky: Fixup compile error 2021-02-27 22:04:14 +08:00
traps.h arch: add do_page_fault prototypes 2023-11-23 11:32:32 +01:00
uaccess.h uaccess: remove CONFIG_SET_FS 2022-02-25 09:36:06 +01:00
unistd.h csky: convert to generic syscall table 2024-07-10 14:23:38 +02:00
uprobes.h csky: Add uprobes support 2020-04-03 11:37:51 +08:00
vdso.h csky/vdso: Remove superfluous ifdeffery 2024-02-20 20:56:00 +01:00
vmalloc.h mm/vmalloc: Add empty <asm/vmalloc.h> headers and use them from <linux/vmalloc.h> 2019-12-10 10:12:55 +01:00