[PATCH v2 06/15] drm/panthor: Add GEM logical block

Boris Brezillon boris.brezillon at collabora.com
Tue Aug 29 14:45:06 UTC 2023


On Mon, 14 Aug 2023 14:40:25 +0100
Steven Price <steven.price at arm.com> wrote:

> > +/**
> > + * panthor_gem_create_with_handle() - Create a GEM object and attach it to a handle.
> > + * @file: DRM file.
> > + * @ddev: DRM device.
> > + * @exclusive_vm: Exclusive VM. Not NULL if the GEM object can't be shared.
> > + * @size: Size of the GEM object to allocate.
> > + * @flags: Combination of drm_panthor_bo_flags flags.
> > + * @handle: Pointer holding the handle pointing to the new GEM object.
> > + *
> > + * Return: A valid pointer on success, an ERR_PTR() otherwise.
> > + */
> > +struct panthor_gem_object *
> > +panthor_gem_create_with_handle(struct drm_file *file,
> > +			       struct drm_device *ddev,
> > +			       struct panthor_vm *exclusive_vm,
> > +			       size_t size,
> > +			       u32 flags, u32 *handle)
> > +{
> > +	int ret;
> > +	struct drm_gem_shmem_object *shmem;
> > +	struct panthor_gem_object *bo;
> > +
> > +	shmem = drm_gem_shmem_create(ddev, size);
> > +	if (IS_ERR(shmem))
> > +		return ERR_CAST(shmem);
> > +
> > +	bo = to_panthor_bo(&shmem->base);
> > +	bo->flags = flags;
> > +
> > +	if (exclusive_vm) {
> > +		bo->exclusive_vm = panthor_vm_get(exclusive_vm);
> > +		bo->base.base.resv = panthor_vm_resv(exclusive_vm);
> > +	}
> > +
> > +	/*
> > +	 * Allocate an id of idr table where the obj is registered
> > +	 * and handle has the id what user can see.
> > +	 */
> > +	ret = drm_gem_handle_create(file, &shmem->base, handle);
> > +	/* drop reference from allocate - handle holds it now. */
> > +	drm_gem_object_put(&shmem->base);
> > +	if (ret)
> > +		return ERR_PTR(ret);
> > +
> > +	return bo;
> > +}  
> 
> This function might be better just returning a simple int. The
> "with_handle" approach means that doing anything much with the returned
> object is dodgy (because another user space thread could have already
> guessed the handle), and anyway the only caller
> (panthor_ioctl_bo_create()) doesn't use the object and just extracts the
> error code (if any).

Totally agree. I'll change the return type for an int.


More information about the dri-devel mailing list