Message ID | 20220614184348.23746-2-ramalingam.c@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Break VM to rq reference loop | expand |
On Wed, Jun 15, 2022 at 12:13:46AM +0530, Ramalingam C wrote: > From: Niranjana Vishwanathapura <niranjana.vishwanathapura@intel.com> > > 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 <niranjana.vishwanathapura@intel.com> > Suggested-by: Matthew Brost <matthew.brost@intel.com> Reviewed-by: Matthew Brost <matthew.brost@intel.com> > --- > 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, &seqno); > 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 >
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, &seqno); 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