From: Hans de Goede <hdegoede@redhat.com>
To: Guenter Roeck <linux@roeck-us.net>,
Enver Balalic <balalic.enver@gmail.com>
Cc: mgross@linux.intel.com, jdelvare@suse.com,
platform-driver-x86@vger.kernel.org, pobrn@protonmail.com
Subject: Re: [PATCH v3] platform/x86: hp-wmi: add support for omen laptops
Date: Thu, 26 Aug 2021 16:13:41 +0200 [thread overview]
Message-ID: <fe0690da-459e-03af-995f-40d4005d6280@redhat.com> (raw)
In-Reply-To: <20210825203112.GH432917@roeck-us.net>
Hi,
On 8/25/21 10:31 PM, Guenter Roeck wrote:
> On Wed, Aug 25, 2021 at 06:58:52PM +0200, Enver Balalic wrote:
>> Hi,
>>
>> before I go out and send out a V4 of this, I wanted to check
>> if you agree with the changes I plan on making
>>
> [ ... ]
>
>>>>>> static int thermal_profile_get(void)
>>>>>> {
>>>>>> return hp_wmi_read_int(HPWMI_THERMAL_PROFILE_QUERY);
>>>>>> @@ -946,19 +1092,34 @@ static int thermal_profile_setup(void)
>>>>>> int err, tp;
>>>>>>
>>>>>> tp = thermal_profile_get();
>>>>>> - if (tp < 0)
>>>>>> - return tp;
>>>>>> + if (tp >= 0) {
>>>>>> + /*
>>>>>> + * call thermal profile write command to ensure that the firmware correctly
>>>>>> + * sets the OEM variables for the DPTF
>>>>>> + */
>>>>>> + err = thermal_profile_set(tp);
>>>>>> + if (err)
>>>>>> + return err;
>>>>>>
>>>>>> - /*
>>>>>> - * call thermal profile write command to ensure that the firmware correctly
>>>>>> - * sets the OEM variables for the DPTF
>>>>>> - */
>>>>>> - err = thermal_profile_set(tp);
>>>>>> - if (err)
>>>>>> - return err;
>>>>>> + platform_profile_handler.profile_get = platform_profile_get;
>>>>>> + platform_profile_handler.profile_set = platform_profile_set;
>>>>>> + }
>>>>>
>>>>> I don't really understand the above logic change. Why is
>>>>> the error from thermal_profile_get() now ignored ?
>>>>>
>>>>>>
>>>>>> - platform_profile_handler.profile_get = platform_profile_get,
>>>>>> - platform_profile_handler.profile_set = platform_profile_set,
>>>>>> + tp = omen_thermal_profile_get();
>>>>>> + if (tp >= 0) {
>>>>>> + /*
>>>>>> + * call thermal profile write command to ensure that the firmware correctly
>>>>>> + * sets the OEM variables
>>>>>> + */
>>>>>> + err = omen_thermal_profile_set(tp);
>>>>>> + if (err < 0)
>>>>>> + return err;
>>>>>> +
>>>>>> + platform_profile_handler.profile_get = platform_profile_omen_get;
>>>>>> + platform_profile_handler.profile_set = platform_profile_omen_set;
>>>>>
>>>>> It looks like omen_thermal_profile_get() has priority over
>>>>> thermal_profile_get(). If so, it might make more sense to execute it first
>>>>> and only call thermal_profile_get() if omen_thermal_profile_get() returned
>>>>> an error. If ignoring the result from thermal_profile_get() is on purpose,
>>>>> it might make sense to drop that code entirely.
>>>>>
>>>>> I am not entirely sure I understand what this code is supposed to be doing,
>>>>> though. Some comments might be useful.
>>>> Looking at it again, as it stands this is wrong, the omen code should only
>>>> run if the regular thermal_profile_get() returns an error, and not how it
>>>> is now.
>>>>
>>>> Background to this is that the thermal_profile_get() code doesn't work on
>>>> the Omen, so the omen specific path is needed, but only in the case that
>>>> the regular, non-omen code fails.
>>>>
>>>> As for ignoring the errors, I guess that in the case that both the regular
>>>> thermal_profile_get, and omen_thermal_profile_get fail, this function
>>>> should just return -EOPNOTSUPP instead of returning the error code of the
>>>> last function that ran (omen one) like it does now ?
>>>
>>> I can't really say since I am not that involved in the driver.
>>> All I noticed is that the code is odd and difficult to understand.
>>> There should be a better means to determine if the system is an
>>> "Omen" than trial and error, possibly from its DMI data or maybe
>>> from its WMI GUIDs.
>> I took a look at how the Windows Omen Command Center program detects what machine
>> is an Omen, and I found they match the DMI Board Name against a list of Omen
>> board names. I should do the same in this case.
>
> I would think so, but that is really a decision to be made by the driver
> maintainer.
If the Windows driver uses DMI matching to only use the Omen WMI API
on certain devices, then yes please do the same in the Linux code.
>>>>>> + } else {
>>>>>> + return tp;
>>>>>> + }
>>>>>
>>>>> if (tp < 0)
>>>>> return tp;
>>>>>
>>>>> followed by non-error code would be more common.
>>>>>
>>>>>>
>>>>>> set_bit(PLATFORM_PROFILE_COOL, platform_profile_handler.choices);
>>>>>> set_bit(PLATFORM_PROFILE_BALANCED, platform_profile_handler.choices);
>>>>>> @@ -973,6 +1134,8 @@ static int thermal_profile_setup(void)
>>>>>> return 0;
>>>>>> }
>>>>>>
>>>>>> +static int hp_wmi_hwmon_init(void);
>>>>>> +
>>>>>> static int __init hp_wmi_bios_setup(struct platform_device *device)
>>>>>> {
>>>>>> /* clear detected rfkill devices */
>>>>>> @@ -984,6 +1147,8 @@ static int __init hp_wmi_bios_setup(struct platform_device *device)
>>>>>> if (hp_wmi_rfkill_setup(device))
>>>>>> hp_wmi_rfkill2_setup(device);
>>>>>>
>>>>>> + hp_wmi_hwmon_init();
>>>>>> +
>>>>> This doesn't really make sense. If it is critical, it should abort here.
>>>>> If it isn't, the function should not return an error only for it to be
>>>>> ignored.
>>>>>
>>>>> Also, if hwmon functionality isn't critical, the driver should not depend
>>>>> on HWMON since it performs perfectly fine without it.
>>>> Here if it's running on an omen and HWMON isn't there, there is no reporting
>>>> of fan speeds and the max/auto toggle won't work. So I don't know if that is
>>>> considered `critical`. I would guess not ?
>>>
>>> The point I am trying to make is
>>>
>>> 1) If the return value from hp_wmi_hwmon_init() is ignored,
>>> hp_wmi_hwmon_init() should not return a value.
>>>
>>> 2) If the return value from hp_wmi_hwmon_init() is ignored, the hwmon
>>> functionality is not critical, and the driver should not depend on HWMON.
>>>
>>> "critical", in the sense I meant, means critical to system operation.
>>> The meaning depends on the driver author, of course. I can not really say
>>> if the driver should depend on HWMON or not. All I can say is that it is
>>> inconsistent to make the driver depend on HWMON and then to ignore that
>>> hwmon device instantiation failed.
>> I took a look at how other vendor's WMI drivers handle this, and a couple of
>> them depend on HWMON (asus, gigabyte), while the thinkpad and eeepc ones
>> select HWMON instead of depending on it. Here I think I should just handle
>> this error properly, and leave the HWMON dependency in this driver ?
>
> Ok with me but, again, the maintainer should have an opinion about this.
I would prefer just selecting HWMON in Kconfig and keeping the code clean from
any special handling which may be necessary when HWMON is unset.
Regards,
Hans
prev parent reply other threads:[~2021-08-26 14:13 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-23 18:54 [PATCH v3] platform/x86: hp-wmi: add support for omen laptops Enver Balalic
2021-08-24 17:35 ` Guenter Roeck
2021-08-24 19:11 ` Enver Balalic
2021-08-24 19:32 ` Guenter Roeck
2021-08-25 16:58 ` Enver Balalic
2021-08-25 20:31 ` Guenter Roeck
2021-08-26 14:13 ` Hans de Goede [this message]
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=fe0690da-459e-03af-995f-40d4005d6280@redhat.com \
--to=hdegoede@redhat.com \
--cc=balalic.enver@gmail.com \
--cc=jdelvare@suse.com \
--cc=linux@roeck-us.net \
--cc=mgross@linux.intel.com \
--cc=platform-driver-x86@vger.kernel.org \
--cc=pobrn@protonmail.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).