From 4a7d0bfcaa4a2acb63d1d9d56eb7693e682db158 Mon Sep 17 00:00:00 2001 From: Ryan Stone Date: Fri, 28 Jun 2013 15:55:30 +0000 Subject: [PATCH] Correct a bug that prevented deadlkres from (almost) ever firing. deadlkres was using a reversed test to check whether ticks had rolled over. This meant that deadlkres could only fire after ticks had rolled over. This test was actually unnecessary as deadlkres only ever took the difference of ticks values which is safe even in the presence of ticks rollover. Remove the tests entirely. Now deadlkres will properly fire after a lock has been held after the timeout period. MFC after: 1 month --- sys/kern/kern_clock.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/sys/kern/kern_clock.c b/sys/kern/kern_clock.c index 2841f8c3f04..4cfd219590b 100644 --- a/sys/kern/kern_clock.c +++ b/sys/kern/kern_clock.c @@ -216,13 +216,8 @@ deadlkres(void) } FOREACH_THREAD_IN_PROC(p, td) { - /* - * Once a thread is found in "interesting" - * state a possible ticks wrap-up needs to be - * checked. - */ thread_lock(td); - if (TD_ON_LOCK(td) && ticks < td->td_blktick) { + if (TD_ON_LOCK(td)) { /* * The thread should be blocked on a @@ -247,8 +242,7 @@ deadlkres(void) __func__, td, tticks); } } else if (TD_IS_SLEEPING(td) && - TD_ON_SLEEPQ(td) && - ticks < td->td_blktick) { + TD_ON_SLEEPQ(td)) { /* * Check if the thread is sleeping on a