lkml.org 
[lkml]   [2019]   [Jul]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] rculist: Add build check for single optional list argument
    Date
    In a previous patch series [1], we added an optional lockdep expression
    argument to list_for_each_entry_rcu() and the hlist equivalent. This
    also meant more than one optional argument can be passed to them with
    that error going unnoticed. To fix this, let us force a compiler error
    more than one optional argument is passed.

    [1] https://lore.kernel.org/patchwork/project/lkml/list/?series=402150

    Suggested-by: Paul McKenney <paulmck@linux.vnet.ibm.com>
    Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
    ---
    include/linux/rculist.h | 8 ++++++--
    1 file changed, 6 insertions(+), 2 deletions(-)

    diff --git a/include/linux/rculist.h b/include/linux/rculist.h
    index 1048160625bb..86659f6d72dc 100644
    --- a/include/linux/rculist.h
    +++ b/include/linux/rculist.h
    @@ -44,14 +44,18 @@ static inline void INIT_LIST_HEAD_RCU(struct list_head *list)
    * Check during list traversal that we are within an RCU reader
    */

    +#define check_arg_count_one(dummy)
    +
    #ifdef CONFIG_PROVE_RCU_LIST
    -#define __list_check_rcu(dummy, cond, ...) \
    +#define __list_check_rcu(dummy, cond, extra...) \
    ({ \
    + check_arg_count_one(extra); \
    RCU_LOCKDEP_WARN(!cond && !rcu_read_lock_any_held(), \
    "RCU-list traversed in non-reader section!"); \
    })
    #else
    -#define __list_check_rcu(dummy, cond, ...) ({})
    +#define __list_check_rcu(dummy, cond, extra...) \
    + ({ check_arg_count_one(extra); })
    #endif

    /*
    --
    2.22.0.510.g264f2c817a-goog
    \
     
     \ /
      Last update: 2019-07-16 06:09    [W:2.414 / U:0.260 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site