Chris Wilson b92326a040 drm/i915: Only report a wakeup if the waiter was truly asleep
If we attempt to wake up a waiter, who is currently checking the seqno
it will be in the TASK_INTERRUPTIBLE state and ttwu will report success.
However, it is actually awake and functioning -- so delay reporting the
actual wake up until it sleeps. This fixes some spurious claims of
missed_breadcrumbs when running under heavy load; i.e. sufficient load to
preempt away the newly woken waiter before they complete their checks.
However, it does so at the cost of a rare false negative; where the
waiter changes between the check and ttwu -- the only way to fix that
would be to extend the reporting from ttwu where the check could be done
atomically.

v2: Defend against !CONFIG_SMP
v3: Don't filter out calls to wake_up_process
v4: Drop risky microoptimisation to skip wakeups

Testcase: igt/drv_missed_irq # sanity check we do detect missed_breadcrumb()
Testcase: igt/gem_concurrent_blit # for generating false positives
References: https://bugs.freedesktop.org/show_bug.cgi?id=100007
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20171209124710.1606-1-chris@chris-wilson.co.uk
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
2017-12-11 17:23:02 +00:00
..
2017-11-30 13:37:29 +01:00
2017-11-14 16:54:12 -08:00
2017-11-16 09:10:59 -08:00
2017-11-16 16:05:01 -08:00
2017-11-16 12:47:46 -08:00
2017-11-16 12:47:46 -08:00
2017-11-14 16:49:31 -08:00
2017-11-15 13:46:33 -08:00
2017-11-13 21:14:07 -08:00
2017-11-16 09:10:59 -08:00
2017-11-15 13:35:43 -08:00
2017-11-16 09:10:59 -08:00
2017-11-17 20:16:20 -08:00
2017-11-16 09:10:59 -08:00
2017-11-13 01:34:14 +01:00
2017-11-14 18:09:31 -08:00
2017-11-16 16:05:01 -08:00
2017-11-15 13:46:33 -08:00
2017-12-01 08:14:22 -05:00
2017-11-13 12:10:24 -08:00
2017-11-17 09:51:57 -08:00
2017-11-16 09:10:59 -08:00
2017-11-20 21:38:41 -10:00
2017-11-16 09:10:59 -08:00
2017-11-15 10:56:56 -08:00
2017-11-13 21:14:07 -08:00
2017-11-16 13:06:27 -08:00
2017-11-22 21:09:18 -10:00
2017-11-16 09:15:57 -08:00
2017-11-17 20:14:10 -08:00
2017-11-16 16:05:01 -08:00
2017-11-17 20:12:08 -08:00
2017-11-14 16:54:12 -08:00
2017-11-16 16:05:01 -08:00
2017-11-14 16:47:47 -08:00
2017-12-04 23:03:22 +01:00
2017-11-16 09:10:59 -08:00
2017-11-16 09:10:59 -08:00