Jonathan Cavitt <[email protected]> writes:

> Static analysis issue:
>
> The u64 array workload->shadow_mm->ppgtt_mm.shadow_pdps is cast to a
> void pointer and passed as a u32 array to set_context_pdp_root_pointer
> as a part of update_shadow_pdps.  This isn't wrong, per se, but we
> should properly cast it to an appropriately-sized u32 array before
> submission.
>
> Signed-off-by: Jonathan Cavitt <[email protected]>
> ---
>  drivers/gpu/drm/i915/gvt/scheduler.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gvt/scheduler.c 
> b/drivers/gpu/drm/i915/gvt/scheduler.c
> index 15fdd514ca83..1a95c9f76faa 100644
> --- a/drivers/gpu/drm/i915/gvt/scheduler.c
> +++ b/drivers/gpu/drm/i915/gvt/scheduler.c
> @@ -72,6 +72,7 @@ static void update_shadow_pdps(struct intel_vgpu_workload 
> *workload)
>  {
>       struct execlist_ring_context *shadow_ring_context;
>       struct intel_context *ctx = workload->req->context;
> +     u32 pdp[8];
>  
>       if (WARN_ON(!workload->shadow_mm))
>               return;
> @@ -79,9 +80,10 @@ static void update_shadow_pdps(struct intel_vgpu_workload 
> *workload)
>       if (WARN_ON(!atomic_read(&workload->shadow_mm->pincount)))
>               return;
>  
> +     memcpy(pdp, workload->shadow_mm->ppgtt_mm.shadow_pdps,
> +            sizeof(u64) * 
> ARRAY_SIZE(workload->shadow_mm->ppgtt_mm.shadow_pdps));
>       shadow_ring_context = (struct execlist_ring_context 
> *)ctx->lrc_reg_state;
> -     set_context_pdp_root_pointer(shadow_ring_context,
> -                     (void *)workload->shadow_mm->ppgtt_mm.shadow_pdps);
> +     set_context_pdp_root_pointer(shadow_ring_context, pdp);
>  }
>  

I think we'd better just cast the type instead of extra copy.

Reply via email to