• Antoine Tenart's avatar
    thermal/drivers/int340x: Do not set a wrong tcc offset on resume · 8b4bd256
    Antoine Tenart authored
    After upgrading to Linux 5.13.3 I noticed my laptop would shutdown due
    to overheat (when it should not). It turned out this was due to commit
    fe6a6de6 ("thermal/drivers/int340x/processor_thermal: Fix tcc setting").
    
    What happens is this drivers uses a global variable to keep track of the
    tcc offset (tcc_offset_save) and uses it on resume. The issue is this
    variable is initialized to 0, but is only set in
    tcc_offset_degree_celsius_store, i.e. when the tcc offset is explicitly
    set by userspace. If that does not happen, the resume path will set the
    offset to 0 (in my case the h/w default being 3, the offset would become
    too low after a suspend/resume cycle).
    
    The issue did not arise before commit fe6a6de6, as the function
    setting the offset would return if the offset was 0. This is no longer
    the case (rightfully).
    
    Fix this by not applying the offset if it wasn't saved before, reverting
    back to the old logic. A better approach will come later, but this will
    be easier to apply to stable kernels.
    
    The logic to restore the offset after a resume was there long before
    commit fe6a6de6, but as a value of 0 was considered invalid I'm
    referencing the commit that made the issue possible in the Fixes tag
    instead.
    
    Fixes: fe6a6de6 ("thermal/drivers/int340x/processor_thermal: Fix tcc setting")
    Cc: stable@vger.kernel.org
    Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Signed-off-by: default avatarAntoine Tenart <atenart@kernel.org>
    Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
    Reviewed-by: default avatarSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Tested-by: Srinivas Pandruvada <srinivas.pI andruvada@linux.intel.com>
    Link: https://lore.kernel.org/r/20210909085613.5577-2-atenart@kernel.org
    8b4bd256
processor_thermal_device.c 10.2 KB