[PATCH] drm/xe/vm: bugfix in xe_vm_create_ioctl
Matthew Brost
matthew.brost at intel.com
Fri Jan 19 20:27:04 UTC 2024
On Thu, Jan 18, 2024 at 07:31:55PM +0200, Moti Haimovski wrote:
> Fix xe_vm_create_ioctl routine not freeing the vm-id allocated to it
> when the function fails.
>
> Relates to: FSW-1360 xe_vm_create_ioctl does not free vm id on error.
>
This needs the following tag:
Fixes: dd08ebf6c352 ("drm/xe: Introduce a new DRM driver for Intel GPUs")
> Signed-off-by: Moti Haimovski <mhaimovski at habana.ai>
With that tag added:
Reviewed-by: Matthew Brost <matthew.brost at intel.com>
> ---
> drivers/gpu/drm/xe/xe_vm.c | 22 +++++++++++++---------
> 1 file changed, 13 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
> index a7e7a0b24099..8dbe13676a2f 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_exit;
>
> 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 free_id;
> +
> vm->usm.asid = asid;
> }
>
> @@ -1888,6 +1884,14 @@ int xe_vm_create_ioctl(struct drm_device *dev, void *data,
> #endif
>
> return 0;
> +
> +free_id:
> + mutex_lock(&xef->vm.lock);
> + xa_erase(&xef->vm.xa, id);
> + mutex_unlock(&xef->vm.lock);
> +err_exit:
> + xe_vm_close_and_put(vm);
> + return err;
> }
>
> int xe_vm_destroy_ioctl(struct drm_device *dev, void *data,
> --
> 2.34.1
>
More information about the Intel-xe
mailing list