kib 8fc564dae0 Rewrite subr_sleepqueue.c use of callouts to not depend on the
specifics of callout KPI.  Esp., do not depend on the exact interface
of callout_stop(9) return values.

The main change is that instead of requiring precise callouts, code
maintains absolute time to wake up.  Callouts now should ensure that a
wake occurs at the requested moment, but we can tolerate both run-away
callout, and callout_stop(9) lying about running callout either way.

As consequence, it removes the constant source of the bugs where
sleepq_check_timeout() causes uninterruptible thread state where the
thread is detached from CPU, see e.g. r234952 and r296320.

Patch also removes dual meaning of the TDF_TIMEOUT flag, making code
(IMO much) simpler to reason about.

Tested by:	pho
Reviewed by:	jhb
Sponsored by:	The FreeBSD Foundation
MFC after:	1 month
Differential revision:	https://reviews.freebsd.org/D7137
2016-07-28 09:09:55 +00:00
..
2015-05-23 14:59:27 +00:00
2014-10-11 20:25:19 +00:00
2016-04-20 16:19:44 +00:00
2014-10-11 20:25:19 +00:00
2015-05-23 14:59:27 +00:00
2014-10-11 20:25:19 +00:00
2015-05-23 14:59:27 +00:00
2015-05-21 15:16:18 +00:00