[PATCH] remove workload from intel_shadow_wa_ctx structure

Zhenyu Wang zhenyuw at linux.intel.com
Fri Mar 17 06:35:26 UTC 2017


On 2017.03.17 02:06:50 -0400, Tina Zhang wrote:
> intel_shadow_wa_ctx is a field of intel_vgpu_workload. container_of() can
> be used to refine the relation-ship between intel_shadow_wa_ctx and
> intel_vgpu_workload. This patch removes the useless dereference.
> 
> Signed-off-by: Tina Zhang <tina.zhang at intel.com>
>

pls fix patch title, "drm/i915/gvt: ..."

> diff --git a/drivers/gpu/drm/i915/gvt/cmd_parser.c b/drivers/gpu/drm/i915/gvt/cmd_parser.c
> index 6f972af..34aea4e 100644
> --- a/drivers/gpu/drm/i915/gvt/cmd_parser.c
> +++ b/drivers/gpu/drm/i915/gvt/cmd_parser.c
> @@ -2604,6 +2604,9 @@ static int scan_wa_ctx(struct intel_shadow_wa_ctx *wa_ctx)
>  	unsigned long gma_head, gma_tail, gma_bottom, ring_size, ring_tail;
>  	struct parser_exec_state s;
>  	int ret = 0;
> +	struct intel_vgpu_workload *workload = container_of(wa_ctx,
> +				struct intel_vgpu_workload,
> +				wa_ctx);
>  
>  	/* ring base is page aligned */
>  	if (WARN_ON(!IS_ALIGNED(wa_ctx->indirect_ctx.guest_gma, GTT_PAGE_SIZE)))
> @@ -2618,14 +2621,14 @@ static int scan_wa_ctx(struct intel_shadow_wa_ctx *wa_ctx)
>  
>  	s.buf_type = RING_BUFFER_INSTRUCTION;
>  	s.buf_addr_type = GTT_BUFFER;
> -	s.vgpu = wa_ctx->workload->vgpu;
> -	s.ring_id = wa_ctx->workload->ring_id;
> +	s.vgpu = workload->vgpu;
> +	s.ring_id = workload->ring_id;
>  	s.ring_start = wa_ctx->indirect_ctx.guest_gma;
>  	s.ring_size = ring_size;
>  	s.ring_head = gma_head;
>  	s.ring_tail = gma_tail;
>  	s.rb_va = wa_ctx->indirect_ctx.shadow_va;
> -	s.workload = wa_ctx->workload;
> +	s.workload = workload;
>  
>  	ret = ip_gma_set(&s, gma_head);
>  	if (ret)
> @@ -2708,12 +2711,15 @@ static int shadow_indirect_ctx(struct intel_shadow_wa_ctx *wa_ctx)
>  {
>  	int ctx_size = wa_ctx->indirect_ctx.size;
>  	unsigned long guest_gma = wa_ctx->indirect_ctx.guest_gma;
> -	struct intel_vgpu *vgpu = wa_ctx->workload->vgpu;
> +	struct intel_vgpu_workload *workload = container_of(wa_ctx,
> +					struct intel_vgpu_workload,
> +					wa_ctx);
> +	struct intel_vgpu *vgpu = workload->vgpu;
>  	struct drm_i915_gem_object *obj;
>  	int ret = 0;
>  	void *map;
>  
> -	obj = i915_gem_object_create(wa_ctx->workload->vgpu->gvt->dev_priv,
> +	obj = i915_gem_object_create(workload->vgpu->gvt->dev_priv,
>  				     roundup(ctx_size + CACHELINE_BYTES,
>  					     PAGE_SIZE));
>  	if (IS_ERR(obj))
> @@ -2733,8 +2739,8 @@ static int shadow_indirect_ctx(struct intel_shadow_wa_ctx *wa_ctx)
>  		goto unmap_src;
>  	}
>  
> -	ret = copy_gma_to_hva(wa_ctx->workload->vgpu,
> -				wa_ctx->workload->vgpu->gtt.ggtt_mm,
> +	ret = copy_gma_to_hva(workload->vgpu,
> +				workload->vgpu->gtt.ggtt_mm,
>  				guest_gma, guest_gma + ctx_size,
>  				map);
>  	if (ret < 0) {
> @@ -2772,7 +2778,10 @@ static int combine_wa_ctx(struct intel_shadow_wa_ctx *wa_ctx)
>  int intel_gvt_scan_and_shadow_wa_ctx(struct intel_shadow_wa_ctx *wa_ctx)
>  {
>  	int ret;
> -	struct intel_vgpu *vgpu = wa_ctx->workload->vgpu;
> +	struct intel_vgpu_workload *workload = container_of(wa_ctx,
> +					struct intel_vgpu_workload,
> +					wa_ctx);
> +	struct intel_vgpu *vgpu = workload->vgpu;
>  
>  	if (wa_ctx->indirect_ctx.size == 0)
>  		return 0;
> diff --git a/drivers/gpu/drm/i915/gvt/execlist.c b/drivers/gpu/drm/i915/gvt/execlist.c
> index f1f426a..ce4276a 100644
> --- a/drivers/gpu/drm/i915/gvt/execlist.c
> +++ b/drivers/gpu/drm/i915/gvt/execlist.c
> @@ -394,9 +394,11 @@ static void prepare_shadow_batch_buffer(struct intel_vgpu_workload *workload)
>  
>  static int update_wa_ctx_2_shadow_ctx(struct intel_shadow_wa_ctx *wa_ctx)
>  {
> -	int ring_id = wa_ctx->workload->ring_id;
> -	struct i915_gem_context *shadow_ctx =
> -		wa_ctx->workload->vgpu->shadow_ctx;
> +	struct intel_vgpu_workload *workload = container_of(wa_ctx,
> +					struct intel_vgpu_workload,
> +					wa_ctx);
> +	int ring_id = workload->ring_id;
> +	struct i915_gem_context *shadow_ctx = workload->vgpu->shadow_ctx;
>  	struct drm_i915_gem_object *ctx_obj =
>  		shadow_ctx->engine[ring_id].state->obj;
>  	struct execlist_ring_context *shadow_ring_context;
> @@ -680,7 +682,6 @@ static int submit_context(struct intel_vgpu *vgpu, int ring_id,
>  			CACHELINE_BYTES;
>  		workload->wa_ctx.per_ctx.guest_gma =
>  			per_ctx & PER_CTX_ADDR_MASK;
> -		workload->wa_ctx.workload = workload;
>  
>  		WARN_ON(workload->wa_ctx.indirect_ctx.size && !(per_ctx & 0x1));
>  	}
> diff --git a/drivers/gpu/drm/i915/gvt/scheduler.h b/drivers/gpu/drm/i915/gvt/scheduler.h
> index 2833dfa..2cd725c 100644
> --- a/drivers/gpu/drm/i915/gvt/scheduler.h
> +++ b/drivers/gpu/drm/i915/gvt/scheduler.h
> @@ -67,7 +67,6 @@ struct shadow_per_ctx {
>  };
>  
>  struct intel_shadow_wa_ctx {
> -	struct intel_vgpu_workload *workload;
>  	struct shadow_indirect_ctx indirect_ctx;
>  	struct shadow_per_ctx per_ctx;
>  
> -- 
> 2.7.4
> 
> _______________________________________________
> intel-gvt-dev mailing list
> intel-gvt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gvt-dev

-- 
Open Source Technology Center, Intel ltd.

$gpg --keyserver wwwkeys.pgp.net --recv-keys 4D781827
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 163 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/intel-gvt-dev/attachments/20170317/14441dcc/attachment.sig>


More information about the intel-gvt-dev mailing list