Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1615987 > unrolled thread

[PATCH 1/2] [media] cec: Move capability check inside #if

Started byLee Jones <lee.jones@linaro.org>
First post2017-04-04 14:40 +0200
Last post2017-04-04 15:40 +0200
Articles 7 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH 1/2] [media] cec: Move capability check inside #if Lee Jones <lee.jones@linaro.org> - 2017-04-04 14:40 +0200
    Re: [PATCH 1/2] [media] cec: Move capability check inside #if Hans Verkuil <hverkuil@xs4all.nl> - 2017-04-04 14:40 +0200
      Re: [PATCH 1/2] [media] cec: Move capability check inside #if Hans Verkuil <hverkuil@xs4all.nl> - 2017-04-04 15:00 +0200
      Re: [PATCH 1/2] [media] cec: Move capability check inside #if Lee Jones <lee.jones@linaro.org> - 2017-04-04 15:00 +0200
        Re: [PATCH 1/2] [media] cec: Move capability check inside #if Lee Jones <lee.jones@linaro.org> - 2017-04-04 15:10 +0200
          Re: [PATCH 1/2] [media] cec: Move capability check inside #if Hans Verkuil <hverkuil@xs4all.nl> - 2017-04-04 15:20 +0200
            Re: [PATCH 1/2] [media] cec: Move capability check inside #if Lee Jones <lee.jones@linaro.org> - 2017-04-04 15:40 +0200

#1615987 — [PATCH 1/2] [media] cec: Move capability check inside #if

FromLee Jones <lee.jones@linaro.org>
Date2017-04-04 14:40 +0200
Subject[PATCH 1/2] [media] cec: Move capability check inside #if
Message-ID<tsvUC-4Rz-5@gated-at.bofh.it>
If CONFIG_RC_CORE is not enabled then none of the RC code will be
executed anyway, so we're placing the capability check inside the

Signed-off-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/media/cec/cec-core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/cec/cec-core.c b/drivers/media/cec/cec-core.c
index 37217e2..06a312c 100644
--- a/drivers/media/cec/cec-core.c
+++ b/drivers/media/cec/cec-core.c
@@ -234,10 +234,10 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
 		return ERR_PTR(res);
 	}
 
+#if IS_REACHABLE(CONFIG_RC_CORE)
 	if (!(caps & CEC_CAP_RC))
 		return adap;
 
