[PATCH 0/1] GuC submission vs request signaling race

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: John Harrison <John.C.Harrison@xxxxxxxxx>

Back in the days of 4.11, there was a nested_enable_signaling()
function as part of the GuC submission path. It contained a BUG_ON to
ensure that the request being processed had not already been signaled.
However, there was a race condition that causes that BUG_ON to be hit.
We have a customer that is currently locked in to the 4.11 tree and
therefore requires a fix for this issue that does not involve updating
to the latest upstream kernel (which has re-written this code).

The race is that the nested_enable_signaling() call is made after the
submission to the GuC within i915_guc_dequeue(). That allows a very
fast request to finish before the call to nested_ is made. Hence the
request has indeed completed, been signaled and the BUG fires.

The following patch works around the issue by reversing the order of
the events such that nested_ is called immediately before
i915_guc_submit() instead of sometime after. This guarantees that the
request cannot complete before signaling has been enabled. However, it
also means that signaling is now enabled for all requests. Previously,
it was only done for the last request in a coelesced group. That is,
multiple requests for the same context could be queued up back to back
and only the last would be enabled for signaling.

My understanding is that the omission of enabling signaling for
coelesced requests is simply a performance optimisation. And that
losing it will have no detrimental side effects other than the extra
signal processing. That is, it is safe to make this change on the
grounds that anything more involved that both fixes the race and keeps
the optimisation would be a much bigger and therefore more risky
change. However, others have expressed a view that this is a very
complex area of code and there may be unforseen consequences of this
change. Hence the post here to ask for feedback.

Thanks.

John Harrison (1):
  drm/i915: Fix for nested_enable_signaling BUG_ON

 drivers/gpu/drm/i915/i915_guc_submission.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

-- 
2.13.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux