From: Matthew Wilcox Date: Thu, 25 Oct 2018 20:42:48 +0000 (-0400) Subject: pinctrl: Convert pin_function_tree to XArray X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=c57cae41e6700f4edbb0d4256ffc63b330871a6c;p=users%2Fwilly%2Fxarray.git pinctrl: Convert pin_function_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 79a3e40b66f9..a110eaa699a4 100644 --- a/drivers/pinctrl/core.c +++ b/drivers/pinctrl/core.c @@ -1925,7 +1925,7 @@ pinctrl_init_controller(struct pinctrl_desc *pctldesc, struct device *dev, xa_init(&pctldev->pin_group_xa); #endif #ifdef CONFIG_GENERIC_PINMUX_FUNCTIONS - INIT_RADIX_TREE(&pctldev->pin_function_tree, GFP_KERNEL); + xa_init(&pctldev->pin_function_xa); #endif INIT_LIST_HEAD(&pctldev->gpio_ranges); INIT_LIST_HEAD(&pctldev->node); diff --git a/drivers/pinctrl/core.h b/drivers/pinctrl/core.h index 09cbfaa230e6..35b6f12fee75 100644 --- a/drivers/pinctrl/core.h +++ b/drivers/pinctrl/core.h @@ -25,7 +25,7 @@ struct pinctrl_gpio_range; * 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 + * @pin_function_xa: optionally each function can be stored in this array * @num_functions: optionally number of functions can be kept here * @gpio_ranges: a list of GPIO ranges that is handled by this pin controller, * ranges are added to this list at runtime @@ -48,7 +48,7 @@ struct pinctrl_dev { unsigned int num_groups; #endif #ifdef CONFIG_GENERIC_PINMUX_FUNCTIONS - struct radix_tree_root pin_function_tree; + struct xarray pin_function_xa; unsigned int num_functions; #endif struct list_head gpio_ranges; diff --git a/drivers/pinctrl/freescale/pinctrl-imx.c b/drivers/pinctrl/freescale/pinctrl-imx.c index 82bf6554177e..53d69695b96e 100644 --- a/drivers/pinctrl/freescale/pinctrl-imx.c +++ b/drivers/pinctrl/freescale/pinctrl-imx.c @@ -742,7 +742,7 @@ static int imx_pinctrl_probe_dt(struct platform_device *pdev, return -ENOMEM; mutex_lock(&ipctl->mutex); - radix_tree_insert(&pctl->pin_function_tree, i, function); + xa_store(&pctl->pin_function_xa, i, function, GFP_KERNEL); mutex_unlock(&ipctl->mutex); } pctl->num_functions = nfuncs; diff --git a/drivers/pinctrl/pinmux.c b/drivers/pinctrl/pinmux.c index 020e54f843f9..2aad7df8a115 100644 --- a/drivers/pinctrl/pinmux.c +++ b/drivers/pinctrl/pinmux.c @@ -680,8 +680,7 @@ pinmux_generic_get_function_name(struct pinctrl_dev *pctldev, { struct function_desc *function; - function = radix_tree_lookup(&pctldev->pin_function_tree, - selector); + function = xa_load(&pctldev->pin_function_xa, selector); if (!function) return NULL; @@ -703,8 +702,7 @@ int pinmux_generic_get_function_groups(struct pinctrl_dev *pctldev, { struct function_desc *function; - function = radix_tree_lookup(&pctldev->pin_function_tree, - selector); + function = xa_load(&pctldev->pin_function_xa, selector); if (!function) { dev_err(pctldev->dev, "%s could not find function%i\n", __func__, selector); @@ -727,8 +725,7 @@ struct function_desc *pinmux_generic_get_function(struct pinctrl_dev *pctldev, { struct function_desc *function; - function = radix_tree_lookup(&pctldev->pin_function_tree, - selector); + function = xa_load(&pctldev->pin_function_xa, selector); if (!function) return NULL; @@ -771,7 +768,7 @@ int pinmux_generic_add_function(struct pinctrl_dev *pctldev, function->num_group_names = num_groups; function->data = data; - radix_tree_insert(&pctldev->pin_function_tree, selector, function); + xa_store(&pctldev->pin_function_xa, selector, function, GFP_KERNEL); pctldev->num_functions++; @@ -791,12 +788,10 @@ int pinmux_generic_remove_function(struct pinctrl_dev *pctldev, { struct function_desc *function; - function = radix_tree_lookup(&pctldev->pin_function_tree, - selector); + function = xa_erase(&pctldev->pin_function_xa, selector); if (!function) return -ENOENT; - radix_tree_delete(&pctldev->pin_function_tree, selector); devm_kfree(pctldev->dev, function); pctldev->num_functions--; @@ -815,12 +810,7 @@ EXPORT_SYMBOL_GPL(pinmux_generic_remove_function); */ void pinmux_generic_free_functions(struct pinctrl_dev *pctldev) { - struct radix_tree_iter iter; - void __rcu **slot; - - radix_tree_for_each_slot(slot, &pctldev->pin_function_tree, &iter, 0) - radix_tree_delete(&pctldev->pin_function_tree, iter.index); - + xa_destroy(&pctldev->pin_function_xa); pctldev->num_functions = 0; } diff --git a/drivers/pinctrl/zte/pinctrl-zx.c b/drivers/pinctrl/zte/pinctrl-zx.c index 4baf2aae5a7c..24868a2eac0b 100644 --- a/drivers/pinctrl/zte/pinctrl-zx.c +++ b/drivers/pinctrl/zte/pinctrl-zx.c @@ -325,8 +325,8 @@ static int zx_pinctrl_build_state(struct platform_device *pdev) /* New function */ func->name = mux->name; func->num_group_names = 1; - radix_tree_insert(&pctldev->pin_function_tree, - nfunctions++, func); + xa_store(&pctldev->pin_function_xa, + nfunctions++, func, GFP_KERNEL); } mux++;