From: Matthew Wilcox Date: Thu, 25 Oct 2018 20:36:55 +0000 (-0400) Subject: pinctrl: Convert pin_group_tree to XArray X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=55e469b189877ba4830c095b7bbebcffcf64a045;p=users%2Fwilly%2Fxarray.git pinctrl: Convert pin_group_tree to XArray Straightforward conversion; no locking changes. Signed-off-by: Matthew Wilcox --- diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c index b70df27874d1..79a3e40b66f9 100644 --- a/drivers/pinctrl/core.c +++ b/drivers/pinctrl/core.c @@ -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); diff --git a/drivers/pinctrl/core.h b/drivers/pinctrl/core.h index 7f34167a0405..09cbfaa230e6 100644 --- a/drivers/pinctrl/core.h +++ b/drivers/pinctrl/core.h @@ -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 diff --git a/drivers/pinctrl/freescale/pinctrl-imx.c b/drivers/pinctrl/freescale/pinctrl-imx.c index 83ff9532bae6..82bf6554177e 100644 --- a/drivers/pinctrl/freescale/pinctrl-imx.c +++ b/drivers/pinctrl/freescale/pinctrl-imx.c @@ -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++); diff --git a/drivers/pinctrl/zte/pinctrl-zx.c b/drivers/pinctrl/zte/pinctrl-zx.c index 9512045420ec..4baf2aae5a7c 100644 --- a/drivers/pinctrl/zte/pinctrl-zx.c +++ b/drivers/pinctrl/zte/pinctrl-zx.c @@ -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;