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:
parent
85a60a7756
commit
538cf7be5e
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=296720
@ -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"));
|
KASSERT(ret != 0, ("i915_gem_pager_fault: wrong return"));
|
||||||
CTR4(KTR_DRM, "fault_fail %p %jx %x err %d", gem_obj, offset, prot,
|
CTR4(KTR_DRM, "fault_fail %p %jx %x err %d", gem_obj, offset, prot,
|
||||||
-ret);
|
-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) {
|
if (ret == -EAGAIN || ret == -EIO || ret == -EINTR) {
|
||||||
kern_yield(PRI_USER);
|
kern_yield(PRI_USER);
|
||||||
goto retry;
|
goto retry;
|
||||||
|
Loading…
Reference in New Issue
Block a user