| From 9e04d3804d3ac97d8c03a41d78d0f0674b5d01e1 Mon Sep 17 00:00:00 2001 |
| From: Bart Van Assche <bart.vanassche@gmail.com> |
| Date: Tue, 21 May 2013 20:43:50 +0200 |
| Subject: timer: Fix jiffies wrap behavior of round_jiffies_common() |
| |
| From: Bart Van Assche <bart.vanassche@gmail.com> |
| |
| commit 9e04d3804d3ac97d8c03a41d78d0f0674b5d01e1 upstream. |
| |
| Direct compare of jiffies related values does not work in the wrap |
| around case. Replace it with time_is_after_jiffies(). |
| |
| Signed-off-by: Bart Van Assche <bvanassche@acm.org> |
| Cc: Arjan van de Ven <arjan@infradead.org> |
| Cc: Stephen Rothwell <sfr@canb.auug.org.au> |
| Link: http://lkml.kernel.org/r/519BC066.5080600@acm.org |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| kernel/timer.c | 8 +++++--- |
| 1 file changed, 5 insertions(+), 3 deletions(-) |
| |
| --- a/kernel/timer.c |
| +++ b/kernel/timer.c |
| @@ -148,9 +148,11 @@ static unsigned long round_jiffies_commo |
| /* now that we have rounded, subtract the extra skew again */ |
| j -= cpu * 3; |
| |
| - if (j <= jiffies) /* rounding ate our timeout entirely; */ |
| - return original; |
| - return j; |
| + /* |
| + * Make sure j is still in the future. Otherwise return the |
| + * unmodified value. |
| + */ |
| + return time_is_after_jiffies(j) ? j : original; |
| } |
| |
| /** |