OSDN Git Service

devres: Use list_for_each_safe_from() in remove_nodes()
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Mon, 17 May 2021 12:29:44 +0000 (15:29 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 15 Jun 2021 15:14:36 +0000 (17:14 +0200)
The remove_nodes() open codes the list_for_each_safe_from().
Replace it by a generic macro.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20210517122946.53161-2-andriy.shevchenko@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/base/devres.c

index 7970217..db1f313 100644 (file)
@@ -438,20 +438,16 @@ static int remove_nodes(struct device *dev,
                        struct list_head *first, struct list_head *end,
                        struct list_head *todo)
 {
+       struct devres_node *node, *n;
        int cnt = 0, nr_groups = 0;
-       struct list_head *cur;
 
        /* First pass - move normal devres entries to @todo and clear
         * devres_group colors.
         */
-       cur = first;
-       while (cur != end) {
-               struct devres_node *node;
+       node = list_entry(first, struct devres_node, entry);
+       list_for_each_entry_safe_from(node, n, end, entry) {
                struct devres_group *grp;
 
-               node = list_entry(cur, struct devres_node, entry);
-               cur = cur->next;
-
                grp = node_to_group(node);
                if (grp) {
                        /* clear color of group markers in the first pass */
@@ -471,18 +467,14 @@ static int remove_nodes(struct device *dev,
 
        /* Second pass - Scan groups and color them.  A group gets
         * color value of two iff the group is wholly contained in
-        * [cur, end).  That is, for a closed group, both opening and
-        * closing markers should be in the range, while just the
+        * [current node, end). That is, for a closed group, both opening
+        * and closing markers should be in the range, while just the
         * opening marker is enough for an open group.
         */
-       cur = first;
-       while (cur != end) {
-               struct devres_node *node;
+       node = list_entry(first, struct devres_node, entry);
+       list_for_each_entry_safe_from(node, n, end, entry) {
                struct devres_group *grp;
 
-               node = list_entry(cur, struct devres_node, entry);
-               cur = cur->next;
-
                grp = node_to_group(node);
                BUG_ON(!grp || list_empty(&grp->node[0].entry));
 
@@ -492,7 +484,7 @@ static int remove_nodes(struct device *dev,
 
                BUG_ON(grp->color <= 0 || grp->color > 2);
                if (grp->color == 2) {
-                       /* No need to update cur or end.  The removed
+                       /* No need to update current node or end. The removed
                         * nodes are always before both.
                         */
                        list_move_tail(&grp->node[0].entry, todo);