lkml.org 
[lkml]   [2017]   [May]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH tip/core/rcu 40/88] srcu: Shrink Tiny SRCU a bit
    Date
    In Tiny SRCU, __srcu_read_lock() is a trivial function, outweighed by
    its EXPORT_SYMBOL_GPL(), and on many architectures, its call sequence.
    This commit therefore moves it to srcutiny.h so that it can be inlined.

    Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    ---
    include/linux/srcutiny.h | 14 ++++++++++++++
    kernel/rcu/srcutiny.c | 15 ---------------
    2 files changed, 14 insertions(+), 15 deletions(-)

    diff --git a/include/linux/srcutiny.h b/include/linux/srcutiny.h
    index b8859179b001..013b1b30a354 100644
    --- a/include/linux/srcutiny.h
    +++ b/include/linux/srcutiny.h
    @@ -63,6 +63,20 @@ void srcu_drive_gp(struct work_struct *wp);

    void synchronize_srcu(struct srcu_struct *sp);

    +/*
    + * Counts the new reader in the appropriate per-CPU element of the
    + * srcu_struct. Must be called from process context.
    + * Returns an index that must be passed to the matching srcu_read_unlock().
    + */
    +static inline int __srcu_read_lock(struct srcu_struct *sp)
    +{
    + int idx;
    +
    + idx = READ_ONCE(sp->srcu_idx);
    + WRITE_ONCE(sp->srcu_lock_nesting[idx], sp->srcu_lock_nesting[idx] + 1);
    + return idx;
    +}
    +
    static inline void synchronize_srcu_expedited(struct srcu_struct *sp)
    {
    synchronize_srcu(sp);
    diff --git a/kernel/rcu/srcutiny.c b/kernel/rcu/srcutiny.c
    index 36e1f82faed1..fe0b16db2aae 100644
    --- a/kernel/rcu/srcutiny.c
    +++ b/kernel/rcu/srcutiny.c
    @@ -96,21 +96,6 @@ void cleanup_srcu_struct(struct srcu_struct *sp)
    EXPORT_SYMBOL_GPL(cleanup_srcu_struct);

    /*
    - * Counts the new reader in the appropriate per-CPU element of the
    - * srcu_struct. Must be called from process context.
    - * Returns an index that must be passed to the matching srcu_read_unlock().
    - */
    -int __srcu_read_lock(struct srcu_struct *sp)
    -{
    - int idx;
    -
    - idx = READ_ONCE(sp->srcu_idx);
    - WRITE_ONCE(sp->srcu_lock_nesting[idx], sp->srcu_lock_nesting[idx] + 1);
    - return idx;
    -}
    -EXPORT_SYMBOL_GPL(__srcu_read_lock);
    -
    -/*
    * Removes the count for the old reader from the appropriate element of
    * the srcu_struct. Must be called from process context.
    */
    --
    2.5.2
    \
     
     \ /
      Last update: 2017-05-26 00:24    [W:4.739 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site