From 4e51d60718db5e0669f3cb0c122dce938325a967 Mon Sep 17 00:00:00 2001 From: Matthew Wilcox Date: Thu, 14 Mar 2019 18:11:57 -0400 Subject: [PATCH] interconnect: Convert icc_idr to XArray Signed-off-by: Matthew Wilcox --- drivers/interconnect/core.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/drivers/interconnect/core.c b/drivers/interconnect/core.c index 871eb4bc4efc..4c668f236bb5 100644 --- a/drivers/interconnect/core.c +++ b/drivers/interconnect/core.c @@ -19,7 +19,7 @@ #include #include -static DEFINE_IDR(icc_idr); +static DEFINE_XARRAY(icc_nodes); static LIST_HEAD(icc_providers); static DEFINE_MUTEX(icc_lock); static struct dentry *icc_debugfs_dir; @@ -94,7 +94,7 @@ DEFINE_SHOW_ATTRIBUTE(icc_summary); static struct icc_node *node_find(const int id) { - return idr_find(&icc_idr, id); + return xa_load(&icc_nodes, id); } static struct icc_path *path_init(struct device *dev, struct icc_node *dst, @@ -523,6 +523,7 @@ EXPORT_SYMBOL_GPL(icc_put); static struct icc_node *icc_node_create_nolock(int id) { struct icc_node *node; + int err; /* check if node already exists */ node = node_find(id); @@ -533,15 +534,14 @@ static struct icc_node *icc_node_create_nolock(int id) if (!node) return ERR_PTR(-ENOMEM); - id = idr_alloc(&icc_idr, node, id, id + 1, GFP_KERNEL); - if (id < 0) { - WARN(1, "%s: couldn't get idr\n", __func__); + node->id = id; + err = xa_insert(&icc_nodes, id, node, GFP_KERNEL); + if (err < 0) { + WARN(1, "%s: id error %d\n", __func__, err); kfree(node); - return ERR_PTR(id); + return ERR_PTR(err); } - node->id = id; - return node; } @@ -575,9 +575,8 @@ void icc_node_destroy(int id) mutex_lock(&icc_lock); - node = node_find(id); + node = xa_erase(&icc_nodes, id); if (node) { - idr_remove(&icc_idr, node->id); WARN_ON(!hlist_empty(&node->req_list)); } -- 2.49.0