net: mscc: ocelot: use list_for_each_entry in ocelot_vcap_filter_add_to_block
authorVladimir Oltean <vladimir.oltean@nxp.com>
Tue, 3 May 2022 12:01:48 +0000 (15:01 +0300)
committerJakub Kicinski <kuba@kernel.org>
Thu, 5 May 2022 03:42:15 +0000 (20:42 -0700)
Unify the code paths for adding to an empty list and to a list with
elements by keeping a "pos" list_head element that indicates where to
insert. Initialize "pos" with the list head itself in case
list_for_each_entry() doesn't iterate over any element.

Note that list_for_each_safe() isn't needed because no element is
removed from the list while iterating.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mscc/ocelot_vcap.c

index 4d8ce4b..627165a 100644 (file)
@@ -993,8 +993,8 @@ static int ocelot_vcap_filter_add_to_block(struct ocelot *ocelot,
                                           struct ocelot_vcap_filter *filter,
                                           struct netlink_ext_ack *extack)
 {
+       struct list_head *pos = &block->rules;
        struct ocelot_vcap_filter *tmp;
-       struct list_head *pos, *n;
        int ret;
 
        ret = ocelot_vcap_filter_add_aux_resources(ocelot, filter, extack);
@@ -1003,15 +1003,11 @@ static int ocelot_vcap_filter_add_to_block(struct ocelot *ocelot,
 
        block->count++;
 
-       if (list_empty(&block->rules)) {
-               list_add_tail(&filter->list, &block->rules);
-               return 0;
-       }
-
-       list_for_each_safe(pos, n, &block->rules) {
-               tmp = list_entry(pos, struct ocelot_vcap_filter, list);
-               if (filter->prio < tmp->prio)
+       list_for_each_entry(tmp, &block->rules, list) {
+               if (filter->prio < tmp->prio) {
+                       pos = &tmp->list;
                        break;
+               }
        }
        list_add_tail(&filter->list, pos);