]> www.infradead.org Git - users/willy/xarray.git/commitdiff
i3c: Convert i3c_bus_idr to IDA
authorMatthew Wilcox <willy@infradead.org>
Mon, 18 Feb 2019 18:41:32 +0000 (13:41 -0500)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Fri, 9 Aug 2019 01:38:17 +0000 (21:38 -0400)
Signed-off-by: Matthew Wilcox <willy@infradead.org>
drivers/i3c/master.c

index d6f8b038a89678fcd40bce106e020c902aa4cbd3..745e55ea5882c9e6233728033745df06378e347d 100644 (file)
@@ -10,6 +10,7 @@
 #include <linux/device.h>
 #include <linux/err.h>
 #include <linux/export.h>
+#include <linux/idr.h>
 #include <linux/kernel.h>
 #include <linux/list.h>
 #include <linux/of.h>
@@ -19,8 +20,7 @@
 
 #include "internals.h"
 
-static DEFINE_IDR(i3c_bus_idr);
-static DEFINE_MUTEX(i3c_core_lock);
+static DEFINE_IDA(i3c_bus_ids);
 
 /**
  * i3c_bus_maintenance_lock - Lock the bus for a maintenance operation
@@ -440,9 +440,7 @@ static void i3c_bus_init_addrslots(struct i3c_bus *bus)
 
 static void i3c_bus_cleanup(struct i3c_bus *i3cbus)
 {
-       mutex_lock(&i3c_core_lock);
-       idr_remove(&i3c_bus_idr, i3cbus->id);
-       mutex_unlock(&i3c_core_lock);
+       ida_free(&i3c_bus_ids, i3cbus->id);
 }
 
 static int i3c_bus_init(struct i3c_bus *i3cbus)
@@ -455,15 +453,11 @@ static int i3c_bus_init(struct i3c_bus *i3cbus)
        i3c_bus_init_addrslots(i3cbus);
        i3cbus->mode = I3C_BUS_MODE_PURE;
 
-       mutex_lock(&i3c_core_lock);
-       ret = idr_alloc(&i3c_bus_idr, i3cbus, 0, 0, GFP_KERNEL);
-       mutex_unlock(&i3c_core_lock);
-
+       ret = ida_alloc(&i3c_bus_ids, GFP_KERNEL);
        if (ret < 0)
                return ret;
 
        i3cbus->id = ret;
-
        return 0;
 }
 
@@ -2685,7 +2679,6 @@ subsys_initcall(i3c_init);
 
 static void __exit i3c_exit(void)
 {
-       idr_destroy(&i3c_bus_idr);
        bus_unregister(&i3c_bus_type);
 }
 module_exit(i3c_exit);