// SPDX-License-Identifier: GPL-2.0-only /* * fair_share.c - A simple weight based Thermal governor * * Copyright (C) 2012 Intel Corp * Copyright (C) 2012 Durgadoss R <[email protected]> * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ #include <linux/thermal.h> #include "thermal_trace.h" #include "thermal_core.h" static int get_trip_level(struct thermal_zone_device *tz) { … } /** * fair_share_throttle - throttles devices associated with the given zone * @tz: thermal_zone_device * @trip: trip point * @trip_level: number of trips crossed by the zone temperature * * Throttling Logic: This uses three parameters to calculate the new * throttle state of the cooling devices associated with the given zone. * * Parameters used for Throttling: * P1. max_state: Maximum throttle state exposed by the cooling device. * P2. weight[i]/total_weight: * How 'effective' the 'i'th device is, in cooling the given zone. * P3. trip_level/max_no_of_trips: * This describes the extent to which the devices should be throttled. * We do not want to throttle too much when we trip a lower temperature, * whereas the throttling is at full swing if we trip critical levels. * new_state of cooling device = P3 * P2 * P1 */ static void fair_share_throttle(struct thermal_zone_device *tz, const struct thermal_trip *trip, int trip_level) { … } static void fair_share_manage(struct thermal_zone_device *tz) { … } static struct thermal_governor thermal_gov_fair_share = …; THERMAL_GOVERNOR_DECLARE(…) …;