lkml.org 
[lkml]   [2019]   [Aug]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH -rcu dev 1/3] rcu/tree: tick_dep_set/clear_cpu should accept bits instead of masks
    On Mon, Aug 19, 2019 at 02:38:38PM +0200, Frederic Weisbecker wrote:
    > On Thu, Aug 15, 2019 at 10:53:09PM -0400, Joel Fernandes (Google) wrote:
    > > This commit fixes the issue.
    > >
    > > Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
    > > ---
    > > kernel/rcu/tree.c | 29 +++++++++++++++++------------
    > > 1 file changed, 17 insertions(+), 12 deletions(-)
    > >
    > > diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
    > > index 0512de9ead20..322b1b57967c 100644
    > > --- a/kernel/rcu/tree.c
    > > +++ b/kernel/rcu/tree.c
    > > @@ -829,7 +829,7 @@ static __always_inline void rcu_nmi_enter_common(bool irq)
    > > !rdp->dynticks_nmi_nesting &&
    > > rdp->rcu_urgent_qs && !rdp->rcu_forced_tick) {
    > > rdp->rcu_forced_tick = true;
    > > - tick_dep_set_cpu(rdp->cpu, TICK_DEP_MASK_RCU);
    > > + tick_dep_set_cpu(rdp->cpu, TICK_DEP_BIT_RCU);
    >
    > Did I suggest you to use the _MASK_ value? That was a bit mean.
    > Sorry for all that lost debugging time :-(

    At some point, I should have looked at the other calls to these
    functions. :-/

    But would the following patch make sense? This would not help for (say)
    use of TICK_MASK_BIT_POSIX_TIMER instead of TICK_DEP_BIT_POSIX_TIMER, but
    would help for any new values that might be added later on. And currently
    for TICK_DEP_MASK_CLOCK_UNSTABLE and TICK_DEP_MASK_RCU.

    Thanx, Paul

    ------------------------------------------------------------------------

    diff --git a/include/linux/tick.h b/include/linux/tick.h
    index 39eb44564058..4ed788ce5762 100644
    --- a/include/linux/tick.h
    +++ b/include/linux/tick.h
    @@ -111,6 +111,7 @@ enum tick_dep_bits {
    TICK_DEP_BIT_CLOCK_UNSTABLE = 3,
    TICK_DEP_BIT_RCU = 4
    };
    +#define TICK_DEP_BIT_MAX TICK_DEP_BIT_RCU

    #define TICK_DEP_MASK_NONE 0
    #define TICK_DEP_MASK_POSIX_TIMER (1 << TICK_DEP_BIT_POSIX_TIMER)
    @@ -215,24 +216,28 @@ extern void tick_nohz_dep_clear_signal(struct signal_struct *signal,
    */
    static inline void tick_dep_set(enum tick_dep_bits bit)
    {
    + WARN_ON_ONCE(bit > TICK_DEP_BIT_MAX);
    if (tick_nohz_full_enabled())
    tick_nohz_dep_set(bit);
    }

    static inline void tick_dep_clear(enum tick_dep_bits bit)
    {
    + WARN_ON_ONCE(bit > TICK_DEP_BIT_MAX);
    if (tick_nohz_full_enabled())
    tick_nohz_dep_clear(bit);
    }

    static inline void tick_dep_set_cpu(int cpu, enum tick_dep_bits bit)
    {
    + WARN_ON_ONCE(bit > TICK_DEP_BIT_MAX);
    if (tick_nohz_full_cpu(cpu))
    tick_nohz_dep_set_cpu(cpu, bit);
    }

    static inline void tick_dep_clear_cpu(int cpu, enum tick_dep_bits bit)
    {
    + WARN_ON_ONCE(bit > TICK_DEP_BIT_MAX);
    if (tick_nohz_full_cpu(cpu))
    tick_nohz_dep_clear_cpu(cpu, bit);
    }
    @@ -240,24 +245,28 @@ static inline void tick_dep_clear_cpu(int cpu, enum tick_dep_bits bit)
    static inline void tick_dep_set_task(struct task_struct *tsk,
    enum tick_dep_bits bit)
    {
    + WARN_ON_ONCE(bit > TICK_DEP_BIT_MAX);
    if (tick_nohz_full_enabled())
    tick_nohz_dep_set_task(tsk, bit);
    }
    static inline void tick_dep_clear_task(struct task_struct *tsk,
    enum tick_dep_bits bit)
    {
    + WARN_ON_ONCE(bit > TICK_DEP_BIT_MAX);
    if (tick_nohz_full_enabled())
    tick_nohz_dep_clear_task(tsk, bit);
    }
    static inline void tick_dep_set_signal(struct signal_struct *signal,
    enum tick_dep_bits bit)
    {
    + WARN_ON_ONCE(bit > TICK_DEP_BIT_MAX);
    if (tick_nohz_full_enabled())
    tick_nohz_dep_set_signal(signal, bit);
    }
    static inline void tick_dep_clear_signal(struct signal_struct *signal,
    enum tick_dep_bits bit)
    {
    + WARN_ON_ONCE(bit > TICK_DEP_BIT_MAX);
    if (tick_nohz_full_enabled())
    tick_nohz_dep_clear_signal(signal, bit);
    }
    \
     
     \ /
      Last update: 2019-08-19 16:47    [W:4.063 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site