modesetting: resubmit dirty rects on EINVAL (v2)

This error code can mean we're submitting more rects at once than the
driver can handle. If that happens, resubmit one at a time.

v2: Make the rect submit loop more error-proof (Walter Harms)

Signed-off-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Michael Thayer <michael.thayer@oracle.com>
This commit is contained in:
Adam Jackson 2016-07-18 12:46:51 -04:00
parent 8d3a368d89
commit 4b311d23e8

View File

@ -515,6 +515,15 @@ dispatch_dirty_region(ScrnInfoPtr scrn,
/* TODO query connector property to see if this is needed */
ret = drmModeDirtyFB(ms->fd, fb_id, clip, num_cliprects);
/* if we're swamping it with work, try one at a time */
if (ret == -EINVAL) {
for (i = 0; i < num_cliprects; i++) {
if ((ret = drmModeDirtyFB(ms->fd, fb_id, &clip[i], 1)) < 0)
break;
}
}
free(clip);
DamageEmpty(damage);
}