On 09/13/2017 11:29 PM, Greg KH wrote: > On Wed, Sep 13, 2017 at 09:23:31PM +0200, Lars-Peter Clausen wrote: >> On 09/13/2017 08:58 PM, Greg KH wrote: >>> On Wed, Sep 13, 2017 at 06:03:10PM +0100, Jonathan Cameron wrote: >>>> On Wed, 13 Sep 2017 14:14:07 +0530 >>>> Himanshi Jain <himshijain...@gmail.com> wrote: >>>> >>>>> Add __ATTR_NAMED macro similar to __ATTR but taking name as a >>>>> string instead of implicit conversion of argument to string using >>>>> the macro _stringify(_name). >>>>> >>>>> Signed-off-by: Himanshi Jain <himshijain...@gmail.com> >>>>> --- >>>>> include/linux/sysfs.h | 7 +++++++ >>>>> 1 file changed, 7 insertions(+) >>>>> >>>>> diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h >>>>> index aa02c32..20321cf 100644 >>>>> --- a/include/linux/sysfs.h >>>>> +++ b/include/linux/sysfs.h >>>>> @@ -104,6 +104,13 @@ struct attribute_group { >>>>> .store = _store, \ >>>>> } >>>>> >>>>> +#define __ATTR_NAMED(_name, _mode, _show, _store) { >>>>> \ >>>> >>>> I'm not sure about the naming here. The normal __ATTR macro is also >>>> 'named'. Maybe something as awful as >>>> >>>> __ATTR_STRING_NAME ? >>>> >>>> Greg what do you think? >>> >>> ick ick ick. >>> >>>> This is all to allow us to have names with operators in them without >>>> checkpatch complaining about them... A worthwhile aim just to stop >>>> more people wasting time trying to 'fix' those cases by adding spaces. >>> >>> Yeah, but this really seems "heavy" for just a crazy sysfs name in a >>> macro. Adding a whole new "core" define for that is a hard sell... >>> >>> I also want to get rid of the "generic" __ATTR type macros, and force >>> people to use the proper _RW and friends instead. I don't want to add >>> another new one that people will start to use that I later have to >>> change... >>> >>> So no, I don't like this, how about just changing your macros instead? >>> No one else has this problem :) >> >> Nobody else realized they have this problem yet. E.g. there are a few users >> of __ATTR in block/genhd.c that have the same issue and are likely to >> generate the same false positives from static checkers. > > Then fix the broken static checkers :)
The static checkers aren't broken, the macro is. It takes a string parameter, but instead of a string it is passed as an expression and then transformed to string using preprocessor magic in the macro. That's not very good semantics. And hence this gets detected as a false positive, because nobody expects such strange behavior.