qxl: update to new idr interfaces.
authorDave Airlie <airlied@redhat.com>
Fri, 3 May 2013 00:37:20 +0000 (10:37 +1000)
committerDave Airlie <airlied@redhat.com>
Fri, 3 May 2013 00:37:20 +0000 (10:37 +1000)
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/qxl/qxl_cmd.c
drivers/gpu/drm/qxl/qxl_release.c

index 736365e6ca8098d5e5bd5d99b1217c861d058e3e..08b0823c93d526405d506aca4849f2c83a9d9eb5 100644 (file)
@@ -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;
 }
 
index c4267c71dd2d7e658edc10ea10d475bd6f997611..b443d6751d5f2da675dda7fccec24b2637312ba7 100644 (file)
@@ -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: