RDMA/rtrs-clt: Replace list_next_or_null_rr_rcu with an inline function
authorMd Haris Iqbal <haris.iqbal@ionos.com>
Tue, 12 Jul 2022 10:31:12 +0000 (12:31 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 17 Aug 2022 12:23:55 +0000 (14:23 +0200)
[ Upstream commit c14adff285ad1bb8eefc5d8fc202ceb1f7e3a2f1 ]

removes list_next_or_null_rr_rcu macro to fix below warnings.
That macro is used only twice.
CHECK:MACRO_ARG_REUSE: Macro argument reuse 'head' - possible side-effects?
CHECK:MACRO_ARG_REUSE: Macro argument reuse 'ptr' - possible side-effects?
CHECK:MACRO_ARG_REUSE: Macro argument reuse 'memb' - possible side-effects?

Replaces that macro with an inline function.

Fixes: 6a98d71daea1 ("RDMA/rtrs: client: main functionality")
Cc: jinpu.wang@ionos.com
Link: https://lore.kernel.org/r/20220712103113.617754-5-haris.iqbal@ionos.com
Signed-off-by: Md Haris Iqbal <haris.iqbal@ionos.com>
Suggested-by: Jason Gunthorpe <jgg@ziepe.ca>
Signed-off-by: Jack Wang <jinpu.wang@ionos.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/infiniband/ulp/rtrs/rtrs-clt.c

index a46ef28..9edbb30 100644 (file)
@@ -747,25 +747,25 @@ struct path_it {
        struct rtrs_clt_path *(*next_path)(struct path_it *it);
 };
 
-/**
- * list_next_or_null_rr_rcu - get next list element in round-robin fashion.
+/*
+ * rtrs_clt_get_next_path_or_null - get clt path from the list or return NULL
  * @head:      the head for the list.
- * @ptr:        the list head to take the next element from.
- * @type:       the type of the struct this is embedded in.
- * @memb:       the name of the list_head within the struct.
+ * @clt_path:  The element to take the next clt_path from.
  *
- * Next element returned in round-robin fashion, i.e. head will be skipped,
+ * Next clt path returned in round-robin fashion, i.e. head will be skipped,
  * but if list is observed as empty, NULL will be returned.
  *
- * This primitive may safely run concurrently with the _rcu list-mutation
+ * This function may safely run concurrently with the _rcu list-mutation
  * primitives such as list_add_rcu() as long as it's guarded by rcu_read_lock().
  */
-#define list_next_or_null_rr_rcu(head, ptr, type, memb) \
-({ \
-       list_next_or_null_rcu(head, ptr, type, memb) ?: \
-               list_next_or_null_rcu(head, READ_ONCE((ptr)->next), \
-                                     type, memb); \
-})
+static inline struct rtrs_clt_path *
+rtrs_clt_get_next_path_or_null(struct list_head *head, struct rtrs_clt_path *clt_path)
+{
+       return list_next_or_null_rcu(head, &clt_path->s.entry, typeof(*clt_path), s.entry) ?:
+                                    list_next_or_null_rcu(head,
+                                                          READ_ONCE((&clt_path->s.entry)->next),
+                                                          typeof(*clt_path), s.entry);
+}
 
 /**
  * get_next_path_rr() - Returns path in round-robin fashion.
@@ -796,10 +796,8 @@ static struct rtrs_clt_path *get_next_path_rr(struct path_it *it)
                path = list_first_or_null_rcu(&clt->paths_list,
                                              typeof(*path), s.entry);
        else
-               path = list_next_or_null_rr_rcu(&clt->paths_list,
-                                               &path->s.entry,
-                                               typeof(*path),
-                                               s.entry);
+               path = rtrs_clt_get_next_path_or_null(&clt->paths_list, path);
+
        rcu_assign_pointer(*ppcpu_path, path);
 
        return path;
@@ -2267,8 +2265,7 @@ static void rtrs_clt_remove_path_from_arr(struct rtrs_clt_path *clt_path)
         * removed.  If @sess is the last element, then @next is NULL.
         */
        rcu_read_lock();
-       next = list_next_or_null_rr_rcu(&clt->paths_list, &clt_path->s.entry,
-                                       typeof(*next), s.entry);
+       next = rtrs_clt_get_next_path_or_null(&clt->paths_list, clt_path);
        rcu_read_unlock();
 
        /*