[PATCH v3] drm/xe/vm: bugfix in xe_vm_create_ioctl

Tomer Tayar ttayar at habana.ai
Mon Jan 22 10:26:10 UTC 2024


On 22/01/2024 12:24, Moti Haimovski wrote:
> Fix xe_vm_create_ioctl routine not freeing the vm-id allocated to it
> when the function fails.
>
> Fixes: dd08ebf6c352 ("drm/xe: Introduce a new DRM driver for Intel GPUs")
>
> Signed-off-by: Moti Haimovski <mhaimovski at habana.ai>
> Reviewed-by: Matthew Brost <matthew.brost at intel.com>

Reviewed-by: Tomer Tayar <ttayar at habana.ai>

>
> ---
> Changes in v3:
> - Added "Fixes" to commit message. (Matthew B)
> - Added "Reviewed-by: Matthew Brost". (Matthew B)
>
> Changes in v2:
> - Removed internal ticket info from commit message. (Lucas, Tomer)
> - Modified the name of the goto error labels in xe_vm_create_ioctl
>    according the review suggestions. (Tomer T)
> ---
>   drivers/gpu/drm/xe/xe_vm.c | 23 ++++++++++++++---------
>   1 file changed, 14 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
> index 7ea0f151d223..dc609e3cc094 100644
> --- a/drivers/gpu/drm/xe/xe_vm.c
> +++ b/drivers/gpu/drm/xe/xe_vm.c
> @@ -1855,10 +1855,8 @@ int xe_vm_create_ioctl(struct drm_device *dev, void *data,
>   	mutex_lock(&xef->vm.lock);
>   	err = xa_alloc(&xef->vm.xa, &id, vm, xa_limit_32b, GFP_KERNEL);
>   	mutex_unlock(&xef->vm.lock);
> -	if (err) {
> -		xe_vm_close_and_put(vm);
> -		return err;
> -	}
> +	if (err)
> +		goto err_close_and_put;
>   
>   	if (xe->info.has_asid) {
>   		mutex_lock(&xe->usm.lock);
> @@ -1866,11 +1864,9 @@ int xe_vm_create_ioctl(struct drm_device *dev, void *data,
>   				      XA_LIMIT(1, XE_MAX_ASID - 1),
>   				      &xe->usm.next_asid, GFP_KERNEL);
>   		mutex_unlock(&xe->usm.lock);
> -		if (err < 0) {
> -			xe_vm_close_and_put(vm);
> -			return err;
> -		}
> -		err = 0;
> +		if (err < 0)
> +			goto err_free_id;
> +
>   		vm->usm.asid = asid;
>   	}
>   
> @@ -1888,6 +1884,15 @@ int xe_vm_create_ioctl(struct drm_device *dev, void *data,
>   #endif
>   
>   	return 0;
> +
> +err_free_id:
> +	mutex_lock(&xef->vm.lock);
> +	xa_erase(&xef->vm.xa, id);
> +	mutex_unlock(&xef->vm.lock);
> +err_close_and_put:
> +	xe_vm_close_and_put(vm);
> +
> +	return err;
>   }
>   
>   int xe_vm_destroy_ioctl(struct drm_device *dev, void *data,




More information about the Intel-xe mailing list