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,
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);
kref_init(&master->refcount);
drm_master_legacy_init(master);
- idr_init(&master->magic_map);
+ xa_init_flags(&master->magic_map, XA_FLAGS_ALLOC1);
master->dev = dev;
/* initialize the tree of output resource lessees */
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;
drm_legacy_master_rmmaps(dev, master);
- idr_destroy(&master->magic_map);
idr_destroy(&master->leases);
idr_destroy(&master->lessee_idr);