|
@@ -265,10 +265,9 @@ static inline void timer_list_header(struct seq_file *m, u64 now)
|
|
|
static int timer_list_show(struct seq_file *m, void *v)
|
|
|
{
|
|
|
struct timer_list_iter *iter = v;
|
|
|
- u64 now = ktime_to_ns(ktime_get());
|
|
|
|
|
|
if (iter->cpu == -1 && !iter->second_pass)
|
|
|
- timer_list_header(m, now);
|
|
|
+ timer_list_header(m, iter->now);
|
|
|
else if (!iter->second_pass)
|
|
|
print_cpu(m, iter->cpu, iter->now);
|
|
|
#ifdef CONFIG_GENERIC_CLOCKEVENTS
|
|
@@ -298,33 +297,41 @@ void sysrq_timer_list_show(void)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
-static void *timer_list_start(struct seq_file *file, loff_t *offset)
|
|
|
+static void *move_iter(struct timer_list_iter *iter, loff_t offset)
|
|
|
{
|
|
|
- struct timer_list_iter *iter = file->private;
|
|
|
-
|
|
|
- if (!*offset) {
|
|
|
- iter->cpu = -1;
|
|
|
- iter->now = ktime_to_ns(ktime_get());
|
|
|
- } else if (iter->cpu >= nr_cpu_ids) {
|
|
|
+ for (; offset; offset--) {
|
|
|
+ iter->cpu = cpumask_next(iter->cpu, cpu_online_mask);
|
|
|
+ if (iter->cpu >= nr_cpu_ids) {
|
|
|
#ifdef CONFIG_GENERIC_CLOCKEVENTS
|
|
|
- if (!iter->second_pass) {
|
|
|
- iter->cpu = -1;
|
|
|
- iter->second_pass = true;
|
|
|
- } else
|
|
|
- return NULL;
|
|
|
+ if (!iter->second_pass) {
|
|
|
+ iter->cpu = -1;
|
|
|
+ iter->second_pass = true;
|
|
|
+ } else
|
|
|
+ return NULL;
|
|
|
#else
|
|
|
- return NULL;
|
|
|
+ return NULL;
|
|
|
#endif
|
|
|
+ }
|
|
|
}
|
|
|
return iter;
|
|
|
}
|
|
|
|
|
|
+static void *timer_list_start(struct seq_file *file, loff_t *offset)
|
|
|
+{
|
|
|
+ struct timer_list_iter *iter = file->private;
|
|
|
+
|
|
|
+ if (!*offset)
|
|
|
+ iter->now = ktime_to_ns(ktime_get());
|
|
|
+ iter->cpu = -1;
|
|
|
+ iter->second_pass = false;
|
|
|
+ return move_iter(iter, *offset);
|
|
|
+}
|
|
|
+
|
|
|
static void *timer_list_next(struct seq_file *file, void *v, loff_t *offset)
|
|
|
{
|
|
|
struct timer_list_iter *iter = file->private;
|
|
|
- iter->cpu = cpumask_next(iter->cpu, cpu_online_mask);
|
|
|
++*offset;
|
|
|
- return timer_list_start(file, offset);
|
|
|
+ return move_iter(iter, 1);
|
|
|
}
|
|
|
|
|
|
static void timer_list_stop(struct seq_file *seq, void *v)
|