Convert to the much saner new idr interface.

Only compile tested.

Signed-off-by: Tejun Heo <tj at kernel.org>
Cc: David Airlie <airlied at linux.ie>
Cc: dri-devel at lists.freedesktop.org
---
This patch depends on an earlier idr changes and I think it would be
best to route these together through -mm.  Please holler if there's
any objection.  Thanks.

 drivers/gpu/drm/vmwgfx/vmwgfx_resource.c | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c 
b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c
index e01a17b..c9d0676 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c
@@ -177,17 +177,16 @@ int vmw_resource_alloc_id(struct vmw_resource *res)

        BUG_ON(res->id != -1);

-       do {
-               if (unlikely(idr_pre_get(idr, GFP_KERNEL) == 0))
-                       return -ENOMEM;
-
-               write_lock(&dev_priv->resource_lock);
-               ret = idr_get_new_above(idr, res, 1, &res->id);
-               write_unlock(&dev_priv->resource_lock);
+       idr_preload(GFP_KERNEL);
+       write_lock(&dev_priv->resource_lock);

-       } while (ret == -EAGAIN);
+       ret = idr_alloc(idr, res, 1, 0, GFP_NOWAIT);
+       if (ret >= 0)
+               res->id = ret;

-       return ret;
+       write_unlock(&dev_priv->resource_lock);
+       idr_preload_end();
+       return ret < 0 ? ret : 0;
 }

 /**
-- 
1.8.1

Reply via email to