Re: [PATCH 1/2] if_enabled.h: Add IF_ENABLED_OR_ELSE() and IF_ENABLED() macros

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Randy,

Le mar. 8 déc. 2020 à 9:39, Randy Dunlap <rdunlap@xxxxxxxxxxxxx> a écrit :
On 12/8/20 8:48 AM, Paul Cercueil wrote:

 Signed-off-by: Paul Cercueil <paul@xxxxxxxxxxxxxxx>

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

 ---
  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







[Index of Archives]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux