linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Matti Vaittinen <mazziesaccount@gmail.com>
To: Andy Shevchenko <andy.shevchenko@gmail.com>,
	"Vaittinen, Matti" <Matti.Vaittinen@fi.rohmeurope.com>
Cc: Jonathan Cameron <jic23@kernel.org>,
	Lars-Peter Clausen <lars@metafoo.de>,
	Miaoqian Lin <linmq006@gmail.com>,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Xiang wangx <wangxiang@cdjrlc.com>,
	linux-iio <linux-iio@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v3 08/14] iio: bmg160_core: Simplify using devm_regulator_*get_enable()
Date: Sat, 20 Aug 2022 13:05:25 +0300	[thread overview]
Message-ID: <cff8d041-f3c4-3faf-85a9-acabe60d2de2@gmail.com> (raw)
In-Reply-To: <CAHp75VdMA5mkxkMrtiRTGn5F-5GWjxKyuD5iBuj3HKWqZZMxkg@mail.gmail.com>

On 8/20/22 10:18, Andy Shevchenko wrote:
> On Sat, Aug 20, 2022 at 9:48 AM Vaittinen, Matti
> <Matti.Vaittinen@fi.rohmeurope.com> wrote:
>> On 8/20/22 09:25, Andy Shevchenko wrote:
>>> On Sat, Aug 20, 2022 at 9:19 AM Vaittinen, Matti
>>> <Matti.Vaittinen@fi.rohmeurope.com> wrote:
>>>> On 8/20/22 02:30, Andy Shevchenko wrote:
>>>>> On Fri, Aug 19, 2022 at 10:21 PM Matti Vaittinen
>>>>> <mazziesaccount@gmail.com> wrote:
>>>
>>> What did I miss?
>>
>>   >>>>           struct bmg160_data *data;
>>   >>>>           struct iio_dev *indio_dev;
>>
>> This does already violate the rule.
> 
> Indeed, I am reading this with an MTA that has True Type fonts, and I
> can't see it at the first glance. But this breaks that rule slightly
> while your added line breaks it significantly.

Yes. As I said, I think the reverse xmas tree rule is not too well 
justified. Bunch of the subsystems do not really follow it, nor did this 
function. Yet, as I said, I can move the array to the first line in the 
function when I respin the series..

>>>>> this case you even can move it out of the function, so we will see
>>>>> clearly that this is (not a hidden) global variable.
>>>>
>>>> Here I do disagree with you. Moving the array out of the function makes
>>>> it _much_ less obvious it is not used outside this function. Reason for
>>>> making is "static const" is to allow the data be placed in read-only
>>>> area (thanks to Guenter who originally gave me this tip).

Just wanted to correct - it was Sebastian Reichel, not Guenter who 
explained me why doing local static const arrays is better than plain const.

>>>
>>> "static" in C language means two things (that's what come to my mind):
>>> - for functions this tells that a function is not used outside of the module;
>>> - for variables that it is a _global_ variable.
>>>
>>> Hiding static inside functions is not a good coding practice since it
>>> hides scope of the variable.
>>
>> For const arrays the static in function does make sense. Being able to
>> place the data in read-only areas do help with the memory on limited
>> systems.
> 
> I'm not sure we are on the same page. I do not object to the "const"
> part and we are _not_ talking about that.
> 

Maybe the explanation by Sebastian here can put us on the same page:
https://lore.kernel.org/all/20190502073539.GB7864@localhost.localdomain/
https://lore.kernel.org/all/322fa765ddd72972aba931c706657661ca685afa.camel@fi.rohmeurope.com/

>>> And if you look into the kernel code, I
>>> believe the use you are proposing is in minority.
>>
>> I don't know about the statistics. What I know is that we do have a
>> technical benefits when we use static const arrays instead of non static
>> ones in the functions. I do also believe placing the variables in blocks
>> is a good practice.
> 
> Yes, and global variables are better to be seen as global variables.
> 
>> I tend to agree with you that using local, non const statics has
>> pitfalls - but the pitfalls do not really apply with const ones. You
>> know the value and have no races. Benefit is that just by seeing that no
>> pointer is returned you can be sure that no "sane code" uses the data
>> outside the function it resides.
> 
> Putting a global variable (const or non-const) to the function will
> hide its scope and it is prone to getting two variables with the same
> or very similar names with quite different semantics.

I don't see how moving something from a local block to a global scope 
does make conflicts less of an issue? On the contrary, it makes things 
worse as then the moved variable will collide with any other variable in 
any of the functions in the whole file. Having the array as function 
local static makes the naming collisions to be issue only if another 
global variable has the same name. And if that happened - the chances 
are code would still be correct as the function here is clearly intended 
to use the local one. If someone really later adds a global with the 
same name - and uses the global in this function - then he should have 
noted we have local variable with same name. Additionally - such user 
would be using terribly bad name for a global variable.

Please note that scope of the function local static variable is limited 
to function even if the life-time is not just the life-time of a function.

> That's why it's
> really not good practice. I would rather see it outside of the
> function _esp_ because it's static const.

Sorry, I really don't agree with your reasoning here. :(


-- 
Matti Vaittinen
Linux kernel developer at ROHM Semiconductors
Oulu Finland

~~ When things go utterly wrong vim users can always type :help! ~~

Discuss - Estimate - Plan - Report and finally accomplish this:
void do_work(int time) __attribute__ ((const));

  reply	other threads:[~2022-08-20 10:05 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-19 19:16 [PATCH v3 00/14] Use devm helpers for regulator get and enable Matti Vaittinen
2022-08-19 19:17 ` [PATCH v3 01/14] docs: devres: regulator: Add new get_enable functions to devres.rst Matti Vaittinen
2022-08-19 19:17 ` [PATCH v3 02/14] clk: cdce925: simplify using devm_regulator_get_enable() Matti Vaittinen
2022-10-17 23:07   ` Stephen Boyd
2022-08-19 19:18 ` [PATCH v3 03/14] gpu: drm: simplify drivers using devm_regulator_*get_enable*() Matti Vaittinen
2022-08-29 14:25   ` Robert Foss
2022-08-30  7:04     ` Matti Vaittinen
2022-08-19 19:18 ` [PATCH v3 04/14] hwmon: lm90: simplify using devm_regulator_get_enable() Matti Vaittinen
2022-08-19 19:18 ` [PATCH v3 05/14] hwmon: adm1177: " Matti Vaittinen
2022-08-19 19:36   ` Guenter Roeck
2022-08-19 19:19 ` [PATCH v3 06/14] iio: ad7192: Simplify " Matti Vaittinen
2022-10-16 15:59   ` Jonathan Cameron
2022-08-19 19:19 ` [PATCH v3 07/14] iio: ltc2688: Simplify using devm_regulator_*get_enable() Matti Vaittinen
2022-08-20 11:21   ` Jonathan Cameron
2022-08-20 13:38     ` Matti Vaittinen
2022-08-20 16:09       ` Andy Shevchenko
2022-08-20 17:30         ` Matti Vaittinen
2022-08-20 17:41           ` Andy Shevchenko
2022-08-20 19:00             ` Matti Vaittinen
2022-08-21 13:13               ` Andy Shevchenko
2022-08-22  8:13                 ` Vaittinen, Matti
2022-08-22 19:14                   ` Jonathan Cameron
2022-08-30 11:34   ` Sa, Nuno
2022-10-16 16:04   ` Jonathan Cameron
2022-08-19 19:19 ` [PATCH v3 08/14] iio: bmg160_core: " Matti Vaittinen
2022-08-19 23:30   ` Andy Shevchenko
2022-08-20  6:19     ` Vaittinen, Matti
2022-08-20  6:25       ` Andy Shevchenko
2022-08-20  6:48         ` Vaittinen, Matti
2022-08-20  7:18           ` Andy Shevchenko
2022-08-20 10:05             ` Matti Vaittinen [this message]
2022-08-20 16:21               ` Andy Shevchenko
2022-08-20 17:27                 ` Matti Vaittinen
2022-08-21 13:08                   ` Andy Shevchenko
2022-08-22  5:50                     ` Vaittinen, Matti
2022-08-20 11:38       ` Jonathan Cameron
2022-08-20 13:20         ` Matti Vaittinen
2022-08-20 11:22   ` Jonathan Cameron
2022-08-20 13:26     ` Matti Vaittinen
2022-10-16 16:08   ` Jonathan Cameron
2022-10-17  4:28     ` Matti Vaittinen
2022-08-19 19:19 ` [PATCH v3 09/14] iio: st_lsm6dsx: " Matti Vaittinen
2022-10-16 16:11   ` Jonathan Cameron
2022-08-19 19:20 ` [PATCH v3 10/14] iio: ad7476: simplify using devm_regulator_get_enable() Matti Vaittinen
2022-08-30 11:44   ` Sa, Nuno
2022-10-16 16:12     ` Jonathan Cameron
2022-08-19 19:20 ` [PATCH v3 11/14] iio: ad7606: " Matti Vaittinen
2022-08-30 11:46   ` Sa, Nuno
2022-08-30 12:54     ` Matti Vaittinen
2022-10-16 16:15       ` Jonathan Cameron
2022-10-16 16:24         ` Jonathan Cameron
2022-10-17  4:32           ` Matti Vaittinen
2022-08-19 19:20 ` [PATCH v3 12/14] iio: max1241: " Matti Vaittinen
2022-08-19 19:58   ` Alexandru Lazar
2022-10-16 16:17     ` Jonathan Cameron
2022-08-19 19:20 ` [PATCH v3 13/14] iio: max1363: " Matti Vaittinen
2022-08-30 11:50   ` Sa, Nuno
2022-10-16 16:18     ` Jonathan Cameron
2022-10-16 16:37       ` Jonathan Cameron
2022-08-19 19:21 ` [PATCH v3 14/14] iio: hmc425a: " Matti Vaittinen
2022-08-30 11:49   ` Sa, Nuno
2022-08-30 13:00     ` Matti Vaittinen
2022-08-30 13:55       ` Sa, Nuno
2022-10-16 16:20         ` Jonathan Cameron
2022-08-19 23:27 ` [PATCH v3 00/14] Use devm helpers for regulator get and enable Andy Shevchenko

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=cff8d041-f3c4-3faf-85a9-acabe60d2de2@gmail.com \
    --to=mazziesaccount@gmail.com \
    --cc=Matti.Vaittinen@fi.rohmeurope.com \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=andy.shevchenko@gmail.com \
    --cc=jic23@kernel.org \
    --cc=lars@metafoo.de \
    --cc=linmq006@gmail.com \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=wangxiang@cdjrlc.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).