]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - kernel/posix-timers.c
Merge with ARM SMP tree
[mv-sheeva.git] / kernel / posix-timers.c
index b7b532acd9fc419050f03de66b12acb14d5c4077..ea55c7a1cd75a3dbaa50040b3d55255c12a5786f 100644 (file)
@@ -1157,7 +1157,7 @@ retry_delete:
 }
 
 /*
- * This is called by __exit_signal, only when there are no more
+ * This is called by do_exit or de_thread, only when there are no more
  * references to the shared signal_struct.
  */
 void exit_itimers(struct signal_struct *sig)
@@ -1295,13 +1295,6 @@ sys_clock_getres(clockid_t which_clock, struct timespec __user *tp)
        return error;
 }
 
-static void nanosleep_wake_up(unsigned long __data)
-{
-       struct task_struct *p = (struct task_struct *) __data;
-
-       wake_up_process(p);
-}
-
 /*
  * The standard says that an absolute nanosleep call MUST wake up at
  * the requested time in spite of clock settings.  Here is what we do:
@@ -1442,7 +1435,6 @@ static int common_nsleep(clockid_t which_clock,
                         int flags, struct timespec *tsave)
 {
        struct timespec t, dum;
-       struct timer_list new_timer;
        DECLARE_WAITQUEUE(abs_wqueue, current);
        u64 rq_time = (u64)0;
        s64 left;
@@ -1451,10 +1443,6 @@ static int common_nsleep(clockid_t which_clock,
            &current_thread_info()->restart_block;
 
        abs_wqueue.flags = 0;
-       init_timer(&new_timer);
-       new_timer.expires = 0;
-       new_timer.data = (unsigned long) current;
-       new_timer.function = nanosleep_wake_up;
        abs = flags & TIMER_ABSTIME;
 
        if (restart_block->fn == clock_nanosleep_restart) {
@@ -1490,13 +1478,8 @@ static int common_nsleep(clockid_t which_clock,
                if (left < (s64)0)
                        break;
 
-               new_timer.expires = jiffies + left;
-               __set_current_state(TASK_INTERRUPTIBLE);
-               add_timer(&new_timer);
-
-               schedule();
+               schedule_timeout_interruptible(left);
 
-               del_timer_sync(&new_timer);
                left = rq_time - get_jiffies_64();
        } while (left > (s64)0 && !test_thread_flag(TIF_SIGPENDING));