diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/time/hrtimer.c | 62 | ||||
-rw-r--r-- | kernel/time/timer.c | 52 |
2 files changed, 8 insertions, 106 deletions
diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c index 53291d7e72f9..9ba7c820fc23 100644 --- a/kernel/time/hrtimer.c +++ b/kernel/time/hrtimer.c @@ -1788,65 +1788,3 @@ int __sched schedule_hrtimeout(ktime_t *expires, return schedule_hrtimeout_range(expires, 0, mode); } EXPORT_SYMBOL_GPL(schedule_hrtimeout); - -/* - * As per schedule_hrtimeout but taskes a millisecond value and returns how - * many milliseconds are left. - */ -signed long __sched schedule_msec_hrtimeout(signed long timeout) -{ - struct hrtimer_sleeper t; - ktime_t expires; - int delta, secs; - - if (!timeout) { - __set_current_state(TASK_RUNNING); - return 0; - } - - secs = timeout / 1000; - delta = (timeout % 1000) * NSEC_PER_MSEC; - expires = ktime_set(secs, delta); - - hrtimer_init_on_stack(&t.timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); - hrtimer_set_expires_range_ns(&t.timer, expires, delta); - - hrtimer_init_sleeper(&t, current); - - hrtimer_start_expires(&t.timer, HRTIMER_MODE_REL); - - if (likely(t.task)) - schedule(); - - hrtimer_cancel(&t.timer); - destroy_hrtimer_on_stack(&t.timer); - - __set_current_state(TASK_RUNNING); - - expires = hrtimer_expires_remaining(&t.timer); - timeout = ktime_to_ms(expires); - return timeout < 0 ? 0 : timeout; -} - -EXPORT_SYMBOL(schedule_msec_hrtimeout); - -signed long __sched schedule_min_hrtimeout(void) -{ - return schedule_msec_hrtimeout(1); -} - -EXPORT_SYMBOL(schedule_min_hrtimeout); - -signed long __sched schedule_msec_hrtimeout_interruptible(signed long timeout) -{ - __set_current_state(TASK_INTERRUPTIBLE); - return schedule_msec_hrtimeout(timeout); -} -EXPORT_SYMBOL(schedule_msec_hrtimeout_interruptible); - -signed long __sched schedule_msec_hrtimeout_uninterruptible(signed long timeout) -{ - __set_current_state(TASK_UNINTERRUPTIBLE); - return schedule_msec_hrtimeout(timeout); -} -EXPORT_SYMBOL(schedule_msec_hrtimeout_uninterruptible); diff --git a/kernel/time/timer.c b/kernel/time/timer.c index 0455ab7dd18d..f0be61c19bfb 100644 --- a/kernel/time/timer.c +++ b/kernel/time/timer.c @@ -1709,7 +1709,7 @@ static void process_timeout(unsigned long __data) * * In all cases the return value is guaranteed to be non-negative. */ -static signed long __schedule_timeout(signed long timeout, bool freezable) +signed long __sched schedule_timeout(signed long timeout) { struct timer_list timer; unsigned long expire; @@ -1745,17 +1745,6 @@ static signed long __schedule_timeout(signed long timeout, bool freezable) expire = timeout + jiffies; - if (timeout == 1 && !freezable && hrtimer_resolution < NSEC_PER_SEC / HZ) { - /* - * Special case 1 as being a request for the minimum timeout - * and use highres timers to timeout after 1ms to workaround - * the granularity of low Hz tick timers. - */ - if (!schedule_min_hrtimeout()) - return 0; - goto out_timeout; - } - setup_timer_on_stack(&timer, process_timeout, (unsigned long)current); __mod_timer(&timer, expire, false); schedule(); @@ -1763,26 +1752,14 @@ static signed long __schedule_timeout(signed long timeout, bool freezable) /* Remove the timer from the object tracker */ destroy_timer_on_stack(&timer); -out_timeout: + timeout = expire - jiffies; -out: + out: return timeout < 0 ? 0 : timeout; } - -signed long __sched schedule_timeout(signed long timeout) -{ - return __schedule_timeout(timeout, false); -} EXPORT_SYMBOL(schedule_timeout); -signed long __sched fschedule_timeout(signed long timeout) -{ - return __schedule_timeout(timeout, true); -} -EXPORT_SYMBOL(fschedule_timeout); - - /* * We can use __set_current_state() here because schedule_timeout() calls * schedule() unconditionally. @@ -1797,14 +1774,14 @@ EXPORT_SYMBOL(schedule_timeout_interruptible); signed long __sched schedule_timeout_killable(signed long timeout) { __set_current_state(TASK_KILLABLE); - return fschedule_timeout(timeout); + return schedule_timeout(timeout); } EXPORT_SYMBOL(schedule_timeout_killable); signed long __sched schedule_timeout_uninterruptible(signed long timeout) { __set_current_state(TASK_UNINTERRUPTIBLE); - return fschedule_timeout(timeout); + return schedule_timeout(timeout); } EXPORT_SYMBOL(schedule_timeout_uninterruptible); @@ -1815,7 +1792,7 @@ EXPORT_SYMBOL(schedule_timeout_uninterruptible); signed long __sched schedule_timeout_idle(signed long timeout) { __set_current_state(TASK_IDLE); - return fschedule_timeout(timeout); + return schedule_timeout(timeout); } EXPORT_SYMBOL(schedule_timeout_idle); @@ -1899,13 +1876,7 @@ void __init init_timers(void) */ void msleep(unsigned int msecs) { - unsigned long timeout; - - if (likely(hrtimer_resolution < NSEC_PER_SEC / HZ)) { - while (msecs) - msecs = schedule_msec_hrtimeout_uninterruptible(msecs); - } - timeout = msecs_to_jiffies(msecs) + 1; + unsigned long timeout = msecs_to_jiffies(msecs) + 1; while (timeout) timeout = schedule_timeout_uninterruptible(timeout); @@ -1919,14 +1890,7 @@ EXPORT_SYMBOL(msleep); */ unsigned long msleep_interruptible(unsigned int msecs) { - unsigned long timeout; - - if (likely(hrtimer_resolution < NSEC_PER_SEC / HZ)) { - while (msecs && !signal_pending(current)) - msecs = schedule_msec_hrtimeout_interruptible(msecs); - return msecs; - } - timeout = msecs_to_jiffies(msecs) + 1; + unsigned long timeout = msecs_to_jiffies(msecs) + 1; while (timeout && !signal_pending(current)) timeout = schedule_timeout_interruptible(timeout); |