linux/kconfig.h: replace IF_ENABLED() with PTR_IF() in <linux/kernel.h>
authorMasahiro Yamada <masahiroy@kernel.org>
Wed, 5 May 2021 17:45:15 +0000 (02:45 +0900)
committerMasahiro Yamada <masahiroy@kernel.org>
Sat, 8 May 2021 15:29:45 +0000 (00:29 +0900)
<linux/kconfig.h> is included from all the kernel-space source files,
including C, assembly, linker scripts. It is intended to contain a
minimal set of macros to evaluate CONFIG options.

IF_ENABLED() is an intruder here because (x ? y : z) is C code, which
should not be included from assembly files or linker scripts.

Also, <linux/kconfig.h> is no longer self-contained because NULL is
defined in <linux/stddef.h>.

Move IF_ENABLED() out to <linux/kernel.h> as PTR_IF(). PTF_IF()
takes the general boolean expression instead of a CONFIG option
so that it fits better in <linux/kernel.h>.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
drivers/pinctrl/pinctrl-ingenic.c
include/linux/kconfig.h
include/linux/kernel.h

index 651a36b9dcc03f1089c8494708c55fd257084205..983ba9865f772482f781aa6063716060b314c19b 100644 (file)
@@ -11,6 +11,7 @@
 #include <linux/gpio/driver.h>
 #include <linux/interrupt.h>
 #include <linux/io.h>
+#include <linux/kernel.h>
 #include <linux/of_device.h>
 #include <linux/of_irq.h>
 #include <linux/of_platform.h>
@@ -3854,6 +3855,8 @@ static int __init ingenic_pinctrl_probe(struct platform_device *pdev)
        return 0;
 }
 
+#define IF_ENABLED(cfg, ptr)   PTR_IF(IS_ENABLED(cfg), (ptr))
+
 static const struct of_device_id ingenic_pinctrl_of_match[] = {
        {
                .compatible = "ingenic,jz4730-pinctrl",
index 24a59cb0696359c45c46489fd7d791ea1c37b7e5..cc8fa109cfa3e4ad00d2228de76864095652c94b 100644 (file)
  */
 #define IS_ENABLED(option) __or(IS_BUILTIN(option), IS_MODULE(option))
 
-/*
- * IF_ENABLED(CONFIG_FOO, ptr) evaluates to (ptr) if CONFIG_FOO is set to 'y'
- * or 'm', NULL otherwise.
- */
-#define IF_ENABLED(option, ptr) (IS_ENABLED(option) ? (ptr) : NULL)
-
 #endif /* __LINUX_KCONFIG_H */
index 5b7ed6dc99accf89059190f01f73adbfa13287ca..2f9d15410c933617d93fc144675de4df17ff955c 100644 (file)
@@ -48,6 +48,8 @@
  */
 #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
 
+#define PTR_IF(cond, ptr)      ((cond) ? (ptr) : NULL)
+
 #define u64_to_user_ptr(x) (           \
 {                                      \
        typecheck(u64, (x));            \