]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
Merge branch 'timers-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 6 Feb 2011 20:05:15 +0000 (12:05 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 6 Feb 2011 20:05:15 +0000 (12:05 -0800)
* 'timers-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  lockdep, timer: Fix del_timer_sync() annotation
  RTC: Prevents a division by zero in kernel code.

drivers/rtc/class.c
drivers/rtc/interface.c
kernel/timer.c

index 9583cbcc6b79da8b541fcb7b4cfa5c90fe648bf0..c404b61386bf072329f1f140da38ea91a118610f 100644 (file)
@@ -143,6 +143,7 @@ struct rtc_device *rtc_device_register(const char *name, struct device *dev,
        rtc->id = id;
        rtc->ops = ops;
        rtc->owner = owner;
+       rtc->irq_freq = 1;
        rtc->max_user_freq = 64;
        rtc->dev.parent = dev;
        rtc->dev.class = rtc_class;
index 925006d331099699e27b26012050b81cd3acbcce..a0c01967244d381e1aecf3665a885be191efbb24 100644 (file)
@@ -464,6 +464,9 @@ int rtc_irq_set_freq(struct rtc_device *rtc, struct rtc_task *task, int freq)
        int err = 0;
        unsigned long flags;
 
+       if (freq <= 0)
+               return -EINVAL;
+
        spin_lock_irqsave(&rtc->irq_task_lock, flags);
        if (rtc->irq_task != NULL && task == NULL)
                err = -EBUSY;
index 43ca9936f2d06a2cba572f1c877406f9281e68a3..d53ce66daea0ec7a87ff2700f435ba1ee2eb174e 100644 (file)
@@ -969,10 +969,14 @@ EXPORT_SYMBOL(try_to_del_timer_sync);
 int del_timer_sync(struct timer_list *timer)
 {
 #ifdef CONFIG_LOCKDEP
+       unsigned long flags;
+
+       raw_local_irq_save(flags);
        local_bh_disable();
        lock_map_acquire(&timer->lockdep_map);
        lock_map_release(&timer->lockdep_map);
-       local_bh_enable();
+       _local_bh_enable();
+       raw_local_irq_restore(flags);
 #endif
        /*
         * don't use it in hardirq context, because it