summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorckolivas <kernel@kolivas.org>2016-11-12 08:33:25 +1100
committerckolivas <kernel@kolivas.org>2016-11-12 08:35:43 +1100
commita312cfcafbe7a5c70ef9e65838484774ddf0dbec (patch)
treed214753aab27c00a6ab023ee69bd77db872e7b55 /kernel
parent1769b2daa3b75550cb0d159922f8d761b9965ba2 (diff)
Revert all non-scheduler related timeout changes in the kernel.
Too many assumptions are made in the kernel about timeout behaviour and many calls are not properly made freezer safe. The scheduler changes should not own this issue.
Diffstat (limited to 'kernel')
-rw-r--r--kernel/time/hrtimer.c62
-rw-r--r--kernel/time/timer.c52
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);