Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

cleanup: Make __DEFINE_LOCK_GUARD handle commas in initializers

Initialization macros can expand to structure initializers containing
commas, which when used as a "lock" function resulted in errors such as:

>> include/linux/spinlock.h:582:56: error: too many arguments provided to function-like macro invocation
582 | DEFINE_LOCK_GUARD_1(raw_spinlock_init, raw_spinlock_t, raw_spin_lock_init(_T->lock), /* */)
| ^
include/linux/spinlock.h:113:17: note: expanded from macro 'raw_spin_lock_init'
113 | do { *(lock) = __RAW_SPIN_LOCK_UNLOCKED(lock); } while (0)
| ^
include/linux/spinlock_types_raw.h:70:19: note: expanded from macro '__RAW_SPIN_LOCK_UNLOCKED'
70 | (raw_spinlock_t) __RAW_SPIN_LOCK_INITIALIZER(lockname)
| ^
include/linux/spinlock_types_raw.h:67:34: note: expanded from macro '__RAW_SPIN_LOCK_INITIALIZER'
67 | RAW_SPIN_DEP_MAP_INIT(lockname) }
| ^
include/linux/cleanup.h:496:9: note: macro '__DEFINE_LOCK_GUARD_1' defined here
496 | #define __DEFINE_LOCK_GUARD_1(_name, _type, _lock) \
| ^
include/linux/spinlock.h:582:1: note: parentheses are required around macro argument containing braced initializer list
582 | DEFINE_LOCK_GUARD_1(raw_spinlock_init, raw_spinlock_t, raw_spin_lock_init(_T->lock), /* */)
| ^
| (
include/linux/cleanup.h:558:60: note: expanded from macro 'DEFINE_LOCK_GUARD_1'
558 | __DEFINE_UNLOCK_GUARD(_name, _type, _unlock, __VA_ARGS__) \
| ^

Make __DEFINE_LOCK_GUARD_0 and __DEFINE_LOCK_GUARD_1 variadic so that
__VA_ARGS__ captures everything.

Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Marco Elver <elver@google.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://patch.msgid.link/20260119094029.1344361-2-elver@google.com

authored by

Marco Elver and committed by
Peter Zijlstra
3b9ed303 f88a3130

+4 -4
+4 -4
include/linux/cleanup.h
··· 493 493 \ 494 494 __DEFINE_GUARD_LOCK_PTR(_name, &_T->lock) 495 495 496 - #define __DEFINE_LOCK_GUARD_1(_name, _type, _lock) \ 496 + #define __DEFINE_LOCK_GUARD_1(_name, _type, ...) \ 497 497 static __always_inline class_##_name##_t class_##_name##_constructor(_type *l) \ 498 498 __no_context_analysis \ 499 499 { \ 500 500 class_##_name##_t _t = { .lock = l }, *_T = &_t; \ 501 - _lock; \ 501 + __VA_ARGS__; \ 502 502 return _t; \ 503 503 } 504 504 505 - #define __DEFINE_LOCK_GUARD_0(_name, _lock) \ 505 + #define __DEFINE_LOCK_GUARD_0(_name, ...) \ 506 506 static __always_inline class_##_name##_t class_##_name##_constructor(void) \ 507 507 __no_context_analysis \ 508 508 { \ 509 509 class_##_name##_t _t = { .lock = (void*)1 }, \ 510 510 *_T __maybe_unused = &_t; \ 511 - _lock; \ 511 + __VA_ARGS__; \ 512 512 return _t; \ 513 513 } 514 514