-#if IS_REACHABLE(CONFIG_RC_CORE)
 	/* Prepare the RC input device */
 	adap->rc = rc_allocate_device(RC_DRIVER_SCANCODE);
 	if (!adap->rc) {
-- 
2.9.3

[toc] | [next] | [standalone]


#1615989

FromHans Verkuil <hverkuil@xs4all.nl>
Date2017-04-04 14:40 +0200
Message-ID<tsvUD-4Rz-33@gated-at.bofh.it>
In reply to#1615987
On 04/04/2017 02:32 PM, Lee Jones wrote:
> If CONFIG_RC_CORE is not enabled then none of the RC code will be
> executed anyway, so we're placing the capability check inside the
> 
> Signed-off-by: Lee Jones <lee.jones@linaro.org>
> ---
>  drivers/media/cec/cec-core.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/media/cec/cec-core.c b/drivers/media/cec/cec-core.c
> index 37217e2..06a312c 100644
> --- a/drivers/media/cec/cec-core.c
> +++ b/drivers/media/cec/cec-core.c
> @@ -234,10 +234,10 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
>  		return ERR_PTR(res);
>  	}
>  
> +#if IS_REACHABLE(CONFIG_RC_CORE)
>  	if (!(caps & CEC_CAP_RC))
>  		return adap;
>  
> -#if IS_REACHABLE(CONFIG_RC_CORE)
>  	/* Prepare the RC input device */
>  	adap->rc = rc_allocate_device(RC_DRIVER_SCANCODE);
>  	if (!adap->rc) {
> 

Not true, there is an #else further down.

That said, this code is clearly a bit confusing.

It would be better if at the beginning of the function we'd have this:

#if !IS_REACHABLE(CONFIG_RC_CORE)
	caps &= ~CEC_CAP_RC;
#endif

and then drop the #else bit and (as you do in this patch) move the #if up.

Can you make a new patch for this?

Thanks!

	Hans

[toc] | [prev] | [next] | [standalone]


#1616001

FromHans Verkuil <hverkuil@xs4all.nl>
Date2017-04-04 15:00 +0200
Message-ID<tswdX-50q-19@gated-at.bofh.it>
In reply to#1615989
On 04/04/2017 02:54 PM, Lee Jones wrote:
> On Tue, 04 Apr 2017, Hans Verkuil wrote:
> 
>> On 04/04/2017 02:32 PM, Lee Jones wrote:
>>> If CONFIG_RC_CORE is not enabled then none of the RC code will be
>>> executed anyway, so we're placing the capability check inside the
>>>
>>> Signed-off-by: Lee Jones <lee.jones@linaro.org>
>>> ---
>>>  drivers/media/cec/cec-core.c | 2 +-
>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/media/cec/cec-core.c b/drivers/media/cec/cec-core.c
>>> index 37217e2..06a312c 100644
>>> --- a/drivers/media/cec/cec-core.c
>>> +++ b/drivers/media/cec/cec-core.c
>>> @@ -234,10 +234,10 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
>>>  		return ERR_PTR(res);
>>>  	}
>>>  
>>> +#if IS_REACHABLE(CONFIG_RC_CORE)
>>>  	if (!(caps & CEC_CAP_RC))
>>>  		return adap;
>>>  
>>> -#if IS_REACHABLE(CONFIG_RC_CORE)
>>>  	/* Prepare the RC input device */
>>>  	adap->rc = rc_allocate_device(RC_DRIVER_SCANCODE);
>>>  	if (!adap->rc) {
>>>
>>
>> Not true, there is an #else further down.
> 
> I saw the #else.  It's inert code that becomes function-less.

No, it isn't. It clears the CAP_RC bit so it isn't returned in the CEC_ADAP_G_CAPS ioctl.
Drivers set this cap bit if they want RC support (they typically want it), but if the
config option isn't there then the capability should be removed.

Regards,

	Hans

> 
>> That said, this code is clearly a bit confusing.
>>
>> It would be better if at the beginning of the function we'd have this:
>>
>> #if !IS_REACHABLE(CONFIG_RC_CORE)
>> 	caps &= ~CEC_CAP_RC;
>> #endif
>>
>> and then drop the #else bit and (as you do in this patch) move the #if up.
>>
>> Can you make a new patch for this?
> 
> Sure.
> 

[toc] | [prev] | [next] | [standalone]


#1616003

FromLee Jones <lee.jones@linaro.org>
Date2017-04-04 15:00 +0200
Message-ID<tswdX-50q-13@gated-at.bofh.it>
In reply to#1615989
On Tue, 04 Apr 2017, Hans Verkuil wrote:

> On 04/04/2017 02:32 PM, Lee Jones wrote:
> > If CONFIG_RC_CORE is not enabled then none of the RC code will be
> > executed anyway, so we're placing the capability check inside the
> > 
> > Signed-off-by: Lee Jones <lee.jones@linaro.org>
> > ---
> >  drivers/media/cec/cec-core.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/drivers/media/cec/cec-core.c b/drivers/media/cec/cec-core.c
> > index 37217e2..06a312c 100644
> > --- a/drivers/media/cec/cec-core.c
> > +++ b/drivers/media/cec/cec-core.c
> > @@ -234,10 +234,10 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
> >  		return ERR_PTR(res);
> >  	}
> >  
> > +#if IS_REACHABLE(CONFIG_RC_CORE)
> >  	if (!(caps & CEC_CAP_RC))
> >  		return adap;
> >  
> > -#if IS_REACHABLE(CONFIG_RC_CORE)
> >  	/* Prepare the RC input device */
> >  	adap->rc = rc_allocate_device(RC_DRIVER_SCANCODE);
> >  	if (!adap->rc) {
> > 
> 
> Not true, there is an #else further down.

I saw the #else.  It's inert code that becomes function-less.

> That said, this code is clearly a bit confusing.
> 
> It would be better if at the beginning of the function we'd have this:
> 
> #if !IS_REACHABLE(CONFIG_RC_CORE)
> 	caps &= ~CEC_CAP_RC;
> #endif
> 
> and then drop the #else bit and (as you do in this patch) move the #if up.
> 
> Can you make a new patch for this?

Sure.

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

[toc] | [prev] | [next] | [standalone]


#1616008

FromLee Jones <lee.jones@linaro.org>
Date2017-04-04 15:10 +0200
Message-ID<tswnD-5iQ-1@gated-at.bofh.it>
In reply to#1616003
On Tue, 04 Apr 2017, Lee Jones wrote:

> On Tue, 04 Apr 2017, Hans Verkuil wrote:
> 
> > On 04/04/2017 02:32 PM, Lee Jones wrote:
> > > If CONFIG_RC_CORE is not enabled then none of the RC code will be
> > > executed anyway, so we're placing the capability check inside the
> > > 
> > > Signed-off-by: Lee Jones <lee.jones@linaro.org>
> > > ---
> > >  drivers/media/cec/cec-core.c | 2 +-
> > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > 
> > > diff --git a/drivers/media/cec/cec-core.c b/drivers/media/cec/cec-core.c
> > > index 37217e2..06a312c 100644
> > > --- a/drivers/media/cec/cec-core.c
> > > +++ b/drivers/media/cec/cec-core.c
> > > @@ -234,10 +234,10 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
> > >  		return ERR_PTR(res);
> > >  	}
> > >  
> > > +#if IS_REACHABLE(CONFIG_RC_CORE)
> > >  	if (!(caps & CEC_CAP_RC))
> > >  		return adap;
> > >  
> > > -#if IS_REACHABLE(CONFIG_RC_CORE)
> > >  	/* Prepare the RC input device */
> > >  	adap->rc = rc_allocate_device(RC_DRIVER_SCANCODE);
> > >  	if (!adap->rc) {
> > > 
> > 
> > Not true, there is an #else further down.
> 
> I saw the #else.  It's inert code that becomes function-less.
> 
> > That said, this code is clearly a bit confusing.
> > 
> > It would be better if at the beginning of the function we'd have this:
> > 
> > #if !IS_REACHABLE(CONFIG_RC_CORE)
> > 	caps &= ~CEC_CAP_RC;
> > #endif
> > 
> > and then drop the #else bit and (as you do in this patch) move the #if up.
> > 
> > Can you make a new patch for this?
> 
> Sure.

No wait, sorry!  This patch is the correct fix.

'caps' is already indicating !CEC_CAP_RC, which is right.

What we're trying to do here is only consider looking at the
capabilities if the RC Core is enabled.  If it is not enabled, the #if
still does the right thing and makes sure that the caps are updated.

Please take another look at the semantics.

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

[toc] | [prev] | [next] | [standalone]


#1616011

FromHans Verkuil <hverkuil@xs4all.nl>
Date2017-04-04 15:20 +0200
Message-ID<tswxj-5mj-7@gated-at.bofh.it>
In reply to#1616008
On 04/04/2017 03:01 PM, Lee Jones wrote:
> On Tue, 04 Apr 2017, Lee Jones wrote:
> 
>> On Tue, 04 Apr 2017, Hans Verkuil wrote:
>>
>>> On 04/04/2017 02:32 PM, Lee Jones wrote:
>>>> If CONFIG_RC_CORE is not enabled then none of the RC code will be
>>>> executed anyway, so we're placing the capability check inside the
>>>>
>>>> Signed-off-by: Lee Jones <lee.jones@linaro.org>
>>>> ---
>>>>  drivers/media/cec/cec-core.c | 2 +-
>>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>>
>>>> diff --git a/drivers/media/cec/cec-core.c b/drivers/media/cec/cec-core.c
>>>> index 37217e2..06a312c 100644
>>>> --- a/drivers/media/cec/cec-core.c
>>>> +++ b/drivers/media/cec/cec-core.c
>>>> @@ -234,10 +234,10 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
>>>>  		return ERR_PTR(res);
>>>>  	}
>>>>  
>>>> +#if IS_REACHABLE(CONFIG_RC_CORE)
>>>>  	if (!(caps & CEC_CAP_RC))
>>>>  		return adap;
>>>>  
>>>> -#if IS_REACHABLE(CONFIG_RC_CORE)
>>>>  	/* Prepare the RC input device */
>>>>  	adap->rc = rc_allocate_device(RC_DRIVER_SCANCODE);
>>>>  	if (!adap->rc) {
>>>>
>>>
>>> Not true, there is an #else further down.
>>
>> I saw the #else.  It's inert code that becomes function-less.
>>
>>> That said, this code is clearly a bit confusing.
>>>
>>> It would be better if at the beginning of the function we'd have this:
>>>
>>> #if !IS_REACHABLE(CONFIG_RC_CORE)
>>> 	caps &= ~CEC_CAP_RC;
>>> #endif
>>>
>>> and then drop the #else bit and (as you do in this patch) move the #if up.
>>>
>>> Can you make a new patch for this?
>>
>> Sure.
> 
> No wait, sorry!  This patch is the correct fix.
> 
> 'caps' is already indicating !CEC_CAP_RC, which is right.
> 
> What we're trying to do here is only consider looking at the
> capabilities if the RC Core is enabled.  If it is not enabled, the #if
> still does the right thing and makes sure that the caps are updated.
> 
> Please take another look at the semantics.

Ah, yes. You are right. But so am I: the code is just unnecessarily confusing
as is seen by this discussion.

I still would like to see a patch with my proposed solution. The control flow
is much easier to understand that way.

Regards,

	Hans

[toc] | [prev] | [next] | [standalone]


#1616032

FromLee Jones <lee.jones@linaro.org>
Date2017-04-04 15:40 +0200
Message-ID<tswQG-5tl-21@gated-at.bofh.it>
In reply to#1616011
On Tue, 04 Apr 2017, Hans Verkuil wrote:

> On 04/04/2017 03:01 PM, Lee Jones wrote:
> > On Tue, 04 Apr 2017, Lee Jones wrote:
> > 
> >> On Tue, 04 Apr 2017, Hans Verkuil wrote:
> >>
> >>> On 04/04/2017 02:32 PM, Lee Jones wrote:
> >>>> If CONFIG_RC_CORE is not enabled then none of the RC code will be
> >>>> executed anyway, so we're placing the capability check inside the
> >>>>
> >>>> Signed-off-by: Lee Jones <lee.jones@linaro.org>
> >>>> ---
> >>>>  drivers/media/cec/cec-core.c | 2 +-
> >>>>  1 file changed, 1 insertion(+), 1 deletion(-)
> >>>>
> >>>> diff --git a/drivers/media/cec/cec-core.c b/drivers/media/cec/cec-core.c
> >>>> index 37217e2..06a312c 100644
> >>>> --- a/drivers/media/cec/cec-core.c
> >>>> +++ b/drivers/media/cec/cec-core.c
> >>>> @@ -234,10 +234,10 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
> >>>>  		return ERR_PTR(res);
> >>>>  	}
> >>>>  
> >>>> +#if IS_REACHABLE(CONFIG_RC_CORE)
> >>>>  	if (!(caps & CEC_CAP_RC))
> >>>>  		return adap;
> >>>>  
> >>>> -#if IS_REACHABLE(CONFIG_RC_CORE)
> >>>>  	/* Prepare the RC input device */
> >>>>  	adap->rc = rc_allocate_device(RC_DRIVER_SCANCODE);
> >>>>  	if (!adap->rc) {
> >>>>
> >>>
> >>> Not true, there is an #else further down.
> >>
> >> I saw the #else.  It's inert code that becomes function-less.
> >>
> >>> That said, this code is clearly a bit confusing.
> >>>
> >>> It would be better if at the beginning of the function we'd have this:
> >>>
> >>> #if !IS_REACHABLE(CONFIG_RC_CORE)
> >>> 	caps &= ~CEC_CAP_RC;
> >>> #endif
> >>>
> >>> and then drop the #else bit and (as you do in this patch) move the #if up.
> >>>
> >>> Can you make a new patch for this?
> >>
> >> Sure.
> > 
> > No wait, sorry!  This patch is the correct fix.
> > 
> > 'caps' is already indicating !CEC_CAP_RC, which is right.
> > 
> > What we're trying to do here is only consider looking at the
> > capabilities if the RC Core is enabled.  If it is not enabled, the #if
> > still does the right thing and makes sure that the caps are updated.
> > 
> > Please take another look at the semantics.
> 
> Ah, yes. You are right. But so am I: the code is just unnecessarily confusing
> as is seen by this discussion.
> 
> I still would like to see a patch with my proposed solution. The control flow
> is much easier to understand that way.

I have an idea.  Please bear with me.

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web