• Rafael J. Wysocki's avatar
    thermal: core: Move passive polling management to the core · 042a3d80
    Rafael J. Wysocki authored
    Passive polling is enabled by setting the 'passive' field in
    struct thermal_zone_device to a positive value so long as the
    'passive_delay_jiffies' field is greater than zero.  It causes
    the thermal core to actively check the thermal zone temperature
    periodically which in theory should be done after crossing a
    passive trip point on the way up in order to allow governors to
    react more rapidly to temperature changes and adjust mitigation
    more precisely.
    
    However, the 'passive' field in struct thermal_zone_device is currently
    managed by governors which is quite problematic.  First of all, only
    two governors, Step-Wise and Power Allocator, update that field at
    all, so the other governors do not benefit from passive polling,
    although in principle they should.  Moreover, if the zone governor is
    changed from, say, Step-Wise to Fair-Share after 'passive' has been
    incremented by the former, it is not going to be reset back to zero by
    the latter even if the zone temperature falls down below all passive
    trip points.
    
    For this reason, make handle_thermal_trip() increment 'passive'
    to enable passive polling for the given thermal zone whenever a
    passive trip point is crossed on the way up and decrement it
    whenever a passive trip point is crossed on the way down.  Also
    remove the 'passive' field updates from governors and additionally
    clear it in thermal_zone_device_init() to prevent passive polling
    from being enabled after a system resume just beacuse it was enabled
    before suspending the system.
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Reviewed-by: default avatarLukasz Luba <lukasz.luba@arm.com>
    Tested-by: default avatarLukasz Luba <lukasz.luba@arm.com>
    042a3d80
thermal_core.c 43.8 KB