Re: [Intel-gfx] [PATCH 1/3] drm/i915: Do not access rq->engine without a reference

2022-06-27 Thread Matthew Brost
On Wed, Jun 15, 2022 at 12:13:46AM +0530, Ramalingam C wrote:
> From: Niranjana Vishwanathapura 
> 
> In i915_fence_get_driver_name(), user may not hold a
> reference to rq->engine. Hence do not access it. Instead,
> store required device private pointer in 'rq->i915' and use it.
> 
> Signed-off-by: Niranjana Vishwanathapura 
> Suggested-by: Matthew Brost 

Reviewed-by: Matthew Brost 

> ---
>  drivers/gpu/drm/i915/i915_request.c | 3 ++-
>  drivers/gpu/drm/i915/i915_request.h | 2 ++
>  2 files changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_request.c 
> b/drivers/gpu/drm/i915/i915_request.c
> index 73d5195146b0..7f6998bf390c 100644
> --- a/drivers/gpu/drm/i915/i915_request.c
> +++ b/drivers/gpu/drm/i915/i915_request.c
> @@ -60,7 +60,7 @@ static struct kmem_cache *slab_execute_cbs;
>  
>  static const char *i915_fence_get_driver_name(struct dma_fence *fence)
>  {
> - return dev_name(to_request(fence)->engine->i915->drm.dev);
> + return dev_name(to_request(fence)->i915->drm.dev);
>  }
>  
>  static const char *i915_fence_get_timeline_name(struct dma_fence *fence)
> @@ -937,6 +937,7 @@ __i915_request_create(struct intel_context *ce, gfp_t gfp)
>   rq->engine = ce->engine;
>   rq->ring = ce->ring;
>   rq->execution_mask = ce->engine->mask;
> + rq->i915 = ce->engine->i915;
>  
>   ret = intel_timeline_get_seqno(tl, rq, );
>   if (ret)
> diff --git a/drivers/gpu/drm/i915/i915_request.h 
> b/drivers/gpu/drm/i915/i915_request.h
> index 28b1f9db5487..47041ec68df8 100644
> --- a/drivers/gpu/drm/i915/i915_request.h
> +++ b/drivers/gpu/drm/i915/i915_request.h
> @@ -196,6 +196,8 @@ struct i915_request {
>   struct dma_fence fence;
>   spinlock_t lock;
>  
> + struct drm_i915_private *i915;
> +
>   /**
>* Context and ring buffer related to this request
>* Contexts are refcounted, so when this request is associated with a
> -- 
> 2.20.1
> 


[Intel-gfx] [PATCH 1/3] drm/i915: Do not access rq->engine without a reference

2022-06-14 Thread Ramalingam C
From: Niranjana Vishwanathapura 

In i915_fence_get_driver_name(), user may not hold a
reference to rq->engine. Hence do not access it. Instead,
store required device private pointer in 'rq->i915' and use it.

Signed-off-by: Niranjana Vishwanathapura 
Suggested-by: Matthew Brost 
---
 drivers/gpu/drm/i915/i915_request.c | 3 ++-
 drivers/gpu/drm/i915/i915_request.h | 2 ++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/i915_request.c 
b/drivers/gpu/drm/i915/i915_request.c
index 73d5195146b0..7f6998bf390c 100644
--- a/drivers/gpu/drm/i915/i915_request.c
+++ b/drivers/gpu/drm/i915/i915_request.c
@@ -60,7 +60,7 @@ static struct kmem_cache *slab_execute_cbs;
 
 static const char *i915_fence_get_driver_name(struct dma_fence *fence)
 {
-   return dev_name(to_request(fence)->engine->i915->drm.dev);
+   return dev_name(to_request(fence)->i915->drm.dev);
 }
 
 static const char *i915_fence_get_timeline_name(struct dma_fence *fence)
@@ -937,6 +937,7 @@ __i915_request_create(struct intel_context *ce, gfp_t gfp)
rq->engine = ce->engine;
rq->ring = ce->ring;
rq->execution_mask = ce->engine->mask;
+   rq->i915 = ce->engine->i915;
 
ret = intel_timeline_get_seqno(tl, rq, );
if (ret)
diff --git a/drivers/gpu/drm/i915/i915_request.h 
b/drivers/gpu/drm/i915/i915_request.h
index 28b1f9db5487..47041ec68df8 100644
--- a/drivers/gpu/drm/i915/i915_request.h
+++ b/drivers/gpu/drm/i915/i915_request.h
@@ -196,6 +196,8 @@ struct i915_request {
struct dma_fence fence;
spinlock_t lock;
 
+   struct drm_i915_private *i915;
+
/**
 * Context and ring buffer related to this request
 * Contexts are refcounted, so when this request is associated with a
-- 
2.20.1