Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 347cf10a authored by Dave Airlie's avatar Dave Airlie
Browse files

drm/udl: take reference to device struct for dma-bufs



this stops the device from being deleted before all the dma-bufs
on it are freed, this fixes an oops when you unplug a udl device while
it has imported a buffer from another device.

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent b098d672
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -177,8 +177,10 @@ void udl_gem_free_object(struct drm_gem_object *gem_obj)
	if (obj->vmapping)
		udl_gem_vunmap(obj);

	if (gem_obj->import_attach)
	if (gem_obj->import_attach) {
		drm_prime_gem_destroy(gem_obj, obj->sg);
		put_device(gem_obj->dev->dev);
	}

	if (obj->pages)
		udl_gem_put_pages(obj);
@@ -256,9 +258,12 @@ struct drm_gem_object *udl_gem_prime_import(struct drm_device *dev,
	int ret;

	/* need to attach */
	get_device(dev->dev);
	attach = dma_buf_attach(dma_buf, dev->dev);
	if (IS_ERR(attach))
	if (IS_ERR(attach)) {
		put_device(dev->dev);
		return ERR_CAST(attach);
	}

	get_dma_buf(dma_buf);

@@ -282,6 +287,6 @@ struct drm_gem_object *udl_gem_prime_import(struct drm_device *dev,
fail_detach:
	dma_buf_detach(dma_buf, attach);
	dma_buf_put(dma_buf);

	put_device(dev->dev);
	return ERR_PTR(ret);
}