Lines Matching refs:ii_dev

38 #define pr_fmt(fmt) "ii_dev: " fmt
81 * @ii_dev: target idle injection device
86 static void idle_inject_wakeup(struct idle_inject_device *ii_dev)
91 for_each_cpu_and(cpu, to_cpumask(ii_dev->cpumask), cpu_online_mask) {
111 struct idle_inject_device *ii_dev =
114 duration_us = READ_ONCE(ii_dev->run_duration_us);
115 duration_us += READ_ONCE(ii_dev->idle_duration_us);
117 idle_inject_wakeup(ii_dev);
133 struct idle_inject_device *ii_dev;
136 ii_dev = per_cpu(idle_inject_device, cpu);
144 play_idle_precise(READ_ONCE(ii_dev->idle_duration_us) * NSEC_PER_USEC,
145 READ_ONCE(ii_dev->latency_us) * NSEC_PER_USEC);
153 void idle_inject_set_duration(struct idle_inject_device *ii_dev,
158 WRITE_ONCE(ii_dev->run_duration_us, run_duration_us);
159 WRITE_ONCE(ii_dev->idle_duration_us, idle_duration_us);
168 void idle_inject_get_duration(struct idle_inject_device *ii_dev,
172 *run_duration_us = READ_ONCE(ii_dev->run_duration_us);
173 *idle_duration_us = READ_ONCE(ii_dev->idle_duration_us);
180 void idle_inject_set_latency(struct idle_inject_device *ii_dev,
183 WRITE_ONCE(ii_dev->latency_us, latency_us);
188 * @ii_dev: idle injection control device structure
191 * injection kthreads associated with @ii_dev to let them inject CPU idle time
196 int idle_inject_start(struct idle_inject_device *ii_dev)
198 unsigned int idle_duration_us = READ_ONCE(ii_dev->idle_duration_us);
199 unsigned int run_duration_us = READ_ONCE(ii_dev->run_duration_us);
205 cpumask_pr_args(to_cpumask(ii_dev->cpumask)));
207 idle_inject_wakeup(ii_dev);
209 hrtimer_start(&ii_dev->timer,
219 * @ii_dev: idle injection control device structure
228 void idle_inject_stop(struct idle_inject_device *ii_dev)
234 cpumask_pr_args(to_cpumask(ii_dev->cpumask)));
236 hrtimer_cancel(&ii_dev->timer);
251 * the ii_dev has been freed.
253 for_each_cpu(cpu, to_cpumask(ii_dev->cpumask)) {
302 struct idle_inject_device *ii_dev;
305 ii_dev = kzalloc(sizeof(*ii_dev) + cpumask_size(), GFP_KERNEL);
306 if (!ii_dev)
309 cpumask_copy(to_cpumask(ii_dev->cpumask), cpumask);
310 hrtimer_init(&ii_dev->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
311 ii_dev->timer.function = idle_inject_timer_fn;
312 ii_dev->latency_us = UINT_MAX;
314 for_each_cpu(cpu, to_cpumask(ii_dev->cpumask)) {
321 per_cpu(idle_inject_device, cpu) = ii_dev;
324 return ii_dev;
327 for_each_cpu(cpu_rb, to_cpumask(ii_dev->cpumask)) {
333 kfree(ii_dev);
340 * @ii_dev: idle injection control device to unregister
346 void idle_inject_unregister(struct idle_inject_device *ii_dev)
350 idle_inject_stop(ii_dev);
352 for_each_cpu(cpu, to_cpumask(ii_dev->cpumask))
355 kfree(ii_dev);