Hi, On 3/19/23 01:08, Mark Pearson wrote: > On Sat, Mar 18, 2023, at 7:52 PM, Thomas Weißschuh wrote: >> On Sat, Mar 18, 2023 at 01:53:33PM -0400, Mark Pearson wrote: >>> Thanks Thomas >>> >>> On Sat, Mar 18, 2023, at 12:35 PM, Thomas Weißschuh wrote: >>>> Hi Mark, >>>> >>>> please also CC linux-kernel@xxxxxxxxxxxxxxx and previous reviewers. >>>> >>>> On Fri, Mar 17, 2023 at 11:46:34AM -0400, Mark Pearson wrote: >>>>> -static struct kobj_attribute attr_current_val = __ATTR_RW_MODE(current_value, 0600); >>>>> +static ssize_t type_show(struct kobject *kobj, struct kobj_attribute *attr, >>>>> + char *buf) >>>>> +{ >>>>> + struct tlmi_attr_setting *setting = to_tlmi_attr_setting(kobj); >>>>> + >>>>> + if (setting->possible_values) { >>>>> + /* Figure out what setting type is as BIOS does not return this */ >>>>> + if (strchr(setting->possible_values, ',')) >>>>> + return sysfs_emit(buf, "enumeration\n"); >>>>> + } >>>>> + /* Anything else is going to be a string */ >>>>> + return sysfs_emit(buf, "string\n"); >>>>> +} >>>> >>>> This patch seems to introduce a lot of churn, is it intentional? >>> Yes(ish). It got cleaned up as the functions were in a weird order when I introduced the is_visible. The actual changes are very small - but it did make it look messier than it really is. >>> Is this a big concern? I know it makes the review a bit more painful and my apologies for that. >> >> Not a big concern. The shuffling around could be done in a dedicated >> patch that explicitly only moves code around. >> >>>>> @@ -1440,6 +1451,25 @@ static int tlmi_analyze(void) >>>>> if (ret || !setting->possible_values) >>>>> pr_info("Error retrieving possible values for %d : %s\n", >>>>> i, setting->display_name); >>>>> + } else { >>>>> + /* >>>>> + * Older Thinkstations don't support the bios_selections API. >>>>> + * Instead they store this as a [Optional:Option1,Option2] section of the >>>>> + * name string. >>>>> + * Try and pull that out if it's available. >>>>> + */ >>>>> + char *item, *optstart, *optend; >>>>> + >>>>> + if (!tlmi_setting(setting->index, &item, LENOVO_BIOS_SETTING_GUID)) { >>>>> + optstart = strstr(item, "[Optional:"); >>>>> + if (optstart) { >>>>> + optstart += strlen("[Optional:"); >>>>> + optend = strstr(optstart, "]"); >>>>> + if (optend) >>>>> + setting->possible_values = >>>>> + kstrndup(optstart, optend - optstart, GFP_KERNEL); >>>>> + } >>>>> + } >>>> >>>> The patch now does two things: >>>> 1) Hide the sysfs attributes if the value is not available >>>> 2) Extract the value from the description >>>> >>>> Maybe it could be split in two? >>> Sure. I did contemplate that and then ultimately decided it was all from the same intent so left it. But I can split. >> >> Would look nicer to me, but it's only one opinion. > > I have worked through this and it is nicer. Next version will be split (and I unwound some of the code re-org too). > I'm going to hold off a couple of days before pushing the changes for review in case there are other pieces of feedback. Thomas, many thanks for all the reviews! Mark, since Thomas is doing such a great job of reviewing this patch-set, don't expect any remarks from me before you post the next version. IOW if the next version is ready, don't wait for my feedback before submitting it :) Regards, Hans > > Mark >