lkml.org 
[lkml]   [2022]   [Aug]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 510/779] RDMA/rtrs-clt: Replace list_next_or_null_rr_rcu with an inline function
    Date
    From: Md Haris Iqbal <haris.iqbal@ionos.com>

    [ 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 | 35 ++++++++++++--------------
    1 file changed, 16 insertions(+), 19 deletions(-)

    diff --git a/drivers/infiniband/ulp/rtrs/rtrs-clt.c b/drivers/infiniband/ulp/rtrs/rtrs-clt.c
    index a46ef2821e36..9edbb309b96c 100644
    --- a/drivers/infiniband/ulp/rtrs/rtrs-clt.c
    +++ b/drivers/infiniband/ulp/rtrs/rtrs-clt.c
    @@ -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();

    /*
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-08-15 21:23    [W:2.515 / U:0.148 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site