drm/i915: Fix use of invalid array size for ring->sync_seqno
There are I915_NUM_RINGS-1 inter-ring synchronisation counters, but we were clearing I915_NUM_RINGS of them. Oops. Reported-by: Jiri Slaby <jirislaby@gmail.com> Tested-by: Jiri Slaby <jirislaby@gmail.com> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
@@ -1857,7 +1857,7 @@ i915_gem_retire_requests_ring(struct drm_device *dev,
|
|||||||
|
|
||||||
seqno = ring->get_seqno(ring);
|
seqno = ring->get_seqno(ring);
|
||||||
|
|
||||||
for (i = 0; i < I915_NUM_RINGS; i++)
|
for (i = 0; i < ARRAY_SIZE(ring->sync_seqno); i++)
|
||||||
if (seqno >= ring->sync_seqno[i])
|
if (seqno >= ring->sync_seqno[i])
|
||||||
ring->sync_seqno[i] = 0;
|
ring->sync_seqno[i] = 0;
|
||||||
|
|
||||||
|
@@ -1175,7 +1175,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
|
|||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
seqno = i915_gem_next_request_seqno(dev, ring);
|
seqno = i915_gem_next_request_seqno(dev, ring);
|
||||||
for (i = 0; i < I915_NUM_RINGS-1; i++) {
|
for (i = 0; i < ARRAY_SIZE(ring->sync_seqno); i++) {
|
||||||
if (seqno < ring->sync_seqno[i]) {
|
if (seqno < ring->sync_seqno[i]) {
|
||||||
/* The GPU can not handle its semaphore value wrapping,
|
/* The GPU can not handle its semaphore value wrapping,
|
||||||
* so every billion or so execbuffers, we need to stall
|
* so every billion or so execbuffers, we need to stall
|
||||||
|
Reference in New Issue
Block a user