drm/i915: Always double check for a missed interrupt for new bottom halves
authorChris Wilson <chris@chris-wilson.co.uk>
Wed, 6 Jul 2016 11:39:00 +0000 (12:39 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Wed, 6 Jul 2016 11:44:20 +0000 (12:44 +0100)
commit04171313cb25311acf82279284d722fed7b70d53
tree314a2dc85967ed2a366f91f87b3545e4973d7428
parent91c8a326a192117219d5b9b980244c3662e35404
drm/i915: Always double check for a missed interrupt for new bottom halves

After assigning ourselves as the new bottom-half, we must perform a
cursory check to prevent a missed interrupt.  Either we miss the interrupt
whilst programming the hardware, or if there was a previous waiter (for
a later seqno) they may be woken instead of us (due to the inherent race
in the unlocked read of b->tasklet in the irq handler) and so we miss the
wake up.

Spotted-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96806
Fixes: 688e6c725816 ("drm/i915: Slaughter the thundering... herd")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1467805142-22219-1-git-send-email-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/intel_breadcrumbs.c