[Intel-xe] [PATCH] drm/xe: Fix engine lookup refcount race
Matthew Auld
matthew.william.auld at gmail.com
Thu May 25 10:52:23 UTC 2023
On Thu, 25 May 2023 at 09:16, Thomas Hellström
<thomas.hellstrom at linux.intel.com> wrote:
>
> Fix a race where the engine could disappear between lookup unlock and
> xe_engine_get().
>
> Signed-off-by: Thomas Hellström <thomas.hellstrom at linux.intel.com>
> ---
> drivers/gpu/drm/xe/xe_engine.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_engine.c b/drivers/gpu/drm/xe/xe_engine.c
> index 094ec17d3004..3a400a546dfe 100644
> --- a/drivers/gpu/drm/xe/xe_engine.c
> +++ b/drivers/gpu/drm/xe/xe_engine.c
> @@ -161,10 +161,9 @@ struct xe_engine *xe_engine_lookup(struct xe_file *xef, u32 id)
>
> mutex_lock(&xef->engine.lock);
> e = xa_load(&xef->engine.xa, id);
> - mutex_unlock(&xef->engine.lock);
> -
> if (e)
> xe_engine_get(e);
> + mutex_unlock(&xef->engine.lock);
Makes sense to me.
Reviewed-by: Matthew Auld <matthew.auld at intel.com>
But looking around a bit, why does engine_get_property_ioctl() not use
this? It also does a raw xa_load() and then touches the engine without
holding the lock or keeping a ref?
>
> return e;
> }
> --
> 2.39.2
>
More information about the Intel-xe
mailing list