Patch "pinctrl: core: Fix warning by removing bogus code" has been added to the 4.11-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
pinctrl: core: Fix warning by removing bogus code
to the 4.11-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
pinctrl-core-fix-warning-by-removing-bogus-code.patch
and it can be found in the queue-4.11 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
664b7c4728821767e0228ee161bab87db2be58f1Mon Sep 17 00:00:00 2001
From: Tony Lindgren <[email protected]>
Date: Fri, 12 May 2017 08:47:57 -0700
Subject: pinctrl: core: Fix warning by removing bogus code
From: Tony Lindgren <[email protected]>
commit 664b7c4728821767e0228ee161bab87db2be58f1 upstream.
Andre Przywara <[email protected]> noticed that we can get the following warning with -EPROBE_DEFER:
"WARNING: CPU: 1 PID: 89 at drivers/base/dd.c:349driver_probe_device+0x2ac/0x2e8"
Let's fix the issue by removing the indices as suggested by Tejun Heo <[email protected]>. All we have to do here is kill the radix tree.
I probably ended up with the indices after grepping for removal of all entries using radix_tree_for_each_slot() and the first match found was gmap_radix_tree_free(). Anyways, no need for indices here, and we can just do remove all the entries using radix_tree_for_each_slot() along how the item_kill_tree() test case does.
--- drivers/pinctrl/core.c | 20 +++----------------- drivers/pinctrl/pinmux.c | 21 ++++----------------- 2 files changed, 7 insertions(+), 34 deletions(-)
drivers/pinctrl/core.c +3 -17
@@ -680,30 +680,16 @@ EXPORT_SYMBOL_GPL(pinctrl_generic_remove* pinctrl_generic_free_groups() - removes all pin groups * @pctldev: pin controller device * -* Note that the caller must take care of locking. +* Note that the caller must take care of locking. The pinctrl groups +* are allocated with devm_kzalloc() so no need to free them here. */ static void pinctrl_generic_free_groups (struct pinctrl_dev *pctldev) {struct radix_tree_iter iter; -struct group_desc *group; -unsigned long *indices;void **slot; -int i =0 ; - - indices =devm_kzalloc (pctldev->dev,sizeof (*indices) * - pctldev->num_groups,GFP_KERNEL ); -if (!indices) -return ;radix_tree_for_each_slot (slot, &pctldev->pin_group_tree, &iter,0 ) - indices[i++] = iter.index; - -for (i =0 ; i < pctldev->num_groups; i++) { - group =radix_tree_lookup (&pctldev->pin_group_tree, - indices[i]); -radix_tree_delete (&pctldev->pin_group_tree, indices[i]); -devm_kfree (pctldev->dev, group); - } +radix_tree_delete (&pctldev->pin_group_tree, iter.index); pctldev->num_groups =0 ; }
drivers/pinctrl/pinmux.c +4 -17
@@ -826,30 +826,17 @@ EXPORT_SYMBOL_GPL(pinmux_generic_remove_* pinmux_generic_free_functions() - removes all functions * @pctldev: pin controller device * -* Note that the caller must take care of locking. +* Note that the caller must take care of locking. The pinctrl +* functions are allocated with devm_kzalloc() so no need to free +* them here. */ void pinmux_generic_free_functions (struct pinctrl_dev *pctldev) {struct radix_tree_iter iter; -struct function_desc *function; -unsigned long *indices;void **slot; -int i =0 ; - - indices =devm_kzalloc (pctldev->dev,sizeof (*indices) * - pctldev->num_functions,GFP_KERNEL ); -if (!indices) -return ;radix_tree_for_each_slot (slot, &pctldev->pin_function_tree, &iter,0 ) - indices[i++] = iter.index; - -for (i =0 ; i < pctldev->num_functions; i++) { - function =radix_tree_lookup (&pctldev->pin_function_tree, - indices[i]); -radix_tree_delete (&pctldev->pin_function_tree, indices[i]); -devm_kfree (pctldev->dev, function); - } +radix_tree_delete (&pctldev->pin_function_tree, iter.index); pctldev->num_functions =0 ; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.11/pinctrl-core-fix-warning-by-removing-bogus-code.patch