kernel: merge a proposed fix from LKML for fixing infinite data returned by /proc...
[openwrt.git] / target / linux / generic / patches-3.10 / 030-timer_list_fix.patch
1 Patch by: Nathan Zimmer <nzimmer@sgi.com>
2
3 Fixes a regression in the commit
4 "timer_list: Convert timer list to be a proper seq_file" which causes
5 /proc/timer_list to return an infinite amount of data
6
7
8 --- a/kernel/time/timer_list.c
9 +++ b/kernel/time/timer_list.c
10 @@ -305,24 +305,26 @@ static void *timer_list_start(struct seq
11         if (!*offset) {
12                 iter->cpu = -1;
13                 iter->now = ktime_to_ns(ktime_get());
14 -       } else if (iter->cpu >= nr_cpu_ids) {
15 +       } else {
16 +               iter->cpu = cpumask_next(iter->cpu, cpu_online_mask);
17 +               if (iter->cpu >= nr_cpu_ids) {
18  #ifdef CONFIG_GENERIC_CLOCKEVENTS
19 -               if (!iter->second_pass) {
20 -                       iter->cpu = -1;
21 -                       iter->second_pass = true;
22 -               } else
23 -                       return NULL;
24 +                       if (!iter->second_pass) {
25 +                               iter->cpu = -1;
26 +                               iter->second_pass = true;
27 +                       } else
28 +                               return NULL;
29  #else
30 -               return NULL;
31 +                       return NULL;
32  #endif
33 +               }
34         }
35 +
36         return iter;
37  }
38  
39  static void *timer_list_next(struct seq_file *file, void *v, loff_t *offset)
40  {
41 -       struct timer_list_iter *iter = file->private;
42 -       iter->cpu = cpumask_next(iter->cpu, cpu_online_mask);
43         ++*offset;
44         return timer_list_start(file, offset);
45  }