All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/i915: Convert _print_param to a macro
@ 2018-10-09 17:14 Nathan Chancellor
  2018-10-09 20:59 ` Nick Desaulniers
                   ` (6 more replies)
  0 siblings, 7 replies; 15+ messages in thread
From: Nathan Chancellor @ 2018-10-09 17:14 UTC (permalink / raw)
  To: Jani Nikula, Joonas Lahtinen, Rodrigo Vivi
  Cc: intel-gfx, dri-devel, linux-kernel, Lukas Bulwahn,
	Nick Desaulniers, Nathan Chancellor

When building the kernel with Clang with defconfig and CONFIG_64BIT
disabled, vmlinux fails to link because of the BUILD_BUG in
_print_param.

ld: drivers/gpu/drm/i915/i915_params.o: in function `i915_params_dump':
i915_params.c:(.text+0x56): undefined reference to
`__compiletime_assert_191'

This function is semantically invalid unless the code is first inlined
then constant folded, which doesn't work for Clang because semantic
analysis happens before optimization/inlining. Converting this function
to a macro avoids this problem and allows Clang to properly remove the
BUILD_BUG during optimization.

The output of 'objdump -D' is identically before and after this change
for GCC regardless of if CONFIG_64BIT is set and allows Clang to link
the kernel successfully with or without CONFIG_64BIT set.

Link: https://github.com/ClangBuiltLinux/linux/issues/191
Suggested-by: Nick Desaulniers <ndesaulniers@google.com>
Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
---
 drivers/gpu/drm/i915/i915_params.c | 29 +++++++++++++----------------
 1 file changed, 13 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
index 295e981e4a39..a0f20b9b6f2d 100644
--- a/drivers/gpu/drm/i915/i915_params.c
+++ b/drivers/gpu/drm/i915/i915_params.c
@@ -174,22 +174,19 @@ i915_param_named(enable_dpcd_backlight, bool, 0600,
 i915_param_named(enable_gvt, bool, 0400,
 	"Enable support for Intel GVT-g graphics virtualization host support(default:false)");
 
-static __always_inline void _print_param(struct drm_printer *p,
-					 const char *name,
-					 const char *type,
-					 const void *x)
-{
-	if (!__builtin_strcmp(type, "bool"))
-		drm_printf(p, "i915.%s=%s\n", name, yesno(*(const bool *)x));
-	else if (!__builtin_strcmp(type, "int"))
-		drm_printf(p, "i915.%s=%d\n", name, *(const int *)x);
-	else if (!__builtin_strcmp(type, "unsigned int"))
-		drm_printf(p, "i915.%s=%u\n", name, *(const unsigned int *)x);
-	else if (!__builtin_strcmp(type, "char *"))
-		drm_printf(p, "i915.%s=%s\n", name, *(const char **)x);
-	else
-		BUILD_BUG();
-}
+#define _print_param(p, name, type, x)					       \
+do {									       \
+	if (!__builtin_strcmp(type, "bool"))				       \
+		drm_printf(p, "i915.%s=%s\n", name, yesno(*(const bool *)x));  \
+	else if (!__builtin_strcmp(type, "int"))			       \
+		drm_printf(p, "i915.%s=%d\n", name, *(const int *)x);	       \
+	else if (!__builtin_strcmp(type, "unsigned int"))		       \
+		drm_printf(p, "i915.%s=%u\n", name, *(const unsigned int *)x); \
+	else if (!__builtin_strcmp(type, "char *"))			       \
+		drm_printf(p, "i915.%s=%s\n", name, *(const char **)x);	       \
+	else								       \
+		BUILD_BUG();						       \
+} while (0)
 
 /**
  * i915_params_dump - dump i915 modparams
-- 
2.19.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2018-10-11 20:55 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-09 17:14 [PATCH] drm/i915: Convert _print_param to a macro Nathan Chancellor
2018-10-09 20:59 ` Nick Desaulniers
2018-10-10 12:01   ` Jani Nikula
2018-10-10 12:01     ` Jani Nikula
2018-10-10 20:30     ` [Intel-gfx] " Michal Wajdeczko
2018-10-10 20:41       ` Nick Desaulniers
2018-10-10 20:41         ` Nick Desaulniers
2018-10-11  6:17         ` [Intel-gfx] " Jani Nikula
2018-10-11 20:55           ` Nick Desaulniers
2018-10-10  9:34 ` ✗ Fi.CI.CHECKPATCH: warning for " Patchwork
2018-10-10  9:50 ` ✓ Fi.CI.BAT: success " Patchwork
2018-10-10 11:23 ` ✓ Fi.CI.IGT: " Patchwork
2018-10-11  6:43 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Convert _print_param to a macro (rev2) Patchwork
2018-10-11  6:59 ` ✓ Fi.CI.BAT: success " Patchwork
2018-10-11 13:47 ` ✓ Fi.CI.IGT: " Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.