Re: [PATCH 1/2] if_enabled.h: Add IF_ENABLED_OR_ELSE()and IF_ENABLED() macros
From: Paul Cercueil <paul@crapouillou.net>
Date: 2020-12-08 21:00:31
Also in:
linux-mips, lkml
Hi Randy, Le mar. 8 déc. 2020 à 9:39, Randy Dunlap [off-list ref] a écrit :
On 12/8/20 8:48 AM, Paul Cercueil wrote:quoted
Signed-off-by: Paul Cercueil [off-list ref]Hi Paul, Why not just add these 2 new macros to <linux/kconfig.h> ? Maybe you don't want to add the other 2 headers there also?
That means including <linux/compiler.h> in <linux/kconfig.h>, which
causes build failures:
LD vmlinux
SORTTAB vmlinux
SYSMAP System.map
AS arch/mips/boot/compressed/head.o
CC arch/mips/boot/compressed/decompress.o
CC arch/mips/boot/compressed/string.o
CC arch/mips/boot/compressed/dummy.o
OBJCOPY arch/mips/boot/compressed/vmlinux.bin
HOSTCC arch/mips/boot/compressed/calc_vmlinuz_load_addr
GZIP arch/mips/boot/compressed/vmlinux.bin.z
In file included from ./include/linux/kcsan-checks.h:7,
from ./include/asm-generic/rwonce.h:27,
from ./arch/mips/include/generated/asm/rwonce.h:1,
from ./include/linux/compiler.h:246,
from ././include/linux/kconfig.h:8,
from <command-line>:32:
/include/linux/compiler_attributes.h:64: warning: "__always_inline"
redefined
64 | #define __always_inline inline
__attribute__((__always_inline__))
|
In file included from ./include/linux/stddef.h:5,
from ./include/uapi/linux/posix_types.h:5,
from ./include/uapi/linux/types.h:14,
from ./include/linux/types.h:6,
from ./include/linux/kasan-checks.h:5,
from ./include/asm-generic/rwonce.h:26,
from ./arch/mips/include/generated/asm/rwonce.h:1,
from ./include/linux/compiler.h:246,
from ././include/linux/kconfig.h:8,
from <command-line>:32:
/include/uapi/linux/stddef.h:5: note: this is the location of the
previous definition
5 | #define __always_inline inline
|
In file included from ./arch/mips/include/generated/asm/rwonce.h:1,
from ./include/linux/compiler.h:246,
from ././include/linux/kconfig.h:8,
from <command-line>:32:
/include/asm-generic/rwonce.h:64:31: error: expected ‘;’ before
‘unsigned’
64 | static __no_sanitize_or_inline
| ^
| ;
65 | unsigned long __read_once_word_nocheck(const void *addr)
| ~~~~~~~~
/include/asm-generic/rwonce.h:65:15: warning: no previous prototype
for ‘__read_once_word_nocheck’ [-Wmissing-prototypes]
65 | unsigned long __read_once_word_nocheck(const void *addr)
| ^~~~~~~~~~~~~~~~~~~~~~~~
/include/asm-generic/rwonce.h:82:28: error: expected ‘;’ before
‘unsigned’
82 | static __no_kasan_or_inline
| ^
| ;
83 | unsigned long read_word_at_a_time(const void *addr)
| ~~~~~~~~
/include/asm-generic/rwonce.h:83:15: warning: no previous prototype
for ‘read_word_at_a_time’ [-Wmissing-prototypes]
83 | unsigned long read_word_at_a_time(const void *addr)
| ^~~~~~~~~~~~~~~~~~~
That's why I opted for a new header.
Cheers,
-Paul
quoted
--- include/linux/if_enabled.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 include/linux/if_enabled.h diff --git a/include/linux/if_enabled.h b/include/linux/if_enabled.h new file mode 100644 index 000000000000..8189d1402340 --- /dev/null +++ b/include/linux/if_enabled.h @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __LINUX_IF_ENABLED_H +#define __LINUX_IF_ENABLED_H + +#include <linux/build_bug.h> +#include <linux/compiler_types.h> +#include <linux/kconfig.h> + +/* + * IF_ENABLED_OR_ELSE(CONFIG_FOO, a, b) evaluates to (a) if CONFIG_FOO is set + * to 'y' or 'm', (b) otherwise. + */ +#define IF_ENABLED_OR_ELSE(option, a, b) \ + (BUILD_BUG_ON_ZERO(__same_type((a), (b))) || IS_ENABLED(option) ? (a) : (b)) + +/* + * IF_ENABLED(CONFIG_FOO, ptr) evaluates to (ptr) if CONFIG_FOO is set to 'y' + * or 'm', NULL otherwise. + */ +#define IF_ENABLED(option, ptr) IF_ENABLED_OR_ELSE(option, ptr, NULL) + +#endif /* __LINUX_IF_ENABLED_H */thanks. -- ~Randy
_______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel