All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rhyland Klein <rklein@nvidia.com>
To: Lee Jones <lee.jones@linaro.org>
Cc: <linux-kernel@vger.kernel.org>, Laxman Dewangan <ldewangan@nvidia.com>
Subject: Re: [PATCH] mfd: Fix MACRO for commonly declared MFD cell attributes
Date: Fri, 26 Feb 2016 11:35:34 -0500	[thread overview]
Message-ID: <56D07ED6.7030607@nvidia.com> (raw)
In-Reply-To: <56C742C4.4080308@nvidia.com>

On 2/19/2016 11:28 AM, Rhyland Klein wrote:
> On 2/19/2016 3:50 AM, Lee Jones wrote:
>> On Thu, 18 Feb 2016, Rhyland Klein wrote:
>>
>>> MFD_ARRAY_SIZE() would not accurately return 0 if the passed
>>> parameter was NULL. Fix this so that num_resources will
>>> accurately be 0 in the case that _res is NULL.
>>>
>>> cc: Lee Jones <lee.jones@linaro.org>
>>> cc: Laxman Dewangan <ldewangan@nvidia.com>
>>> Signed-off-by: Rhyland Klein <rklein@nvidia.com>
>>> ---
>>>  include/linux/mfd/core.h | 15 +++++++++------
>>>  1 file changed, 9 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/include/linux/mfd/core.h b/include/linux/mfd/core.h
>>> index 1a5a87f3cd38..62136ccff1df 100644
>>> --- a/include/linux/mfd/core.h
>>> +++ b/include/linux/mfd/core.h
>>> @@ -18,11 +18,11 @@
>>>  
>>>  #define MFD_ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
>>>  
>>> -#define MFD_CELL_ALL(_name, _res, _pdata, _id, _compat, _match)		\
>>> +#define MFD_CELL_ALL(_name, _nres, _res, _pdata, _id, _compat, _match)	\
>>>  	{								\
>>>  		.name = (_name),					\
>>>  		.resources = (_res),					\
>>> -		.num_resources = MFD_ARRAY_SIZE((_res)),		\
>>> +		.num_resources = (_nres),				\
>>>  		.platform_data = (_pdata),				\
>>>  		.pdata_size = MFD_ARRAY_SIZE((_pdata)), 		\
>>>  		.of_compatible = (_compat),				\
>>> @@ -31,16 +31,19 @@
>>>  	}
>>>  
>>>  #define OF_MFD_CELL(_name, _res, _pdata, _id, _compat)			\
>>> -		MFD_CELL_ALL(_name, _res, _pdata, _id, _compat, NULL)	\
>>> +		MFD_CELL_ALL(_name, MFD_ARRAY_SIZE((_res)), _res,	\
>>> +			_pdata, _id, _compat, NULL)			\
>>
>> I'm confused.  Why would it be any different just by changing the call
>> site of MFD_ARRAY_SIZE?
> 
> It isn't different, but for MFD_CELL_NAME, it explicitly passes 0
> instead of using MFD_ARRAY_SIZE, as its the only place that doesn't
> expect to have resources.
> 
>>
>> And what about .platform_data?
> 
> This crashed for me (without the change) at :
> 
> mfd_add_device():
>         for (r = 0; r < cell->num_resources; r++) {
>                 res[r].name = cell->resources[r].name;
>                 res[r].flags = cell->resources[r].flags;
> 
> where dereferencing cell->resources[0] when there are no resources. I
> guess the platform_data could do the same, but I didn't run into it.
> 
>>
>> How about this change instead?
>>
>> diff --git a/include/linux/mfd/core.h b/include/linux/mfd/core.h
>> index 1a5a87f..8440f42 100644
>> --- a/include/linux/mfd/core.h
>> +++ b/include/linux/mfd/core.h
>> @@ -16,7 +16,7 @@
>>  
>>  #include <linux/platform_device.h>
>>  
>> -#define MFD_ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
>> +#define MFD_ARRAY_SIZE(arr) (arr ? (sizeof(arr) / sizeof((arr)[0])) : 0)
>>  
>>  #define MFD_CELL_ALL(_name, _res, _pdata, _id, _compat, _match)                \
>>         {                                                               \
>>
> That was my first thought too. However, I see this when I try to compile
> that:
> 
> In file included from drivers/mfd/max77620.c:18:0:
> include/linux/mfd/core.h:19:34: warning: the address of ‘gpio_resources’
> will always evaluate as ‘true’ [-Waddress]
>  #define MFD_ARRAY_SIZE(arr) (arr ? (sizeof(arr) / sizeof((arr)[0])) : 0)
> 
> 7 different times. This patch was the only way I seemed to be able to
> WAR around compile time warnings.
> 
> -rhyland
> 

Did you not see warnings like this when you compiled the kernel? Did you
find a different approach than what I proposed above to deal with it?
I'd like to get this in soon so that when the max77620 drivers are all
in and using it, it should be functional.

-rhyland

-- 
nvpublic

  reply	other threads:[~2016-02-26 16:35 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-18 18:52 [PATCH] mfd: Fix MACRO for commonly declared MFD cell attributes Rhyland Klein
2016-02-19  8:50 ` Lee Jones
2016-02-19 16:28   ` Rhyland Klein
2016-02-26 16:35     ` Rhyland Klein [this message]
2016-02-29 12:38       ` Laxman Dewangan
2016-03-02 13:08         ` Lee Jones
2016-03-09 13:22           ` Laxman Dewangan
2016-03-11  8:39             ` Lee Jones
2016-03-11  8:57               ` Laxman Dewangan
2016-03-16  8:42                 ` Lee Jones
2016-03-16  9:22                   ` Laxman Dewangan

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=56D07ED6.7030607@nvidia.com \
    --to=rklein@nvidia.com \
    --cc=ldewangan@nvidia.com \
    --cc=lee.jones@linaro.org \
    --cc=linux-kernel@vger.kernel.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.