From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH] drm/i915: Convert _print_param to a macro Date: Wed, 10 Oct 2018 15:01:40 +0300 Message-ID: <87woqqm2mz.fsf@intel.com> References: <20181009171401.14980-1-natechancellor@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Nick Desaulniers , Nathan Chancellor Cc: intel-gfx@lists.freedesktop.org, LKML , dri-devel@lists.freedesktop.org, rodrigo.vivi@intel.com, lukas.bulwahn@gmail.com List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCAwOSBPY3QgMjAxOCwgTmljayBEZXNhdWxuaWVycyA8bmRlc2F1bG5pZXJzQGdvb2ds ZS5jb20+IHdyb3RlOgo+IE9uIFR1ZSwgT2N0IDksIDIwMTggYXQgMTA6MTQgQU0gTmF0aGFuIENo YW5jZWxsb3IKPiA8bmF0ZWNoYW5jZWxsb3JAZ21haWwuY29tPiB3cm90ZToKPj4KPj4gV2hlbiBi dWlsZGluZyB0aGUga2VybmVsIHdpdGggQ2xhbmcgd2l0aCBkZWZjb25maWcgYW5kIENPTkZJR182 NEJJVAo+PiBkaXNhYmxlZCwgdm1saW51eCBmYWlscyB0byBsaW5rIGJlY2F1c2Ugb2YgdGhlIEJV SUxEX0JVRyBpbgo+PiBfcHJpbnRfcGFyYW0uCj4+Cj4+IGxkOiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3BhcmFtcy5vOiBpbiBmdW5jdGlvbiBgaTkxNV9wYXJhbXNfZHVtcCc6Cj4+IGk5MTVf cGFyYW1zLmM6KC50ZXh0KzB4NTYpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvCj4+IGBfX2NvbXBp bGV0aW1lX2Fzc2VydF8xOTEnCj4+Cj4+IFRoaXMgZnVuY3Rpb24gaXMgc2VtYW50aWNhbGx5IGlu dmFsaWQgdW5sZXNzIHRoZSBjb2RlIGlzIGZpcnN0IGlubGluZWQKPj4gdGhlbiBjb25zdGFudCBm b2xkZWQsIHdoaWNoIGRvZXNuJ3Qgd29yayBmb3IgQ2xhbmcgYmVjYXVzZSBzZW1hbnRpYwo+PiBh bmFseXNpcyBoYXBwZW5zIGJlZm9yZSBvcHRpbWl6YXRpb24vaW5saW5pbmcuIENvbnZlcnRpbmcg dGhpcyBmdW5jdGlvbgo+PiB0byBhIG1hY3JvIGF2b2lkcyB0aGlzIHByb2JsZW0gYW5kIGFsbG93 cyBDbGFuZyB0byBwcm9wZXJseSByZW1vdmUgdGhlCj4+IEJVSUxEX0JVRyBkdXJpbmcgb3B0aW1p emF0aW9uLgo+Cj4gVGhhbmtzIE5hdGhhbiBmb3IgdGhlIHBhdGNoLiAgVG8gcHJvdmlkZSBtb3Jl IGNvbnRleHQsIENsYW5nIGRvZXMKPiBzZW1hbnRpYyBhbmFseXNpcyBiZWZvcmUgb3B0aW1pemF0 aW9uLCB3aGVyZSBhcyBHQ0MgZG9lcyB0aGVzZQo+IHRvZ2V0aGVyIChJSVVDKS4gIFNvIHRoZSBh Ym92ZSBsaW5rIGVycm9yIGlzIGZyb20gdGhlIG5ha2VkCj4gQlVJTERfQlVHKCkuICBDbGFuZyBj YW4ndCBldmFsdWF0ZSB0aGUgX19idWlsdGluX3N0cmNtcCdzIHN0YXRpY2FsbHkKPiB1bnRpbCBp bmxpbmluZyBoYXMgb2NjdXJyZWQsIGJ1dCB0aGF0IG9wdGltaXphdGlvbiBoYXBwZW5zIGFmdGVy Cj4gc2VtYW50aWMgYW5hbHlzaXMuICBUbyBkbyB0aGUgaW5saW5pbmcgYmVmb3JlIHNlbWFudGlj IGFuYWx5c2lzLCB3ZQo+IE1VU1QgbGV2ZXJhZ2UgdGhlIHByZXByb2Nlc3Nvciwgd2hpY2ggcnVu cyBiZWZvcmUgdGhlIGNvbXBpbGVyIHN0YXJ0cwo+IGRvaW5nIHNlbWFudGljIGFuYWx5c2lzLiAg SSBzdXNwZWN0IHRoaXMgY29kZSBpcyBub3QgdmFsaWQgZm9yIEdDQwo+IHVubGVzcyBvcHRpbWl6 YXRpb25zIGFyZSBlbmFibGVkICh0aGUga2VybmVsIG9ubHkgZG9lcyBjb21waWxlIHdpdGgKPiBv cHRpbWl6YXRpb25zIHR1cm5lZCBvbikuICBUaGlzIGNoYW5nZSBhbGxvd3MgdXMgdG8gYnVpbGQg dGhpcwo+IHRyYW5zbGF0aW9uIHVuaXQgd2l0aCBDbGFuZy4KPgo+IEFja2VkLWJ5OiBOaWNrIERl c2F1bG5pZXJzIDxuZGVzYXVsbmllcnNAZ29vZ2xlLmNvbT4KPiAoTm90ZTogdGhpcyBpcyB0aGUg Y2hhbmdlIEkgc3VnZ2VzdGVkLCBzbyBub3Qgc3VyZSB3aGV0aGVyIEFja2VkLWJ5IG9yCj4gUmV2 aWV3ZWQtYnkgaXMgbW9yZSBhcHByb3ByaWF0ZSkuCgoqU2FkIHRyb21ib25lKgoKSSdkIHJhdGhl ciBzZWUgdXMgY29udmVydGluZyBtb3JlIG1hY3JvcyB0byBzdGF0aWMgaW5saW5lcyB0aGFuIHRo ZQpvdGhlciB3YXkgcm91bmQuCgpJJ2xsIGxldCBvdGhlcnMgY2hpbWUgaW4gaWYgdGhleSBoYXZl IGFueSBiZXR0ZXIgaWRlYXMsIG90aGVyd2lzZSBJJ2xsCmFwcGx5IHRoaXMgb25lLgoKQlIsCkph bmkuCgo+Cj4+Cj4+IFRoZSBvdXRwdXQgb2YgJ29iamR1bXAgLUQnIGlzIGlkZW50aWNhbGx5IGJl Zm9yZSBhbmQgYWZ0ZXIgdGhpcyBjaGFuZ2UKPj4gZm9yIEdDQyByZWdhcmRsZXNzIG9mIGlmIENP TkZJR182NEJJVCBpcyBzZXQgYW5kIGFsbG93cyBDbGFuZyB0byBsaW5rCj4+IHRoZSBrZXJuZWwg c3VjY2Vzc2Z1bGx5IHdpdGggb3Igd2l0aG91dCBDT05GSUdfNjRCSVQgc2V0Lgo+Pgo+PiBMaW5r OiBodHRwczovL2dpdGh1Yi5jb20vQ2xhbmdCdWlsdExpbnV4L2xpbnV4L2lzc3Vlcy8xOTEKPj4g U3VnZ2VzdGVkLWJ5OiBOaWNrIERlc2F1bG5pZXJzIDxuZGVzYXVsbmllcnNAZ29vZ2xlLmNvbT4K Pj4gU2lnbmVkLW9mZi1ieTogTmF0aGFuIENoYW5jZWxsb3IgPG5hdGVjaGFuY2VsbG9yQGdtYWls LmNvbT4KPj4gLS0tCj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BhcmFtcy5jIHwgMjkg KysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0KPj4gIDEgZmlsZSBjaGFuZ2VkLCAxMyBpbnNl cnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcGFyYW1zLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BhcmFt cy5jCj4+IGluZGV4IDI5NWU5ODFlNGEzOS4uYTBmMjBiOWI2ZjJkIDEwMDY0NAo+PiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BhcmFtcy5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcGFyYW1zLmMKPj4gQEAgLTE3NCwyMiArMTc0LDE5IEBAIGk5MTVfcGFyYW1f bmFtZWQoZW5hYmxlX2RwY2RfYmFja2xpZ2h0LCBib29sLCAwNjAwLAo+PiAgaTkxNV9wYXJhbV9u YW1lZChlbmFibGVfZ3Z0LCBib29sLCAwNDAwLAo+PiAgICAgICAgICJFbmFibGUgc3VwcG9ydCBm b3IgSW50ZWwgR1ZULWcgZ3JhcGhpY3MgdmlydHVhbGl6YXRpb24gaG9zdCBzdXBwb3J0KGRlZmF1 bHQ6ZmFsc2UpIik7Cj4+Cj4+IC1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX3ByaW50X3Bh cmFtKHN0cnVjdCBkcm1fcHJpbnRlciAqcCwKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAo+PiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnR5cGUsCj4+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqeCkKPj4gLXsKPj4gLSAgICAgICBp ZiAoIV9fYnVpbHRpbl9zdHJjbXAodHlwZSwgImJvb2wiKSkKPj4gLSAgICAgICAgICAgICAgIGRy bV9wcmludGYocCwgImk5MTUuJXM9JXNcbiIsIG5hbWUsIHllc25vKCooY29uc3QgYm9vbCAqKXgp KTsKPj4gLSAgICAgICBlbHNlIGlmICghX19idWlsdGluX3N0cmNtcCh0eXBlLCAiaW50IikpCj4+ IC0gICAgICAgICAgICAgICBkcm1fcHJpbnRmKHAsICJpOTE1LiVzPSVkXG4iLCBuYW1lLCAqKGNv bnN0IGludCAqKXgpOwo+PiAtICAgICAgIGVsc2UgaWYgKCFfX2J1aWx0aW5fc3RyY21wKHR5cGUs ICJ1bnNpZ25lZCBpbnQiKSkKPj4gLSAgICAgICAgICAgICAgIGRybV9wcmludGYocCwgImk5MTUu JXM9JXVcbiIsIG5hbWUsICooY29uc3QgdW5zaWduZWQgaW50ICopeCk7Cj4+IC0gICAgICAgZWxz ZSBpZiAoIV9fYnVpbHRpbl9zdHJjbXAodHlwZSwgImNoYXIgKiIpKQo+PiAtICAgICAgICAgICAg ICAgZHJtX3ByaW50ZihwLCAiaTkxNS4lcz0lc1xuIiwgbmFtZSwgKihjb25zdCBjaGFyICoqKXgp Owo+PiAtICAgICAgIGVsc2UKPj4gLSAgICAgICAgICAgICAgIEJVSUxEX0JVRygpOwo+PiAtfQo+ PiArI2RlZmluZSBfcHJpbnRfcGFyYW0ocCwgbmFtZSwgdHlwZSwgeCkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAo+PiArZG8geyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+PiAr ICAgICAgIGlmICghX19idWlsdGluX3N0cmNtcCh0eXBlLCAiYm9vbCIpKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAo+PiArICAgICAgICAgICAgICAgZHJtX3ByaW50ZihwLCAi aTkxNS4lcz0lc1xuIiwgbmFtZSwgeWVzbm8oKihjb25zdCBib29sICopeCkpOyAgXAo+PiArICAg ICAgIGVsc2UgaWYgKCFfX2J1aWx0aW5fc3RyY21wKHR5cGUsICJpbnQiKSkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAo+PiArICAgICAgICAgICAgICAgZHJtX3ByaW50ZihwLCAiaTkx NS4lcz0lZFxuIiwgbmFtZSwgKihjb25zdCBpbnQgKil4KTsgICAgICAgICAgXAo+PiArICAgICAg IGVsc2UgaWYgKCFfX2J1aWx0aW5fc3RyY21wKHR5cGUsICJ1bnNpZ25lZCBpbnQiKSkgICAgICAg ICAgICAgICAgICAgICAgXAo+PiArICAgICAgICAgICAgICAgZHJtX3ByaW50ZihwLCAiaTkxNS4l cz0ldVxuIiwgbmFtZSwgKihjb25zdCB1bnNpZ25lZCBpbnQgKil4KTsgXAo+PiArICAgICAgIGVs c2UgaWYgKCFfX2J1aWx0aW5fc3RyY21wKHR5cGUsICJjaGFyICoiKSkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAo+PiArICAgICAgICAgICAgICAgZHJtX3ByaW50ZihwLCAiaTkxNS4lcz0l c1xuIiwgbmFtZSwgKihjb25zdCBjaGFyICoqKXgpOyAgICAgICAgXAo+PiArICAgICAgIGVsc2Ug ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAo+PiArICAgICAgICAgICAgICAgQlVJTERfQlVHKCk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+PiArfSB3aGlsZSAoMCkKPj4K Pj4gIC8qKgo+PiAgICogaTkxNV9wYXJhbXNfZHVtcCAtIGR1bXAgaTkxNSBtb2RwYXJhbXMKPj4g LS0KPj4gMi4xOS4wCj4+CgotLSAKSmFuaSBOaWt1bGEsIEludGVsIE9wZW4gU291cmNlIEdyYXBo aWNzIENlbnRlcgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7EC29C43441 for ; Wed, 10 Oct 2018 12:06:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 43B362086D for ; Wed, 10 Oct 2018 12:06:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 43B362086D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726836AbeJJT2H (ORCPT ); Wed, 10 Oct 2018 15:28:07 -0400 Received: from mga17.intel.com ([192.55.52.151]:5317 "EHLO mga17.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726206AbeJJT2G (ORCPT ); Wed, 10 Oct 2018 15:28:06 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 10 Oct 2018 05:06:16 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,364,1534834800"; d="scan'208";a="97942193" Received: from jnikula-mobl3.fi.intel.com (HELO localhost) ([10.237.72.61]) by fmsmga001.fm.intel.com with ESMTP; 10 Oct 2018 05:01:51 -0700 From: Jani Nikula To: Nick Desaulniers , Nathan Chancellor Cc: joonas.lahtinen@linux.intel.com, rodrigo.vivi@intel.com, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, LKML , lukas.bulwahn@gmail.com Subject: Re: [PATCH] drm/i915: Convert _print_param to a macro In-Reply-To: Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo References: <20181009171401.14980-1-natechancellor@gmail.com> Date: Wed, 10 Oct 2018 15:01:40 +0300 Message-ID: <87woqqm2mz.fsf@intel.com> MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 09 Oct 2018, Nick Desaulniers wrote: > On Tue, Oct 9, 2018 at 10:14 AM Nathan Chancellor > wrote: >> >> 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. > > Thanks Nathan for the patch. To provide more context, Clang does > semantic analysis before optimization, where as GCC does these > together (IIUC). So the above link error is from the naked > BUILD_BUG(). Clang can't evaluate the __builtin_strcmp's statically > until inlining has occurred, but that optimization happens after > semantic analysis. To do the inlining before semantic analysis, we > MUST leverage the preprocessor, which runs before the compiler starts > doing semantic analysis. I suspect this code is not valid for GCC > unless optimizations are enabled (the kernel only does compile with > optimizations turned on). This change allows us to build this > translation unit with Clang. > > Acked-by: Nick Desaulniers > (Note: this is the change I suggested, so not sure whether Acked-by or > Reviewed-by is more appropriate). *Sad trombone* I'd rather see us converting more macros to static inlines than the other way round. I'll let others chime in if they have any better ideas, otherwise I'll apply this one. BR, Jani. > >> >> 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 >> Signed-off-by: Nathan Chancellor >> --- >> 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 >> -- Jani Nikula, Intel Open Source Graphics Center