]> www.infradead.org Git - users/willy/xarray.git/commitdiff
pinctrl: Convert pin_group_tree to XArray
authorMatthew Wilcox <willy@infradead.org>
Thu, 25 Oct 2018 20:36:55 +0000 (16:36 -0400)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Fri, 9 Aug 2019 01:38:12 +0000 (21:38 -0400)
Straightforward conversion; no locking changes.

Signed-off-by: Matthew Wilcox <willy@infradead.org>
drivers/pinctrl/core.c
drivers/pinctrl/core.h
drivers/pinctrl/freescale/pinctrl-imx.c
drivers/pinctrl/zte/pinctrl-zx.c

index b70df27874d1ddedfb2f16dd43d2721c8a65d772..79a3e40b66f94feef463c47fc8743684776f8901 100644 (file)
@@ -535,8 +535,7 @@ const char *pinctrl_generic_get_group_name(struct pinctrl_dev *pctldev,
 {
        struct group_desc *group;
 
-       group = radix_tree_lookup(&pctldev->pin_group_tree,
-                                 selector);
+       group = xa_load(&pctldev->pin_group_xa, selector);
        if (!group)
                return NULL;
 
@@ -558,8 +557,7 @@ int pinctrl_generic_get_group_pins(struct pinctrl_dev *pctldev,
 {
        struct group_desc *group;
 
-       group = radix_tree_lookup(&pctldev->pin_group_tree,
-                                 selector);
+       group = xa_load(&pctldev->pin_group_xa, selector);
        if (!group) {
                dev_err(pctldev->dev, "%s could not find pingroup%i\n",
                        __func__, selector);
@@ -583,8 +581,7 @@ struct group_desc *pinctrl_generic_get_group(struct pinctrl_dev *pctldev,
 {
        struct group_desc *group;
 
-       group = radix_tree_lookup(&pctldev->pin_group_tree,
-                                 selector);
+       group = xa_load(&pctldev->pin_group_xa, selector);
        if (!group)
                return NULL;
 
@@ -646,7 +643,7 @@ int pinctrl_generic_add_group(struct pinctrl_dev *pctldev, const char *name,
        group->num_pins = num_pins;
        group->data = data;
 
-       radix_tree_insert(&pctldev->pin_group_tree, selector, group);
+       xa_store(&pctldev->pin_group_xa, selector, group, GFP_KERNEL);
 
        pctldev->num_groups++;
 
@@ -666,12 +663,10 @@ int pinctrl_generic_remove_group(struct pinctrl_dev *pctldev,
 {
        struct group_desc *group;
 
-       group = radix_tree_lookup(&pctldev->pin_group_tree,
-                                 selector);
+       group = xa_erase(&pctldev->pin_group_xa, selector);
        if (!group)
                return -ENOENT;
 
-       radix_tree_delete(&pctldev->pin_group_tree, selector);
        devm_kfree(pctldev->dev, group);
 
        pctldev->num_groups--;
@@ -689,12 +684,7 @@ EXPORT_SYMBOL_GPL(pinctrl_generic_remove_group);
  */
 static void pinctrl_generic_free_groups(struct pinctrl_dev *pctldev)
 {
-       struct radix_tree_iter iter;
-       void __rcu **slot;
-
-       radix_tree_for_each_slot(slot, &pctldev->pin_group_tree, &iter, 0)
-               radix_tree_delete(&pctldev->pin_group_tree, iter.index);
-
+       xa_destroy(&pctldev->pin_group_xa);
        pctldev->num_groups = 0;
 }
 
@@ -1932,7 +1922,7 @@ pinctrl_init_controller(struct pinctrl_desc *pctldesc, struct device *dev,
        pctldev->driver_data = driver_data;
        INIT_RADIX_TREE(&pctldev->pin_desc_tree, GFP_KERNEL);
 #ifdef CONFIG_GENERIC_PINCTRL_GROUPS
-       INIT_RADIX_TREE(&pctldev->pin_group_tree, GFP_KERNEL);
+       xa_init(&pctldev->pin_group_xa);
 #endif
 #ifdef CONFIG_GENERIC_PINMUX_FUNCTIONS
        INIT_RADIX_TREE(&pctldev->pin_function_tree, GFP_KERNEL);
index 7f34167a0405f6f79b913ef9bcfaff98c2383f5a..09cbfaa230e62548b65c4e7f3bf2d62ff2f7acc2 100644 (file)
@@ -23,7 +23,7 @@ struct pinctrl_gpio_range;
  *     controller
  * @pin_desc_tree: each pin descriptor for this pin controller is stored in
  *     this radix tree
- * @pin_group_tree: optionally each pin group can be stored in this radix tree
+ * @pin_group_xa: optionally each pin group can be stored in this array
  * @num_groups: optionally number of groups can be kept here
  * @pin_function_tree: optionally each function can be stored in this radix tree
  * @num_functions: optionally number of functions can be kept here
@@ -44,7 +44,7 @@ struct pinctrl_dev {
        struct pinctrl_desc *desc;
        struct radix_tree_root pin_desc_tree;
 #ifdef CONFIG_GENERIC_PINCTRL_GROUPS
-       struct radix_tree_root pin_group_tree;
+       struct xarray pin_group_xa;
        unsigned int num_groups;
 #endif
 #ifdef CONFIG_GENERIC_PINMUX_FUNCTIONS
index 83ff9532bae640fcf61ec264f39588a695ddabd0..82bf6554177ec2bf7f6649d98e9698d148b12596 100644 (file)
@@ -676,8 +676,8 @@ static int imx_pinctrl_parse_functions(struct device_node *np,
                        return -ENOMEM;
 
                mutex_lock(&ipctl->mutex);
-               radix_tree_insert(&pctl->pin_group_tree,
-                                 ipctl->group_index++, grp);
+               xa_store(&pctl->pin_group_xa, ipctl->group_index++, grp,
+                               GFP_KERNEL);
                mutex_unlock(&ipctl->mutex);
 
                imx_pinctrl_parse_groups(child, grp, ipctl, i++);
index 9512045420ec44cf1dcd3ca9865a3d4bea7aef13..4baf2aae5a7cf6f555fa7b41ff9c50273e6bd54d 100644 (file)
@@ -286,7 +286,7 @@ static int zx_pinctrl_build_state(struct platform_device *pdev)
                group->name = pindesc->name;
                group->pins = (int *) &pindesc->number;
                group->num_pins = 1;
-               radix_tree_insert(&pctldev->pin_group_tree, i, group);
+               xa_store(&pctldev->pin_group_xa, i, group, GFP_KERNEL);
        }
 
        pctldev->num_groups = ngroups;