[Intel-gfx] [PATCH 2/2] drm/i915/dmabuf: Pin pages as we flush for CPU access

Dave Gordon david.s.gordon at intel.com
Fri May 6 19:35:17 UTC 2016


On 06/05/16 15:36, Chris Wilson wrote:
> As a precautionary defensive measure against changes to the core (where
> we stop changing domains when unbinding), we want to ensure that the pages
> are available when we want to start CPU access, otherwise we will not
> perform the requisite clflushes to make the contents coherent for the user.
>
> In contrast, we do not have to worry about ensuring the pages are
> available when flushing after CPU access, as any subsequent use that
> requires the pages in the GTT domain will be perform the flush
> themselves.
>
> The tricky part is that we can not force the behaviour within
> set-to-cpu-domain as that currently needs to be callable from within the
> put_pages cleanup path, thus we place the burden on the caller.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
>   drivers/gpu/drm/i915/i915_gem_dmabuf.c | 8 ++++++++
>   1 file changed, 8 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
> index 80bbe43a2e92..6d898a201a46 100644
> --- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
> +++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
> @@ -182,7 +182,15 @@ static int i915_gem_begin_cpu_access(struct dma_buf *dma_buf, enum dma_data_dire
>   	if (ret)
>   		return ret;
>
> +	ret = i915_gem_object_get_pages(obj);
> +	if (ret)
> +		goto err_unlock;
> +
> +	i915_gem_object_pin_pages(obj);
>   	ret = i915_gem_object_set_to_cpu_domain(obj, write);
> +	i915_gem_object_unpin_pages(obj);
> +
> +err_unlock:
>   	mutex_unlock(&dev->struct_mutex);
>   	return ret;
>   }

So, will these two patches fix the anomalous 
setting-dirty-while-not-pinned behaviour of set-to-gtt/set-to-cpu?

.Dave.


More information about the Intel-gfx mailing list