Lines Matching +full:cpu +full:- +full:offset
1 // SPDX-License-Identifier: GPL-2.0
18 #include "tick-internal.h"
21 int cpu; member
28 * to the console (on SysRq-Q):
49 SEQ_printf(m, " #%d: <%pK>, %ps", idx, taddr, timer->function); in print_timer()
50 SEQ_printf(m, ", S:%02x", timer->state); in print_timer()
52 SEQ_printf(m, " # expires at %Lu-%Lu nsecs [in %Ld to %Ld nsecs]\n", in print_timer()
55 (long long)(ktime_to_ns(hrtimer_get_softexpires(timer)) - now), in print_timer()
56 (long long)(ktime_to_ns(hrtimer_get_expires(timer)) - now)); in print_timer()
73 raw_spin_lock_irqsave(&base->cpu_base->lock, flags); in print_active_timers()
75 curr = timerqueue_getnext(&base->active); in print_active_timers()
89 raw_spin_unlock_irqrestore(&base->cpu_base->lock, flags); in print_active_timers()
95 raw_spin_unlock_irqrestore(&base->cpu_base->lock, flags); in print_active_timers()
102 SEQ_printf(m, " .index: %d\n", base->index); in print_base()
106 SEQ_printf(m, " .get_time: %ps\n", base->get_time); in print_base()
108 SEQ_printf(m, " .offset: %Lu nsecs\n", in print_base()
109 (unsigned long long) ktime_to_ns(base->offset)); in print_base()
112 print_active_timers(m, base, now + ktime_to_ns(base->offset)); in print_base()
115 static void print_cpu(struct seq_file *m, int cpu, u64 now) in print_cpu() argument
117 struct hrtimer_cpu_base *cpu_base = &per_cpu(hrtimer_bases, cpu); in print_cpu()
120 SEQ_printf(m, "cpu: %d\n", cpu); in print_cpu()
123 print_base(m, cpu_base->clock_base + i, now); in print_cpu()
126 SEQ_printf(m, " .%-15s: %Lu\n", #x, \ in print_cpu()
127 (unsigned long long)(cpu_base->x)) in print_cpu()
129 SEQ_printf(m, " .%-15s: %Lu nsecs\n", #x, \ in print_cpu()
130 (unsigned long long)(ktime_to_ns(cpu_base->x))) in print_cpu()
145 SEQ_printf(m, " .%-15s: %Lu\n", #x, \ in print_cpu()
146 (unsigned long long)(ts->x)) in print_cpu()
148 SEQ_printf(m, " .%-15s: %Lu nsecs\n", #x, \ in print_cpu()
149 (unsigned long long)(ktime_to_ns(ts->x))) in print_cpu()
151 SEQ_printf(m, " .%-15s: %d\n", #x, !!(ts->flags & (f))) in print_cpu()
154 struct tick_sched *ts = tick_get_tick_sched(cpu); in print_cpu()
182 print_tickdevice(struct seq_file *m, struct tick_device *td, int cpu) in print_tickdevice() argument
184 struct clock_event_device *dev = td->evtdev; in print_tickdevice()
188 SEQ_printf(m, "Tick Device: mode: %d\n", td->mode); in print_tickdevice()
189 if (cpu < 0) in print_tickdevice()
192 SEQ_printf(m, "Per CPU device: %d\n", cpu); in print_tickdevice()
199 SEQ_printf(m, "%s\n", dev->name); in print_tickdevice()
201 (unsigned long long) dev->max_delta_ns); in print_tickdevice()
203 (unsigned long long) dev->min_delta_ns); in print_tickdevice()
204 SEQ_printf(m, " mult: %u\n", dev->mult); in print_tickdevice()
205 SEQ_printf(m, " shift: %u\n", dev->shift); in print_tickdevice()
208 (unsigned long long) ktime_to_ns(dev->next_event)); in print_tickdevice()
210 SEQ_printf(m, " set_next_event: %ps\n", dev->set_next_event); in print_tickdevice()
212 if (dev->set_state_shutdown) in print_tickdevice()
214 dev->set_state_shutdown); in print_tickdevice()
216 if (dev->set_state_periodic) in print_tickdevice()
218 dev->set_state_periodic); in print_tickdevice()
220 if (dev->set_state_oneshot) in print_tickdevice()
222 dev->set_state_oneshot); in print_tickdevice()
224 if (dev->set_state_oneshot_stopped) in print_tickdevice()
226 dev->set_state_oneshot_stopped); in print_tickdevice()
228 if (dev->tick_resume) in print_tickdevice()
230 dev->tick_resume); in print_tickdevice()
232 SEQ_printf(m, " event_handler: %ps\n", dev->event_handler); in print_tickdevice()
234 SEQ_printf(m, " retries: %lu\n", dev->retries); in print_tickdevice()
237 if (cpu >= 0) { in print_tickdevice()
238 const struct clock_event_device *wd = tick_get_wakeup_device(cpu); in print_tickdevice()
240 SEQ_printf(m, "Wakeup Device: %s\n", wd ? wd->name : "<NULL>"); in print_tickdevice()
249 print_tickdevice(m, tick_get_broadcast_device(), -1); in timer_list_show_tickdevices_header()
272 int cpu; in sysrq_timer_list_show() local
276 for_each_online_cpu(cpu) in sysrq_timer_list_show()
277 print_cpu(NULL, cpu, now); in sysrq_timer_list_show()
281 for_each_online_cpu(cpu) in sysrq_timer_list_show()
282 print_tickdevice(NULL, tick_get_device(cpu), cpu); in sysrq_timer_list_show()
292 if (iter->cpu == -1 && !iter->second_pass) in timer_list_show()
293 timer_list_header(m, iter->now); in timer_list_show()
294 else if (!iter->second_pass) in timer_list_show()
295 print_cpu(m, iter->cpu, iter->now); in timer_list_show()
297 else if (iter->cpu == -1 && iter->second_pass) in timer_list_show()
300 print_tickdevice(m, tick_get_device(iter->cpu), iter->cpu); in timer_list_show()
305 static void *move_iter(struct timer_list_iter *iter, loff_t offset) in move_iter() argument
307 for (; offset; offset--) { in move_iter()
308 iter->cpu = cpumask_next(iter->cpu, cpu_online_mask); in move_iter()
309 if (iter->cpu >= nr_cpu_ids) { in move_iter()
311 if (!iter->second_pass) { in move_iter()
312 iter->cpu = -1; in move_iter()
313 iter->second_pass = true; in move_iter()
324 static void *timer_list_start(struct seq_file *file, loff_t *offset) in timer_list_start() argument
326 struct timer_list_iter *iter = file->private; in timer_list_start()
328 if (!*offset) in timer_list_start()
329 iter->now = ktime_to_ns(ktime_get()); in timer_list_start()
330 iter->cpu = -1; in timer_list_start()
331 iter->second_pass = false; in timer_list_start()
332 return move_iter(iter, *offset); in timer_list_start()
335 static void *timer_list_next(struct seq_file *file, void *v, loff_t *offset) in timer_list_next() argument
337 struct timer_list_iter *iter = file->private; in timer_list_next()
338 ++*offset; in timer_list_next()
360 return -ENOMEM; in init_timer_list_procfs()