Эх сурвалжийг харах

qxl: update to new idr interfaces.

Signed-off-by: Dave Airlie <airlied@redhat.com>
Dave Airlie 12 жил өмнө
parent
commit
307b9c0227

+ 7 - 12
drivers/gpu/drm/qxl/qxl_cmd.c

@@ -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 @@ again:
 	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
drivers/gpu/drm/qxl/qxl_release.c

@@ -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,19 +56,16 @@ 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)
-		*ret = release;
+	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;
 release_fail: