Search Linux Wireless

Re: [PATCH] [thermal] adding check if the thermal firmware is running

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

 



Okay, this makes sense.
I will send a new patch with your suggestions.

Thanks


Em sex., 17 de mai. de 2024 às 07:20, Wysocki, Rafael J
<rafael.j.wysocki@xxxxxxxxx> escreveu:
>
>
> On 5/16/2024 10:05 PM, Guilherme Giacomo Simoes wrote:
> > in the dmesg is showing the message "failed to read out thermal zone"
> > as if the temperature read is failed by don't find the thermal zone.
> >
> > After researching and debugging, I see that this specific error is
> > occurrence because the thermal try read the temperature when is started,
> > but the firmware is not running yet.
> >
> > For more legibiliti i create the NOTLOAD error code in the errno-base.h,
> > and in the iwl_mvm_tzone_get_temp() on tt.c i check if firmware is
> > running and I set the NOTLOAD code for ret variable and goto out.
> >
> > After this, in the update_temperature() in the thermal_code.c i received
> > the return of thermal_zone_get_temp() and check if return is NOTLOAD,
> > because if it is, I print the warning message "firmware yet not load"
> > and return for caller
> >
> > The thermal_core.c i think that is generic for any thermal drivers and
> > not only used for tt.c of course.
> > But if this ipotetic driver not check if firmware is running before read
> > the temperature, the thermal_code.c is work as a before this change.
> >
> > After this change, in my computer I compile and install kernel in /boot
> > and in my dmesg the message "failed to read out thermal zone" is not
> > show any more. In your place the warning messafe "Firmware yet not
> > load" is showing.
> >
> > I would like to thank you in advance for any contribution, suggestion
> > or criticism of my patch suggestion.
> > ---
> >   drivers/net/wireless/intel/iwlwifi/mvm/tt.c | 10 ++++++++--
> >   drivers/thermal/thermal_core.c              | 10 +++++++---
> >   include/uapi/asm-generic/errno-base.h       |  1 +
> >   3 files changed, 16 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tt.c b/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
> > index 8083c4b2ab6b..dd5725db06d2 100644
> > --- a/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
> > +++ b/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
> > @@ -620,8 +620,14 @@ static int iwl_mvm_tzone_get_temp(struct thermal_zone_device *device,
> >
> >       mutex_lock(&mvm->mutex);
> >
> > -     if (!iwl_mvm_firmware_running(mvm) ||
> > -         mvm->fwrt.cur_fw_img != IWL_UCODE_REGULAR) {
> > +     const int res = iwl_mvm_firmware_running(mvm);
> > +
> > +     if (!res) {
> > +             ret = -NOTLOAD;
> > +             goto out;
> > +     }
> > +
> > +     if (mvm->fwrt.cur_fw_img != IWL_UCODE_REGULAR) {
> >               ret = -ENODATA;
> >               goto out;
> >       }
> > diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
> > index 34a31bc72023..4116d312d4a1 100644
> > --- a/drivers/thermal/thermal_core.c
> > +++ b/drivers/thermal/thermal_core.c
> > @@ -414,10 +414,14 @@ static void handle_thermal_trip(struct thermal_zone_device *tz,
> >
> >   static void update_temperature(struct thermal_zone_device *tz)
> >   {
> > -     int temp, ret;
> > -
> > -     ret = __thermal_zone_get_temp(tz, &temp);
> > +     int temp;
> > +     int ret = __thermal_zone_get_temp(tz, &temp);
> >       if (ret) {
> > +             if (ret == -NOTLOAD) {
> > +                     pr_warn("Firmware yet not load");
> > +                     return;
> > +             }
> > +
>
> The thermal core doesn't need to be modified for this.
>
> Please print the new message from the driver and you may as well return
> -EAGAIN from it in all cases when the issue is expected to be
> intermittent to prevent the core from printing the (existing) warning
> message.
>
> Thanks!
>
>
> >               if (ret != -EAGAIN)
> >                       dev_warn(&tz->device,
> >                                "failed to read out thermal zone (%d)\n",
> > diff --git a/include/uapi/asm-generic/errno-base.h b/include/uapi/asm-generic/errno-base.h
> > index 9653140bff92..8b92c41f7993 100644
> > --- a/include/uapi/asm-generic/errno-base.h
> > +++ b/include/uapi/asm-generic/errno-base.h
> > @@ -36,5 +36,6 @@
> >   #define     EPIPE           32      /* Broken pipe */
> >   #define     EDOM            33      /* Math argument out of domain of func */
> >   #define     ERANGE          34      /* Math result not representable */
> > +#define      NOTLOAD         35      /* Firmware yet not load */
> >
> >   #endif





[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux