Signed-off-by: Matthew Wilcox <wi...@infradead.org>
---
 drivers/gpu/drm/drm_auth.c | 18 ++++++++----------
 include/drm/drm_auth.h     |  5 ++---
 2 files changed, 10 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/drm_auth.c b/drivers/gpu/drm/drm_auth.c
index 1669c42c40ed..268189e9e2e0 100644
--- a/drivers/gpu/drm/drm_auth.c
+++ b/drivers/gpu/drm/drm_auth.c
@@ -62,17 +62,16 @@ int drm_getmagic(struct drm_device *dev, void *data, struct 
drm_file *file_priv)
 
        mutex_lock(&dev->master_mutex);
        if (!file_priv->magic) {
-               ret = idr_alloc(&file_priv->master->magic_map, file_priv,
-                               1, 0, GFP_KERNEL);
-               if (ret >= 0)
-                       file_priv->magic = ret;
+               ret = xa_alloc(&file_priv->master->magic_map,
+                               &file_priv->magic, file_priv,
+                               xa_limit_31b, GFP_KERNEL);
        }
        auth->magic = file_priv->magic;
        mutex_unlock(&dev->master_mutex);
 
        DRM_DEBUG("%u\n", auth->magic);
 
-       return ret < 0 ? ret : 0;
+       return ret;
 }
 
 int drm_authmagic(struct drm_device *dev, void *data,
@@ -84,10 +83,10 @@ int drm_authmagic(struct drm_device *dev, void *data,
        DRM_DEBUG("%u\n", auth->magic);
 
        mutex_lock(&dev->master_mutex);
-       file = idr_find(&file_priv->master->magic_map, auth->magic);
+       file = xa_load(&file_priv->master->magic_map, auth->magic);
        if (file) {
                file->authenticated = 1;
-               idr_replace(&file_priv->master->magic_map, NULL, auth->magic);
+               xa_store(&file_priv->master->magic_map, auth->magic, NULL, 0);
        }
        mutex_unlock(&dev->master_mutex);
 
@@ -105,7 +104,7 @@ struct drm_master *drm_master_create(struct drm_device *dev)
        kref_init(&master->refcount);
        spin_lock_init(&master->lock.spinlock);
        init_waitqueue_head(&master->lock.lock_queue);
-       idr_init(&master->magic_map);
+       xa_init_flags(&master->magic_map, XA_FLAGS_ALLOC1);
        master->dev = dev;
 
        /* initialize the tree of output resource lessees */
@@ -269,7 +268,7 @@ void drm_master_release(struct drm_file *file_priv)
 
        mutex_lock(&dev->master_mutex);
        if (file_priv->magic)
-               idr_remove(&file_priv->master->magic_map, file_priv->magic);
+               xa_erase(&file_priv->master->magic_map, file_priv->magic);
 
        if (!drm_is_current_master(file_priv))
                goto out;
@@ -348,7 +347,6 @@ static void drm_master_destroy(struct kref *kref)
 
        drm_legacy_master_rmmaps(dev, master);
 
-       idr_destroy(&master->magic_map);
        idr_destroy(&master->leases);
        idr_destroy(&master->lessee_idr);
 
diff --git a/include/drm/drm_auth.h b/include/drm/drm_auth.h
index 86bff9841b54..c719fe375967 100644
--- a/include/drm/drm_auth.h
+++ b/include/drm/drm_auth.h
@@ -76,10 +76,9 @@ struct drm_master {
         */
        int unique_len;
        /**
-        * @magic_map: Map of used authentication tokens. Protected by
-        * &drm_device.master_mutex.
+        * @magic_map: Map of used authentication tokens.
         */
-       struct idr magic_map;
+       struct xarray magic_map;
        struct drm_lock_data lock;
        void *driver_priv;
 
-- 
2.20.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to