Re: [PATCH] platform/x86: touchscreen_dmi: Add support for setting touchscreen properties from cmdline

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, May 23, 2024 at 11:47 AM Hans de Goede <hdegoede@xxxxxxxxxx> wrote:
> On 5/22/24 9:32 PM, Andy Shevchenko wrote:
> > On Wed, May 22, 2024 at 9:40 PM Hans de Goede <hdegoede@xxxxxxxxxx> wrote:
> >> On 5/22/24 7:19 PM, Andy Shevchenko wrote:
> >>> On Wed, May 22, 2024 at 06:48:07PM +0200, Hans de Goede wrote:

...

> >>>> +    /*
> >>>> +     * str is part of the static_command_line from init/main.c and poking
> >>>> +     * holes in that by writing 0 to it is allowed, as is taking long
> >>>> +     * lasting references to it.
> >>>> +     */
> >>>> +    ts_cmdline_data.acpi_name = strsep(&str, ",");
> >>>> +
> >>>> +    for (i = 0; i < MAX_CMDLINE_PROPS; i++) {
> >>>> +            name = strsep(&str, ",");
> >>>> +            if (!name)
> >>>> +                    break;
> >>>> +
> >>>> +            /* Replace '=' with 0 and make value point past '=' or NULL */
> >>>> +            value = name;
> >>>> +            strsep(&value, "=");
> >>>> +            if (!value) {
> >>>> +                    ts_cmdline_props[i] = PROPERTY_ENTRY_BOOL(name);
> >>>> +            } else if (isdigit(value[0])) {
> >>>> +                    ret = kstrtou32(value, 10, &u32val);
> >>>> +                    if (ret)
> >>>> +                            return ret;
> >>>> +
> >>>> +                    ts_cmdline_props[i] = PROPERTY_ENTRY_U32(name, u32val);
> >>>> +            } else {
> >>>> +                    ts_cmdline_props[i] = PROPERTY_ENTRY_STRING(name, value);
> >>>> +            }
> >>>> +    }
> >>>
> >>> This reminds me a lot from the next_arg(), can we not reinvent a wheel?
> >>
> >> next_arg is meant for parsing different arguments on the kernel cmdline
> >> split by spaces. It has space as separator hardcoded so it cannot be
> >> used here.
> >
> > I believe it's not the first time I hear such an excuse for
> > duplicating Yet Another (Same) Parser.
> > If you think you really need another separator, we may patch
> > next_arg() or add next_arg_any(is_separator_fn *fn) and make
> > next_arg() to be a wrapper of the other one.
>
> The kernel already has a generic parser for most things in the form of
> include/linux/parser.h but that will not work here since that assumes
> a list of fixed keywords while in this case I want to allow any keyword
> and change it into a device-property with that name.

I know about that and that's why I haven't suggested it.

> Also the actual splitting into key=value code here is maybe 5 lines,
> the whole patch itself is not that big and most of the parsing is
> figuring out if value represents a bool, uint or string.

Yeah, 5 strings here, 5 bugs there and duplicating all over in the
kernel in zillions copies. This is not good. We should not duplicate
things, we should deduplicate them. And as I said, your excuse is
being repeated not the first time. This is also not good.

> And the kind of refactoring of next_arg() you are asking for here
> is way out of scope,

Of course, of course, but why introduce Yet Another Parser to begin with?

> so sorry but I don't plan to change this part
> of the patch.

This is not good.
But I have no power to stop it, while being very sad about this attitude.


-- 
With Best Regards,
Andy Shevchenko





[Index of Archives]     [Linux Kernel Development]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux