svn commit: r296720 - head/sys/dev/drm2/i915

Konstantin Belousov kostikbel at gmail.com
Sat Mar 12 14:27:17 UTC 2016


On Sat, Mar 12, 2016 at 11:54:58AM +0000, Jean-S??bastien P??dron wrote:
> Author: dumbbell
> Date: Sat Mar 12 11:54:58 2016
> New Revision: 296720
> URL: https://svnweb.freebsd.org/changeset/base/296720
> 
> Log:
>   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 at gmail.com>
>   Tested by:	Frederic Chardon <chardon.frederic at gmail.com>
> 
> Modified:
>   head/sys/dev/drm2/i915/i915_gem.c
> 
> Modified: head/sys/dev/drm2/i915/i915_gem.c
> ==============================================================================
> --- head/sys/dev/drm2/i915/i915_gem.c	Sat Mar 12 09:44:23 2016	(r296719)
> +++ head/sys/dev/drm2/i915/i915_gem.c	Sat Mar 12 11:54:58 2016	(r296720)
> @@ -1619,6 +1619,13 @@ out:
>  	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;

It may be that the time come to remove i915_intr_pf tunable, and always
take device lock non-interruptible in i915 fault handler. TTM behaves
that way, and I think that situations where I used interruptible page
handlers, AFAIR to kill X or other gem clients in case of OOM, really not
useful to users.



More information about the svn-src-head mailing list