aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/qxl/qxl_cmd.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2013-05-02 20:37:20 -0400
committerDave Airlie <airlied@redhat.com>2013-05-02 20:37:20 -0400
commit307b9c022720f9de90d58e51743e01e9a42aec59 (patch)
treedb95e7a54bf4826aa629f405c19511ba3bb1450b /drivers/gpu/drm/qxl/qxl_cmd.c
parentd2dbaaf6265d292575bfe41bf668b0cab759e19c (diff)
qxl: update to new idr interfaces.
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/qxl/qxl_cmd.c')
-rw-r--r--drivers/gpu/drm/qxl/qxl_cmd.c19
1 files changed, 7 insertions, 12 deletions
diff --git a/drivers/gpu/drm/qxl/qxl_cmd.c b/drivers/gpu/drm/qxl/qxl_cmd.c
index 736365e6ca80..08b0823c93d5 100644
--- a/drivers/gpu/drm/qxl/qxl_cmd.c
+++ b/drivers/gpu/drm/qxl/qxl_cmd.c
@@ -435,22 +435,18 @@ void qxl_io_monitors_config(struct qxl_device *qdev)
435int qxl_surface_id_alloc(struct qxl_device *qdev, 435int qxl_surface_id_alloc(struct qxl_device *qdev,
436 struct qxl_bo *surf) 436 struct qxl_bo *surf)
437{ 437{
438 uint32_t handle = -ENOMEM; 438 uint32_t handle;
439 int idr_ret; 439 int idr_ret;
440 int count = 0; 440 int count = 0;
441again: 441again:
442 if (idr_pre_get(&qdev->surf_id_idr, GFP_ATOMIC) == 0) { 442 idr_preload(GFP_ATOMIC);
443 DRM_ERROR("Out of memory for surf idr\n");
444 kfree(surf);
445 goto alloc_fail;
446 }
447
448 spin_lock(&qdev->surf_id_idr_lock); 443 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);
450 spin_unlock(&qdev->surf_id_idr_lock); 445 spin_unlock(&qdev->surf_id_idr_lock);
451 446 idr_preload_end();
452 if (idr_ret == -EAGAIN) 447 if (idr_ret < 0)
453 goto again; 448 return idr_ret;
449 handle = idr_ret;
454 450
455 if (handle >= qdev->rom->n_surfaces) { 451 if (handle >= qdev->rom->n_surfaces) {
456 count++; 452 count++;
@@ -465,7 +461,6 @@ again:
465 spin_lock(&qdev->surf_id_idr_lock); 461 spin_lock(&qdev->surf_id_idr_lock);
466 qdev->last_alloced_surf_id = handle; 462 qdev->last_alloced_surf_id = handle;
467 spin_unlock(&qdev->surf_id_idr_lock); 463 spin_unlock(&qdev->surf_id_idr_lock);
468 alloc_fail:
469 return 0; 464 return 0;
470} 465}
471 466