[Intel-gfx] [PATCH 03/11] drm/i915: Use insert_page for pwrite_fast

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Thu Jun 9 08:50:31 UTC 2016


On 08/06/16 13:20, ankitprasad.r.sharma at intel.com wrote:
> From: Ankitprasad Sharma <ankitprasad.r.sharma at intel.com>
>
> In pwrite_fast, map an object page by page if obj_ggtt_pin fails. First,
> we try a nonblocking pin for the whole object (since that is fastest if
> reused), then failing that we try to grab one page in the mappable
> aperture. It also allows us to handle objects larger than the mappable
> aperture (e.g. if we need to pwrite with vGPU restricting the aperture
> to a measely 8MiB or something like that).
>
> v2: Pin pages before starting pwrite, Combined duplicate loops (Chris)
>
> v3: Combined loops based on local patch by Chris (Chris)
>
> v4: Added i915 wrapper function for drm_mm_insert_node_in_range (Chris)
>
> v5: Renamed wrapper function for drm_mm_insert_node_in_range (Chris)
>
> v5: Added wrapper for drm_mm_remove_node() (Chris)
>
> v6: Added get_pages call before pinning the pages (Tvrtko)
> Added remove_mappable_node() wrapper for drm_mm_remove_node() (Chris)
>
> v7: Added size argument for insert_mappable_node (Tvrtko)
>
> v8: Do not put_pages after pwrite, do memset of node in the wrapper
> function (insert_mappable_node) (Chris)
>
> v9: Rebase (Ankit)
>
> Signed-off-by: Ankitprasad Sharma <ankitprasad.r.sharma at intel.com>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> ---
>   drivers/gpu/drm/i915/i915_gem.c | 90 +++++++++++++++++++++++++++++++----------
>   1 file changed, 68 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index eae8d7a..452178c 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -60,6 +60,24 @@ static bool cpu_write_needs_clflush(struct drm_i915_gem_object *obj)
>   	return obj->pin_display;
>   }
>
> +static int
> +insert_mappable_node(struct drm_i915_private *i915,
> +                     struct drm_mm_node *node, u32 size)
> +{
> +	memset(node, 0, sizeof(*node));
> +	return drm_mm_insert_node_in_range_generic(&i915->ggtt.base.mm, node,
> +						   size, 0, 0, 0,
> +						   i915->ggtt.mappable_end,
> +						   DRM_MM_SEARCH_DEFAULT,
> +						   DRM_MM_CREATE_DEFAULT);
> +}
> +
> +static void
> +remove_mappable_node(struct drm_mm_node *node)
> +{
> +	drm_mm_remove_node(node);
> +}
> +
>   /* some bookkeeping */
>   static void i915_gem_info_add_obj(struct drm_i915_private *dev_priv,
>   				  size_t size)
> @@ -765,21 +783,34 @@ fast_user_write(struct io_mapping *mapping,
>    * @file: drm file pointer
>    */
>   static int
> -i915_gem_gtt_pwrite_fast(struct drm_device *dev,
> +i915_gem_gtt_pwrite_fast(struct drm_i915_private *i915,

Please follow-up with a patch fixing kernel doc for this function as 
kbuild robot noticed yesterday.

Regards,

Tvrtko


More information about the Intel-gfx mailing list