drm/i915: Avoid early timeout during AUX transfers
Since wait_for_atomic doesn't re-check the wait-for condition after expiry of the timeout it can fail when called from non-atomic context even if the condition is set correctly before the expiry. Fix this by using the non-atomic wait_for instead. Due to the relatively long 10ms timeout, probably this didn't cause any real problems, but fix it in any case for consistency. Fixes:0351b93992
("drm/i915: Do not lie about atomic timeout granularity") CC: Chris Wilson <chris@chris-wilson.co.uk> CC: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Signed-off-by: Imre Deak <imre.deak@intel.com> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> CC: drm-intel-fixes@lists.freedesktop.org Link: http://patchwork.freedesktop.org/patch/msgid/1467110253-16046-5-git-send-email-imre.deak@intel.com (cherry picked from commit713a6b6689
) Signed-off-by: Jani Nikula <jani.nikula@intel.com>
This commit is contained in:
parent
fa7c13e5b1
commit
ba34a65324
|
@ -663,7 +663,7 @@ intel_dp_aux_wait_done(struct intel_dp *intel_dp, bool has_aux_irq)
|
||||||
done = wait_event_timeout(dev_priv->gmbus_wait_queue, C,
|
done = wait_event_timeout(dev_priv->gmbus_wait_queue, C,
|
||||||
msecs_to_jiffies_timeout(10));
|
msecs_to_jiffies_timeout(10));
|
||||||
else
|
else
|
||||||
done = wait_for_atomic(C, 10) == 0;
|
done = wait_for(C, 10) == 0;
|
||||||
if (!done)
|
if (!done)
|
||||||
DRM_ERROR("dp aux hw did not signal timeout (has irq: %i)!\n",
|
DRM_ERROR("dp aux hw did not signal timeout (has irq: %i)!\n",
|
||||||
has_aux_irq);
|
has_aux_irq);
|
||||||
|
|
Loading…
Reference in New Issue