All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jani Nikula <jani.nikula@linux.intel.com>
To: Dave Gordon <david.s.gordon@intel.com>, intel-gfx@lists.freedesktop.org
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Subject: Re: [PATCH] drm/i915/bxt: Fix wrongly placed ')' in I915_READ()
Date: Wed, 14 Oct 2015 16:35:08 +0300	[thread overview]
Message-ID: <87eggx1skz.fsf@intel.com> (raw)
In-Reply-To: <87h9lt1stx.fsf@intel.com>

On Wed, 14 Oct 2015, Jani Nikula <jani.nikula@linux.intel.com> wrote:
> On Wed, 14 Oct 2015, Dave Gordon <david.s.gordon@intel.com> wrote:
>> On 17/09/15 14:20, Damien Lespiau wrote:
>>> Not the first time! not the last time?
>>>
>>> There is a possibility to use gcc 5's -Wbool-compare to try and compare
>>> (reg) in those macros to a constant and gcc will warn that the
>>> comparison between a boolean expression and a constant is always either
>>> true or false. Maybe.
>>
>> Since boolean true (1) cannot be a valid argument to this macro, it 
>> could contain a compile-time check that the parameter is not 1; if 
>> boolean false (0) happens not to be a valid register address (BSpec says 
>> MMIO 0 is reserved) the macro could check that the argument is neither 
>> of these values, and the compiler might then detect that all possible 
>> paths lead to a compile-time error. Something like this?
>
> The past errors have also been of the form
>
> 	if (I915_READ(SOME_REG(pipe) & MASK) == val)
>
> which isn't caught by your check. See [1].
>
>
> BR,
> Jani.
>
>
> [1] http://mid.gmane.org/1442595836-23981-1-git-send-email-ville.syrjala@linux.intel.com
>
>
>
>
>
>>
>> #define I915_READ(reg)                                                 \
>>          ({                                                             \
>>              if (__builtin_constant_p(reg)) {                           \

Also, what Damien fixed wouldn't have been caught because
"BXT_PORT_PCS_DW12_LN23(port) != hw_state->pcsdw12" is not a builtin
constant.

Daniel, I don't think this is interim solution material, sorry.

BR,
Jani.


>>                  BUILD_BUG_ON((reg) == false);                          \
>>                  BUILD_BUG_ON((reg) == true);                           \
>>              }                                                          \
>>              dev_priv->uncore.funcs.mmio_readl(dev_priv, (reg), true);  \
>>          })
>>
>> Interestingly, that reported three errors, all in intel_dsi.c where the 
>> port-selection macros use 0s to fill in dummy elements when less than 3 
>> ports are being used.
>>
>> In function ‘intel_dsi_get_hw_state’
>> In function ‘intel_dsi_port_disable’
>> In function ‘intel_dsi_port_enable’
>>
>> Other than that, there weren't any cases where a bool constant was being 
>> passed to this specific macro (as of today).
>>
>> .Dave.
>>
>>> Cc: Imre Deak <imre.deak@intel.com>
>>> Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
>>> ---
>>>   drivers/gpu/drm/i915/intel_ddi.c | 2 +-
>>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
>>> index 4823184..5b600bf 100644
>>> --- a/drivers/gpu/drm/i915/intel_ddi.c
>>> +++ b/drivers/gpu/drm/i915/intel_ddi.c
>>> @@ -2882,7 +2882,7 @@ static bool bxt_ddi_pll_get_hw_state(struct drm_i915_private *dev_priv,
>>>   	 * here just read out lanes 0/1 and output a note if lanes 2/3 differ.
>>>   	 */
>>>   	hw_state->pcsdw12 = I915_READ(BXT_PORT_PCS_DW12_LN01(port));
>>> -	if (I915_READ(BXT_PORT_PCS_DW12_LN23(port) != hw_state->pcsdw12))
>>> +	if (I915_READ(BXT_PORT_PCS_DW12_LN23(port)) != hw_state->pcsdw12)
>>>   		DRM_DEBUG_DRIVER("lane stagger config different for lane 01 (%08x) and 23 (%08x)\n",
>>>   				 hw_state->pcsdw12,
>>>   				 I915_READ(BXT_PORT_PCS_DW12_LN23(port)));
>>
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
> -- 
> Jani Nikula, Intel Open Source Technology Center

-- 
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

      reply	other threads:[~2015-10-14 13:31 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-17 13:20 [PATCH] drm/i915/bxt: Fix wrongly placed ')' in I915_READ() Damien Lespiau
2015-09-17 13:42 ` Imre Deak
2015-09-18 11:25   ` Jani Nikula
2015-10-14 12:58 ` Dave Gordon
2015-10-14 13:19   ` Daniel Vetter
2015-10-14 13:29   ` Jani Nikula
2015-10-14 13:35     ` Jani Nikula [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87eggx1skz.fsf@intel.com \
    --to=jani.nikula@linux.intel.com \
    --cc=daniel.vetter@ffwll.ch \
    --cc=david.s.gordon@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.