sysctl: add proc_do_large_bitmap
[safe/jmp/linux-2.6] / kernel / time / timer_list.c
index 5479c6e..1a4a7dd 100644 (file)
@@ -66,9 +66,11 @@ print_timer(struct seq_file *m, struct hrtimer *taddr, struct hrtimer *timer,
        SEQ_printf(m, ", %s/%d", tmp, timer->start_pid);
 #endif
        SEQ_printf(m, "\n");
-       SEQ_printf(m, " # expires at %Lu nsecs [in %Ld nsecs]\n",
-               (unsigned long long)ktime_to_ns(timer->expires),
-               (long long)(ktime_to_ns(timer->expires) - now));
+       SEQ_printf(m, " # expires at %Lu-%Lu nsecs [in %Ld to %Ld nsecs]\n",
+               (unsigned long long)ktime_to_ns(hrtimer_get_softexpires(timer)),
+               (unsigned long long)ktime_to_ns(hrtimer_get_expires(timer)),
+               (long long)(ktime_to_ns(hrtimer_get_softexpires(timer)) - now),
+               (long long)(ktime_to_ns(hrtimer_get_expires(timer)) - now));
 }
 
 static void
@@ -82,7 +84,7 @@ print_active_timers(struct seq_file *m, struct hrtimer_clock_base *base,
 
 next_one:
        i = 0;
-       spin_lock_irqsave(&base->cpu_base->lock, flags);
+       raw_spin_lock_irqsave(&base->cpu_base->lock, flags);
 
        curr = base->first;
        /*
@@ -98,18 +100,19 @@ next_one:
 
                timer = rb_entry(curr, struct hrtimer, node);
                tmp = *timer;
-               spin_unlock_irqrestore(&base->cpu_base->lock, flags);
+               raw_spin_unlock_irqrestore(&base->cpu_base->lock, flags);
 
                print_timer(m, timer, &tmp, i, now);
                next++;
                goto next_one;
        }
-       spin_unlock_irqrestore(&base->cpu_base->lock, flags);
+       raw_spin_unlock_irqrestore(&base->cpu_base->lock, flags);
 }
 
 static void
 print_base(struct seq_file *m, struct hrtimer_clock_base *base, u64 now)
 {
+       SEQ_printf(m, "  .base:       %p\n", base);
        SEQ_printf(m, "  .index:      %d\n",
                        base->index);
        SEQ_printf(m, "  .resolution: %Lu nsecs\n",
@@ -147,6 +150,9 @@ static void print_cpu(struct seq_file *m, int cpu, u64 now)
        P_ns(expires_next);
        P(hres_active);
        P(nr_events);
+       P(nr_retries);
+       P(nr_hangs);
+       P_ns(max_hang_time);
 #endif
 #undef P
 #undef P_ns
@@ -201,10 +207,12 @@ print_tickdevice(struct seq_file *m, struct tick_device *td, int cpu)
                return;
        }
        SEQ_printf(m, "%s\n", dev->name);
-       SEQ_printf(m, " max_delta_ns:   %lu\n", dev->max_delta_ns);
-       SEQ_printf(m, " min_delta_ns:   %lu\n", dev->min_delta_ns);
-       SEQ_printf(m, " mult:           %lu\n", dev->mult);
-       SEQ_printf(m, " shift:          %d\n", dev->shift);
+       SEQ_printf(m, " max_delta_ns:   %llu\n",
+                  (unsigned long long) dev->max_delta_ns);
+       SEQ_printf(m, " min_delta_ns:   %llu\n",
+                  (unsigned long long) dev->min_delta_ns);
+       SEQ_printf(m, " mult:           %u\n", dev->mult);
+       SEQ_printf(m, " shift:          %u\n", dev->shift);
        SEQ_printf(m, " mode:           %d\n", dev->mode);
        SEQ_printf(m, " next_event:     %Ld nsecs\n",
                   (unsigned long long) ktime_to_ns(dev->next_event));
@@ -220,6 +228,7 @@ print_tickdevice(struct seq_file *m, struct tick_device *td, int cpu)
        SEQ_printf(m, " event_handler:  ");
        print_name_offset(m, dev->event_handler);
        SEQ_printf(m, "\n");
+       SEQ_printf(m, " retries:        %lu\n", dev->retries);
 }
 
 static void timer_list_show_tickdevices(struct seq_file *m)
@@ -229,10 +238,10 @@ static void timer_list_show_tickdevices(struct seq_file *m)
 #ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
        print_tickdevice(m, tick_get_broadcast_device(), -1);
        SEQ_printf(m, "tick_broadcast_mask: %08lx\n",
-                  tick_get_broadcast_mask()->bits[0]);
+                  cpumask_bits(tick_get_broadcast_mask())[0]);
 #ifdef CONFIG_TICK_ONESHOT
        SEQ_printf(m, "tick_broadcast_oneshot_mask: %08lx\n",
-                  tick_get_broadcast_oneshot_mask()->bits[0]);
+                  cpumask_bits(tick_get_broadcast_oneshot_mask())[0]);
 #endif
        SEQ_printf(m, "\n");
 #endif
@@ -249,7 +258,7 @@ static int timer_list_show(struct seq_file *m, void *v)
        u64 now = ktime_to_ns(ktime_get());
        int cpu;
 
-       SEQ_printf(m, "Timer List Version: v0.3\n");
+       SEQ_printf(m, "Timer List Version: v0.6\n");
        SEQ_printf(m, "HRTIMER_MAX_CLOCK_BASES: %d\n", HRTIMER_MAX_CLOCK_BASES);
        SEQ_printf(m, "now at %Ld nsecs\n", (unsigned long long)now);
 
@@ -272,7 +281,7 @@ static int timer_list_open(struct inode *inode, struct file *filp)
        return single_open(filp, timer_list_show, NULL);
 }
 
-static struct file_operations timer_list_fops = {
+static const struct file_operations timer_list_fops = {
        .open           = timer_list_open,
        .read           = seq_read,
        .llseek         = seq_lseek,
@@ -283,7 +292,7 @@ static int __init init_timer_list_procfs(void)
 {
        struct proc_dir_entry *pe;
 
-       pe = proc_create("timer_list", 0644, NULL, &timer_list_fops);
+       pe = proc_create("timer_list", 0444, NULL, &timer_list_fops);
        if (!pe)
                return -ENOMEM;
        return 0;