Lines Matching +full:int +full:- +full:threshold
2 * ladder.c - the residency ladder algorithm
8 * (C) 2006-2007 Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
32 } threshold; member
34 int promotion_count;
35 int demotion_count;
46 * ladder_do_selection - prepares private data for a state change
53 int old_idx, int new_idx) in ladder_do_selection()
55 ldev->states[old_idx].stats.promotion_count = 0; in ladder_do_selection()
56 ldev->states[old_idx].stats.demotion_count = 0; in ladder_do_selection()
57 dev->last_state_idx = new_idx; in ladder_do_selection()
61 * ladder_select_state - selects the next state to enter
66 static int ladder_select_state(struct cpuidle_driver *drv, in ladder_select_state()
71 int last_idx = dev->last_state_idx; in ladder_select_state()
72 int first_idx = drv->states[0].flags & CPUIDLE_FLAG_POLLING ? 1 : 0; in ladder_select_state()
73 s64 latency_req = cpuidle_governor_latency_req(dev->cpu); in ladder_select_state()
82 last_state = &ldev->states[last_idx]; in ladder_select_state()
84 last_residency = dev->last_residency_ns - drv->states[last_idx].exit_latency_ns; in ladder_select_state()
87 if (last_idx < drv->state_count - 1 && in ladder_select_state()
88 !dev->states_usage[last_idx + 1].disable && in ladder_select_state()
89 last_residency > last_state->threshold.promotion_time_ns && in ladder_select_state()
90 drv->states[last_idx + 1].exit_latency_ns <= latency_req) { in ladder_select_state()
91 last_state->stats.promotion_count++; in ladder_select_state()
92 last_state->stats.demotion_count = 0; in ladder_select_state()
93 if (last_state->stats.promotion_count >= last_state->threshold.promotion_count) { in ladder_select_state()
101 (dev->states_usage[last_idx].disable || in ladder_select_state()
102 drv->states[last_idx].exit_latency_ns > latency_req)) { in ladder_select_state()
103 int i; in ladder_select_state()
105 for (i = last_idx - 1; i > first_idx; i--) { in ladder_select_state()
106 if (drv->states[i].exit_latency_ns <= latency_req) in ladder_select_state()
114 last_residency < last_state->threshold.demotion_time_ns) { in ladder_select_state()
115 last_state->stats.demotion_count++; in ladder_select_state()
116 last_state->stats.promotion_count = 0; in ladder_select_state()
117 if (last_state->stats.demotion_count >= last_state->threshold.demotion_count) { in ladder_select_state()
118 ladder_do_selection(dev, ldev, last_idx, last_idx - 1); in ladder_select_state()
119 return last_idx - 1; in ladder_select_state()
128 * ladder_enable_device - setup for the governor
132 static int ladder_enable_device(struct cpuidle_driver *drv, in ladder_enable_device()
135 int i; in ladder_enable_device()
136 int first_idx = drv->states[0].flags & CPUIDLE_FLAG_POLLING ? 1 : 0; in ladder_enable_device()
137 struct ladder_device *ldev = &per_cpu(ladder_devices, dev->cpu); in ladder_enable_device()
141 dev->last_state_idx = first_idx; in ladder_enable_device()
143 for (i = first_idx; i < drv->state_count; i++) { in ladder_enable_device()
144 state = &drv->states[i]; in ladder_enable_device()
145 lstate = &ldev->states[i]; in ladder_enable_device()
147 lstate->stats.promotion_count = 0; in ladder_enable_device()
148 lstate->stats.demotion_count = 0; in ladder_enable_device()
150 lstate->threshold.promotion_count = PROMOTION_COUNT; in ladder_enable_device()
151 lstate->threshold.demotion_count = DEMOTION_COUNT; in ladder_enable_device()
153 if (i < drv->state_count - 1) in ladder_enable_device()
154 lstate->threshold.promotion_time_ns = state->exit_latency_ns; in ladder_enable_device()
156 lstate->threshold.demotion_time_ns = state->exit_latency_ns; in ladder_enable_device()
163 * ladder_reflect - update the correct last_state_idx
167 static void ladder_reflect(struct cpuidle_device *dev, int index) in ladder_reflect()
170 dev->last_state_idx = index; in ladder_reflect()
182 * init_ladder - initializes the governor
184 static int __init init_ladder(void) in init_ladder()