]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - kernel/posix-timers.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/bunk/trivial
[mv-sheeva.git] / kernel / posix-timers.c
index 28e72fd0029fa466e1768d40bcb10b28a2505450..fa895fc2ecf555daad851fceea816659fdeddf30 100644 (file)
@@ -353,6 +353,7 @@ static int posix_timer_fn(void *data)
                                hrtimer_forward(&timr->it.real.timer,
                                                timr->it.real.interval);
                        ret = HRTIMER_RESTART;
+                       ++timr->it_requeue_pending;
                }
        }
 
@@ -724,8 +725,13 @@ common_timer_set(struct k_itimer *timr, int flags,
        timr->it.real.interval = timespec_to_ktime(new_setting->it_interval);
 
        /* SIGEV_NONE timers are not queued ! See common_timer_get */
-       if (((timr->it_sigev_notify & ~SIGEV_THREAD_ID) == SIGEV_NONE))
+       if (((timr->it_sigev_notify & ~SIGEV_THREAD_ID) == SIGEV_NONE)) {
+               /* Setup correct expiry time for relative timers */
+               if (mode == HRTIMER_REL)
+                       timer->expires = ktime_add(timer->expires,
+                                                  timer->base->get_time());
                return 0;
+       }
 
        hrtimer_start(timer, timer->expires, mode);
        return 0;
@@ -870,12 +876,6 @@ int do_posix_clock_nosettime(const clockid_t clockid, struct timespec *tp)
 }
 EXPORT_SYMBOL_GPL(do_posix_clock_nosettime);
 
-int do_posix_clock_notimer_create(struct k_itimer *timer)
-{
-       return -EINVAL;
-}
-EXPORT_SYMBOL_GPL(do_posix_clock_notimer_create);
-
 int do_posix_clock_nonanosleep(const clockid_t clock, int flags,
                               struct timespec *t, struct timespec __user *r)
 {