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

Commit 307b9c02 authored by Dave Airlie's avatar Dave Airlie
Browse files

qxl: update to new idr interfaces.



Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent d2dbaaf6
Loading
Loading
Loading
Loading
+7 −12
Original line number Diff line number Diff line
@@ -435,22 +435,18 @@ void qxl_io_monitors_config(struct qxl_device *qdev)
int qxl_surface_id_alloc(struct qxl_device *qdev,
		      struct qxl_bo *surf)
{
	uint32_t handle = -ENOMEM;
	uint32_t handle;
	int idr_ret;
	int count = 0;
again:
	if (idr_pre_get(&qdev->surf_id_idr, GFP_ATOMIC) == 0) {
		DRM_ERROR("Out of memory for surf idr\n");
		kfree(surf);
		goto alloc_fail;
	}

	idr_preload(GFP_ATOMIC);
	spin_lock(&qdev->surf_id_idr_lock);
	idr_ret = idr_get_new_above(&qdev->surf_id_idr, NULL, 1, &handle);
	idr_ret = idr_alloc(&qdev->surf_id_idr, NULL, 1, 0, GFP_NOWAIT);
	spin_unlock(&qdev->surf_id_idr_lock);

	if (idr_ret == -EAGAIN)
		goto again;
	idr_preload_end();
	if (idr_ret < 0)
		return idr_ret;
	handle = idr_ret;

	if (handle >= qdev->rom->n_surfaces) {
		count++;
@@ -465,7 +461,6 @@ int qxl_surface_id_alloc(struct qxl_device *qdev,
	spin_lock(&qdev->surf_id_idr_lock);
	qdev->last_alloced_surf_id = handle;
	spin_unlock(&qdev->surf_id_idr_lock);
 alloc_fail:
	return 0;
}

+9 −12
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ qxl_release_alloc(struct qxl_device *qdev, int type,
		  struct qxl_release **ret)
{
	struct qxl_release *release;
	int handle = 0;
	int handle;
	size_t size = sizeof(*release);
	int idr_ret;

@@ -56,18 +56,15 @@ qxl_release_alloc(struct qxl_device *qdev, int type,
	release->bo_count = 0;
	release->release_offset = 0;
	release->surface_release_id = 0;
again:
	if (idr_pre_get(&qdev->release_idr, GFP_KERNEL) == 0) {
		DRM_ERROR("Out of memory for release idr\n");
		kfree(release);
		goto release_fail;
	}

	idr_preload(GFP_KERNEL);
	spin_lock(&qdev->release_idr_lock);
	idr_ret = idr_get_new_above(&qdev->release_idr, release, 1, &handle);
	idr_ret = idr_alloc(&qdev->release_idr, release, 1, 0, GFP_NOWAIT);
	spin_unlock(&qdev->release_idr_lock);
	if (idr_ret == -EAGAIN)
		goto again;
	if (ret)
	idr_preload_end();
	handle = idr_ret;
	if (idr_ret < 0)
		goto release_fail;
	*ret = release;
	QXL_INFO(qdev, "allocated release %lld\n", handle);
	release->id = handle;