Skip to content

Commit 307b9c0

Browse files
committed
qxl: update to new idr interfaces.
Signed-off-by: Dave Airlie <[email protected]>
1 parent d2dbaaf commit 307b9c0

File tree

2 files changed

+16
-24
lines changed

2 files changed

+16
-24
lines changed

drivers/gpu/drm/qxl/qxl_cmd.c

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -435,22 +435,18 @@ void qxl_io_monitors_config(struct qxl_device *qdev)
435435
int qxl_surface_id_alloc(struct qxl_device *qdev,
436436
struct qxl_bo *surf)
437437
{
438-
uint32_t handle = -ENOMEM;
438+
uint32_t handle;
439439
int idr_ret;
440440
int count = 0;
441441
again:
442-
if (idr_pre_get(&qdev->surf_id_idr, GFP_ATOMIC) == 0) {
443-
DRM_ERROR("Out of memory for surf idr\n");
444-
kfree(surf);
445-
goto alloc_fail;
446-
}
447-
442+
idr_preload(GFP_ATOMIC);
448443
spin_lock(&qdev->surf_id_idr_lock);
449-
idr_ret = idr_get_new_above(&qdev->surf_id_idr, NULL, 1, &handle);
444+
idr_ret = idr_alloc(&qdev->surf_id_idr, NULL, 1, 0, GFP_NOWAIT);
450445
spin_unlock(&qdev->surf_id_idr_lock);
451-
452-
if (idr_ret == -EAGAIN)
453-
goto again;
446+
idr_preload_end();
447+
if (idr_ret < 0)
448+
return idr_ret;
449+
handle = idr_ret;
454450

455451
if (handle >= qdev->rom->n_surfaces) {
456452
count++;
@@ -465,7 +461,6 @@ int qxl_surface_id_alloc(struct qxl_device *qdev,
465461
spin_lock(&qdev->surf_id_idr_lock);
466462
qdev->last_alloced_surf_id = handle;
467463
spin_unlock(&qdev->surf_id_idr_lock);
468-
alloc_fail:
469464
return 0;
470465
}
471466

drivers/gpu/drm/qxl/qxl_release.c

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ qxl_release_alloc(struct qxl_device *qdev, int type,
4343
struct qxl_release **ret)
4444
{
4545
struct qxl_release *release;
46-
int handle = 0;
46+
int handle;
4747
size_t size = sizeof(*release);
4848
int idr_ret;
4949

@@ -56,19 +56,16 @@ qxl_release_alloc(struct qxl_device *qdev, int type,
5656
release->bo_count = 0;
5757
release->release_offset = 0;
5858
release->surface_release_id = 0;
59-
again:
60-
if (idr_pre_get(&qdev->release_idr, GFP_KERNEL) == 0) {
61-
DRM_ERROR("Out of memory for release idr\n");
62-
kfree(release);
63-
goto release_fail;
64-
}
59+
60+
idr_preload(GFP_KERNEL);
6561
spin_lock(&qdev->release_idr_lock);
66-
idr_ret = idr_get_new_above(&qdev->release_idr, release, 1, &handle);
62+
idr_ret = idr_alloc(&qdev->release_idr, release, 1, 0, GFP_NOWAIT);
6763
spin_unlock(&qdev->release_idr_lock);
68-
if (idr_ret == -EAGAIN)
69-
goto again;
70-
if (ret)
71-
*ret = release;
64+
idr_preload_end();
65+
handle = idr_ret;
66+
if (idr_ret < 0)
67+
goto release_fail;
68+
*ret = release;
7269
QXL_INFO(qdev, "allocated release %lld\n", handle);
7370
release->id = handle;
7471
release_fail:

0 commit comments

Comments
 (0)