[Intel-gfx] [PATCH 09/21] drm/i915: Stop mapping the scratch page into CPU space
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Mon Jun 6 15:03:11 UTC 2016
On 03/06/16 17:08, Chris Wilson wrote:
> After the elimination of using the scratch page for Ironlake's
> breadcrumb, we no longer need to kmap the object. We therefore can move
> it into the high unmappable space and do not need to force the object to
> be coherent (i.e. snooped on !llc platforms).
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
> drivers/gpu/drm/i915/intel_ringbuffer.c | 40 +++++++++------------------------
> drivers/gpu/drm/i915/intel_ringbuffer.h | 1 -
> 2 files changed, 11 insertions(+), 30 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
> index bac496902c6d..106f40c52bb5 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
> @@ -643,58 +643,40 @@ out:
> return ret;
> }
>
> -void
> -intel_fini_pipe_control(struct intel_engine_cs *engine)
> +void intel_fini_pipe_control(struct intel_engine_cs *engine)
> {
> if (engine->scratch.obj == NULL)
> return;
>
> - if (INTEL_GEN(engine->i915) >= 5) {
> - kunmap(sg_page(engine->scratch.obj->pages->sgl));
> - i915_gem_object_ggtt_unpin(engine->scratch.obj);
> - }
> -
> + i915_gem_object_ggtt_unpin(engine->scratch.obj);
> drm_gem_object_unreference(&engine->scratch.obj->base);
> engine->scratch.obj = NULL;
> }
>
> -int
> -intel_init_pipe_control(struct intel_engine_cs *engine)
> +int intel_init_pipe_control(struct intel_engine_cs *engine)
> {
> + struct drm_i915_gem_object *obj;
> int ret;
>
> WARN_ON(engine->scratch.obj);
>
> - engine->scratch.obj = i915_gem_object_create(engine->i915->dev, 4096);
> - if (IS_ERR(engine->scratch.obj)) {
> - DRM_ERROR("Failed to allocate seqno page\n");
> - ret = PTR_ERR(engine->scratch.obj);
> - engine->scratch.obj = NULL;
> + obj = i915_gem_object_create(engine->i915->dev, 4096);
> + if (IS_ERR(obj)) {
> + DRM_ERROR("Failed to allocate scratch page\n");
> + ret = PTR_ERR(obj);
> goto err;
> }
>
> - ret = i915_gem_object_set_cache_level(engine->scratch.obj,
> - I915_CACHE_LLC);
> + ret = i915_gem_obj_ggtt_pin(obj, 4096, PIN_HIGH);
> if (ret)
> goto err_unref;
>
> - ret = i915_gem_obj_ggtt_pin(engine->scratch.obj, 4096, 0);
> - if (ret)
> - goto err_unref;
> -
> - engine->scratch.gtt_offset = i915_gem_obj_ggtt_offset(engine->scratch.obj);
> - engine->scratch.cpu_page = kmap(sg_page(engine->scratch.obj->pages->sgl));
> - if (engine->scratch.cpu_page == NULL) {
> - ret = -ENOMEM;
> - goto err_unpin;
> - }
> -
> + engine->scratch.obj = obj;
> + engine->scratch.gtt_offset = i915_gem_obj_ggtt_offset(obj);
> DRM_DEBUG_DRIVER("%s pipe control offset: 0x%08x\n",
> engine->name, engine->scratch.gtt_offset);
> return 0;
>
> -err_unpin:
> - i915_gem_object_ggtt_unpin(engine->scratch.obj);
> err_unref:
> drm_gem_object_unreference(&engine->scratch.obj->base);
> err:
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
> index 785c9e5312ff..4b2f19decb30 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.h
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
> @@ -338,7 +338,6 @@ struct intel_engine_cs {
> struct {
> struct drm_i915_gem_object *obj;
> u32 gtt_offset;
> - volatile u32 *cpu_page;
> } scratch;
>
> bool needs_cmd_parser;
>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
Regards,
Tvrtko
More information about the Intel-gfx
mailing list