Messages in this thread | | | Date | Mon, 18 Mar 2024 21:41:32 -0700 | From | Boqun Feng <> | Subject | Re: [PATCH] locking/qspinlock: Always evaluate lockevent* non-event parameter once |
| |
On Mon, Mar 18, 2024 at 08:50:04PM -0400, Waiman Long wrote: > The inc parameter of lockevent_add() and the cond parameter of > lockevent_cond_inc() are only evaluated when CONFIG_LOCK_EVENT_COUNTS > is on. That can cause problem if those parameters are expressions > with side effect like a "++". Fix this by evaluating those non-event > parameters once even if CONFIG_LOCK_EVENT_COUNTS is off. This will also > eliminate the need of the __maybe_unused attribute to the wait_early > local variable in pv_wait_node(). > > Suggested-by: Ingo Molnar <mingo@kernel.org> > Signed-off-by: Waiman Long <longman@redhat.com>
Reviewed-by: Boqun Feng <boqun.feng@gmail.com>
Regards, Boqun
> --- > kernel/locking/lock_events.h | 4 ++-- > kernel/locking/qspinlock_paravirt.h | 2 +- > 2 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/kernel/locking/lock_events.h b/kernel/locking/lock_events.h > index a6016b91803d..d2345e9c0190 100644 > --- a/kernel/locking/lock_events.h > +++ b/kernel/locking/lock_events.h > @@ -53,8 +53,8 @@ static inline void __lockevent_add(enum lock_events event, int inc) > #else /* CONFIG_LOCK_EVENT_COUNTS */ > > #define lockevent_inc(ev) > -#define lockevent_add(ev, c) > -#define lockevent_cond_inc(ev, c) > +#define lockevent_add(ev, c) do { (void)(c); } while (0) > +#define lockevent_cond_inc(ev, c) do { (void)(c); } while (0) > > #endif /* CONFIG_LOCK_EVENT_COUNTS */ > > diff --git a/kernel/locking/qspinlock_paravirt.h b/kernel/locking/qspinlock_paravirt.h > index ae2b12f68b90..169950fe1aad 100644 > --- a/kernel/locking/qspinlock_paravirt.h > +++ b/kernel/locking/qspinlock_paravirt.h > @@ -294,7 +294,7 @@ static void pv_wait_node(struct mcs_spinlock *node, struct mcs_spinlock *prev) > { > struct pv_node *pn = (struct pv_node *)node; > struct pv_node *pp = (struct pv_node *)prev; > - bool __maybe_unused wait_early; > + bool wait_early; > int loop; > > for (;;) { > -- > 2.39.3 >
| |