• Rafael J. Wysocki's avatar
    thermal: core: Fix the handling of invalid trip points · 8c69a777
    Rafael J. Wysocki authored
    Commit 9ad18043 ("thermal: core: Send trip crossing notifications
    at init time if needed") overlooked the case when a trip point that
    has started as invalid is set to a valid temperature later.  Namely,
    the initial threshold value for all trips is zero, so if a previously
    invalid trip becomes valid and its (new) low temperature is above the
    zone temperature, a spurious trip crossing notification will occur and
    it may trigger the WARN_ON() in handle_thermal_trip().
    
    To address this, set the initial threshold for all trips to INT_MAX.
    
    There is also the case when a valid writable trip becomes invalid that
    requires special handling.  First, in accordance with the change
    mentioned above, the trip's threshold needs to be set to INT_MAX to
    avoid the same issue.  Second, if the trip in question is passive and
    it has been crossed by the thermal zone temperature on the way up, the
    zone's passive count has been incremented and it is in the passive
    polling mode, so its passive count needs to be adjusted to allow the
    passive polling to be turned off eventually.
    
    Fixes: 9ad18043 ("thermal: core: Send trip crossing notifications at init time if needed")
    Fixes: 042a3d80 ("thermal: core: Move passive polling management to the core")
    Reported-by: default avatarZhang Rui <zhang.rui@intel.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Tested-by: default avatarWendy Wang <wendy.wang@intel.com>
    8c69a777
thermal_core.c 44 KB