diff options
author | Con Kolivas <kernel@kolivas.org> | 2016-11-08 17:54:56 +1100 |
---|---|---|
committer | Con Kolivas <kernel@kolivas.org> | 2016-11-08 17:59:48 +1100 |
commit | 9b739794bc118bbe351b378b98e11abc777ff80d (patch) | |
tree | eb89b2c9ae2632ef6d2c99d7df60d8158bb1b56b /kernel | |
parent | df479f86fec75652034da14a7fc7e401d5c8b180 (diff) |
Make freezable timeouts not use the highres timers.
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/time/timer.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/kernel/time/timer.c b/kernel/time/timer.c index 7651d47e7975..0455ab7dd18d 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. */ -signed long __sched schedule_timeout(signed long timeout) +static signed long __schedule_timeout(signed long timeout, bool freezable) { struct timer_list timer; unsigned long expire; @@ -1745,7 +1745,7 @@ signed long __sched schedule_timeout(signed long timeout) expire = timeout + jiffies; - if (timeout == 1 && hrtimer_resolution < NSEC_PER_SEC / HZ) { + 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 @@ -1769,8 +1769,20 @@ out_timeout: 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. @@ -1785,14 +1797,14 @@ EXPORT_SYMBOL(schedule_timeout_interruptible); signed long __sched schedule_timeout_killable(signed long timeout) { __set_current_state(TASK_KILLABLE); - return schedule_timeout(timeout); + return fschedule_timeout(timeout); } EXPORT_SYMBOL(schedule_timeout_killable); signed long __sched schedule_timeout_uninterruptible(signed long timeout) { __set_current_state(TASK_UNINTERRUPTIBLE); - return schedule_timeout(timeout); + return fschedule_timeout(timeout); } EXPORT_SYMBOL(schedule_timeout_uninterruptible); @@ -1803,7 +1815,7 @@ EXPORT_SYMBOL(schedule_timeout_uninterruptible); signed long __sched schedule_timeout_idle(signed long timeout) { __set_current_state(TASK_IDLE); - return schedule_timeout(timeout); + return fschedule_timeout(timeout); } EXPORT_SYMBOL(schedule_timeout_idle); |