[PATCH] of: fix incorrect return value of of_find_matching_node_and_match()

Thomas Abraham thomas.abraham at linaro.org
Sat Jan 19 13:27:01 EST 2013


On 19 January 2013 10:20, Thomas Abraham <thomas.abraham at linaro.org> wrote:
> The of_find_matching_node_and_match() function incorrectly sets the matched
> entry to 'matches' when the compatible value of a node matches one of the
> possible values. This results in incorrectly selecting the the first entry in
> the 'matches' list as the matched entry. Fix this by noting down the result of
> the call to of_match_node() and setting that as the matched entry.
>
> Signed-off-by: Thomas Abraham <thomas.abraham at linaro.org>
> ---
>  drivers/of/base.c |    6 ++++--
>  1 files changed, 4 insertions(+), 2 deletions(-)

[Adding devicetree-discuss at lists.ozlabs.org to the cc list]

>
> diff --git a/drivers/of/base.c b/drivers/of/base.c
> index 2390ddb..960ae5b 100644
> --- a/drivers/of/base.c
> +++ b/drivers/of/base.c
> @@ -612,6 +612,7 @@ struct device_node *of_find_matching_node_and_match(struct device_node *from,
>                                         const struct of_device_id **match)
>  {
>         struct device_node *np;
> +       const struct of_device_id *m;
>
>         if (match)
>                 *match = NULL;
> @@ -619,9 +620,10 @@ struct device_node *of_find_matching_node_and_match(struct device_node *from,
>         read_lock(&devtree_lock);
>         np = from ? from->allnext : of_allnodes;
>         for (; np; np = np->allnext) {
> -               if (of_match_node(matches, np) && of_node_get(np)) {
> +               m = of_match_node(matches, np);
> +               if (m && of_node_get(np)) {
>                         if (match)
> -                               *match = matches;
> +                               *match = m;
>                         break;
>                 }
>         }
> --
> 1.7.5.4
>



More information about the linux-arm-kernel mailing list