drm/i915: Fix page fault handler failure

... when __wait_seqno() is interrupted by a signal. In this case,
__wait_seqno() returns -ERESTARTSYS. Like we already do in drm_ioctl(),
we need to convert this error to a common code such as -EINTR, so the
page fault handler is restarted.

Reported by:	Frederic Chardon <chardon.frederic@gmail.com>
Tested by:	Frederic Chardon <chardon.frederic@gmail.com>
This commit is contained in:
Jean-Sébastien Pédron 2016-03-12 11:54:58 +00:00
parent 85a60a7756
commit 538cf7be5e
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=296720

View File

@ -1619,6 +1619,13 @@ i915_gem_pager_fault(vm_object_t vm_obj, vm_ooffset_t offset, int prot,
KASSERT(ret != 0, ("i915_gem_pager_fault: wrong return"));
CTR4(KTR_DRM, "fault_fail %p %jx %x err %d", gem_obj, offset, prot,
-ret);
if (ret == -ERESTARTSYS) {
/*
* NOTE Linux<->FreeBSD: Convert Linux' -ERESTARTSYS to
* the more common -EINTR, so the page fault is retried.
*/
ret = -EINTR;
}
if (ret == -EAGAIN || ret == -EIO || ret == -EINTR) {
kern_yield(PRI_USER);
goto retry;