[PATCH] WARN when schedule_timeout() times out too early
Ville Syrjala
ville.syrjala at linux.intel.com
Fri Apr 27 20:21:22 UTC 2018
From: Ville Syrjälä <ville.syrjala at linux.intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
---
kernel/time/timer.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/kernel/time/timer.c b/kernel/time/timer.c
index 4a4fd567fb26..662db60576c5 100644
--- a/kernel/time/timer.c
+++ b/kernel/time/timer.c
@@ -1763,6 +1763,8 @@ signed long __sched schedule_timeout(signed long timeout)
{
struct process_timer timer;
unsigned long expire;
+ signed long total_timeout = timeout;
+ ktime_t t = ktime_get();
switch (timeout)
{
@@ -1789,6 +1791,7 @@ signed long __sched schedule_timeout(signed long timeout)
"value %lx\n", timeout);
dump_stack();
current->state = TASK_RUNNING;
+ timeout = 0;
goto out;
}
}
@@ -1807,6 +1810,15 @@ signed long __sched schedule_timeout(signed long timeout)
timeout = expire - jiffies;
out:
+ if (timeout < 0) {
+ s64 diff = ktime_us_delta(ktime_get(), t);
+ s64 expected = jiffies_to_usecs(total_timeout - 1);
+
+ WARN(diff < expected,
+ "schedule_timeout() returned after %lld usecs, expected at least %lld usec\n",
+ diff, expected);
+ }
+
return timeout < 0 ? 0 : timeout;
}
EXPORT_SYMBOL(schedule_timeout);
--
2.16.1
More information about the Intel-gfx-trybot
mailing list