From: Matthew Wilcox Date: Thu, 25 Oct 2018 20:50:34 +0000 (-0400) Subject: pinctrl: Convert pin_desc_tree to XArray X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=e8c24a2461c6c1e24f270ef0f468d45d46adcdc9;p=users%2Fwilly%2Fxarray.git pinctrl: Convert pin_desc_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 a110eaa699a4..3f0cd4520a03 100644 --- a/drivers/pinctrl/core.c +++ b/drivers/pinctrl/core.c @@ -187,14 +187,9 @@ static void pinctrl_free_pindescs(struct pinctrl_dev *pctldev, for (i = 0; i < num_pins; i++) { struct pin_desc *pindesc; - pindesc = radix_tree_lookup(&pctldev->pin_desc_tree, - pins[i].number); - if (pindesc) { - radix_tree_delete(&pctldev->pin_desc_tree, - pins[i].number); - if (pindesc->dynamic_name) - kfree(pindesc->name); - } + pindesc = xa_erase(&pctldev->pin_desc_xa, pins[i].number); + if (pindesc && pindesc->dynamic_name) + kfree(pindesc->name); kfree(pindesc); } } @@ -232,7 +227,7 @@ static int pinctrl_register_one_pin(struct pinctrl_dev *pctldev, pindesc->drv_data = pin->drv_data; - radix_tree_insert(&pctldev->pin_desc_tree, pin->number, pindesc); + xa_store(&pctldev->pin_desc_xa, pin->number, pindesc, GFP_KERNEL); pr_debug("registered pin %d (%s) on %s\n", pin->number, pindesc->name, pctldev->desc->name); return 0; @@ -1920,7 +1915,7 @@ pinctrl_init_controller(struct pinctrl_desc *pctldesc, struct device *dev, pctldev->owner = pctldesc->owner; pctldev->desc = pctldesc; pctldev->driver_data = driver_data; - INIT_RADIX_TREE(&pctldev->pin_desc_tree, GFP_KERNEL); + xa_init(&pctldev->pin_desc_xa); #ifdef CONFIG_GENERIC_PINCTRL_GROUPS xa_init(&pctldev->pin_group_xa); #endif diff --git a/drivers/pinctrl/core.h b/drivers/pinctrl/core.h index 35b6f12fee75..019c21aea1fa 100644 --- a/drivers/pinctrl/core.h +++ b/drivers/pinctrl/core.h @@ -21,8 +21,8 @@ struct pinctrl_gpio_range; * @node: node to include this pin controller in the global pin controller list * @desc: the pin controller descriptor supplied when initializing this pin * controller - * @pin_desc_tree: each pin descriptor for this pin controller is stored in - * this radix tree + * @pin_desc_xa: each pin descriptor for this pin controller is stored in + * this array * @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_xa: optionally each function can be stored in this array @@ -42,7 +42,7 @@ struct pinctrl_gpio_range; struct pinctrl_dev { struct list_head node; struct pinctrl_desc *desc; - struct radix_tree_root pin_desc_tree; + struct xarray pin_desc_xa; #ifdef CONFIG_GENERIC_PINCTRL_GROUPS struct xarray pin_group_xa; unsigned int num_groups; @@ -229,7 +229,7 @@ int pinctrl_get_group_selector(struct pinctrl_dev *pctldev, static inline struct pin_desc *pin_desc_get(struct pinctrl_dev *pctldev, unsigned int pin) { - return radix_tree_lookup(&pctldev->pin_desc_tree, pin); + return xa_load(&pctldev->pin_desc_xa, pin); } extern struct pinctrl_gpio_range *