Lines Matching defs:ii_dev

38 #define pr_fmt(fmt) "ii_dev: " fmt
97 * @ii_dev: target idle injection device
102 static void idle_inject_wakeup(struct idle_inject_device *ii_dev)
107 for_each_cpu_and(cpu, to_cpumask(ii_dev->cpumask), cpu_online_mask) {
127 struct idle_inject_device *ii_dev =
130 if (!ii_dev->update || (ii_dev->update && ii_dev->update()))
131 idle_inject_wakeup(ii_dev);
133 duration_us = READ_ONCE(ii_dev->run_duration_us);
134 duration_us += READ_ONCE(ii_dev->idle_duration_us);
150 struct idle_inject_device *ii_dev;
153 ii_dev = per_cpu(idle_inject_device, cpu);
161 play_idle_precise(READ_ONCE(ii_dev->idle_duration_us) * NSEC_PER_USEC,
162 READ_ONCE(ii_dev->latency_us) * NSEC_PER_USEC);
167 * @ii_dev: idle injection control device structure
171 void idle_inject_set_duration(struct idle_inject_device *ii_dev,
176 WRITE_ONCE(ii_dev->run_duration_us, run_duration_us);
177 WRITE_ONCE(ii_dev->idle_duration_us, idle_duration_us);
186 * @ii_dev: idle injection control device structure
190 void idle_inject_get_duration(struct idle_inject_device *ii_dev,
194 *run_duration_us = READ_ONCE(ii_dev->run_duration_us);
195 *idle_duration_us = READ_ONCE(ii_dev->idle_duration_us);
201 * @ii_dev: idle injection control device structure
204 void idle_inject_set_latency(struct idle_inject_device *ii_dev,
207 WRITE_ONCE(ii_dev->latency_us, latency_us);
213 * @ii_dev: idle injection control device structure
216 * injection kthreads associated with @ii_dev to let them inject CPU idle time
221 int idle_inject_start(struct idle_inject_device *ii_dev)
223 unsigned int idle_duration_us = READ_ONCE(ii_dev->idle_duration_us);
224 unsigned int run_duration_us = READ_ONCE(ii_dev->run_duration_us);
230 cpumask_pr_args(to_cpumask(ii_dev->cpumask)));
232 idle_inject_wakeup(ii_dev);
234 hrtimer_start(&ii_dev->timer,
245 * @ii_dev: idle injection control device structure
254 void idle_inject_stop(struct idle_inject_device *ii_dev)
260 cpumask_pr_args(to_cpumask(ii_dev->cpumask)));
262 hrtimer_cancel(&ii_dev->timer);
277 * the ii_dev has been freed.
279 for_each_cpu(cpu, to_cpumask(ii_dev->cpumask)) {
334 struct idle_inject_device *ii_dev;
337 ii_dev = kzalloc(sizeof(*ii_dev) + cpumask_size(), GFP_KERNEL);
338 if (!ii_dev)
341 cpumask_copy(to_cpumask(ii_dev->cpumask), cpumask);
342 hrtimer_init(&ii_dev->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
343 ii_dev->timer.function = idle_inject_timer_fn;
344 ii_dev->latency_us = UINT_MAX;
345 ii_dev->update = update;
347 for_each_cpu(cpu, to_cpumask(ii_dev->cpumask)) {
354 per_cpu(idle_inject_device, cpu) = ii_dev;
357 return ii_dev;
360 for_each_cpu(cpu_rb, to_cpumask(ii_dev->cpumask)) {
366 kfree(ii_dev);
391 * @ii_dev: idle injection control device to unregister
397 void idle_inject_unregister(struct idle_inject_device *ii_dev)
401 idle_inject_stop(ii_dev);
403 for_each_cpu(cpu, to_cpumask(ii_dev->cpumask))
406 kfree(ii_dev);