|
@@ -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;
|
|
|
}
|
|
|
|
|
|
/**
|