Some cleanups and debug rework.
git://git.kernel.org/pub/scm/linux/kernel/git/frederic/linux-dynticks.git
timers/core
HEAD: 18b00369d58da4c73946d5f8ebed8e8c7ade89e2
Thanks,
Frederic
---
Frederic Weisbecker (3):
tick/rcu: Remove obsolete rcu_needs_cpu() parameters
tick/rcu: Stop allowing RCU_SOFTIRQ in idle
lib/irq_poll: Declare IRQ_POLL softirq vector as ksoftirqd-parking safe
include/linux/interrupt.h | 11 ++++++++-
include/linux/rcutiny.h | 3 +--
include/linux/rcutree.h | 2 +-
kernel/rcu/tree.c | 3 +--
kernel/time/tick-sched.c | 60 ++++++++++++++++++++++++++++++++++-------------
5 files changed, 57 insertions(+), 22 deletions(-)
On Tue, Feb 08, 2022 at 05:16:32PM +0100, Frederic Weisbecker wrote:
> Some cleanups and debug rework.
>
> git://git.kernel.org/pub/scm/linux/kernel/git/frederic/linux-dynticks.git
> timers/core
>
> HEAD: 18b00369d58da4c73946d5f8ebed8e8c7ade89e2
>
> Thanks,
> Frederic
> ---
>
> Frederic Weisbecker (3):
> tick/rcu: Remove obsolete rcu_needs_cpu() parameters
> tick/rcu: Stop allowing RCU_SOFTIRQ in idle
> lib/irq_poll: Declare IRQ_POLL softirq vector as ksoftirqd-parking safe
I have queued these for local testing, but I am guessing that you would
like them to go up some other path.
Thanx, Paul
> include/linux/interrupt.h | 11 ++++++++-
> include/linux/rcutiny.h | 3 +--
> include/linux/rcutree.h | 2 +-
> kernel/rcu/tree.c | 3 +--
> kernel/time/tick-sched.c | 60 ++++++++++++++++++++++++++++++++++-------------
> 5 files changed, 57 insertions(+), 22 deletions(-)
With the removal of CONFIG_RCU_FAST_NO_HZ, the parameters in
rcu_needs_cpu() are not necessary anymore. Simply remove them.
Signed-off-by: Frederic Weisbecker <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Paul E. McKenney <[email protected]>
Cc: Paul Menzel <[email protected]>
---
include/linux/rcutiny.h | 3 +--
include/linux/rcutree.h | 2 +-
kernel/rcu/tree.c | 3 +--
kernel/time/tick-sched.c | 10 ++++------
4 files changed, 7 insertions(+), 11 deletions(-)
diff --git a/include/linux/rcutiny.h b/include/linux/rcutiny.h
index 858f4d429946..5fed476f977f 100644
--- a/include/linux/rcutiny.h
+++ b/include/linux/rcutiny.h
@@ -64,9 +64,8 @@ static inline void rcu_softirq_qs(void)
rcu_tasks_qs(current, (preempt)); \
} while (0)
-static inline int rcu_needs_cpu(u64 basemono, u64 *nextevt)
+static inline int rcu_needs_cpu(void)
{
- *nextevt = KTIME_MAX;
return 0;
}
diff --git a/include/linux/rcutree.h b/include/linux/rcutree.h
index 53209d669400..6cc91291d078 100644
--- a/include/linux/rcutree.h
+++ b/include/linux/rcutree.h
@@ -19,7 +19,7 @@
void rcu_softirq_qs(void);
void rcu_note_context_switch(bool preempt);
-int rcu_needs_cpu(u64 basem, u64 *nextevt);
+int rcu_needs_cpu(void);
void rcu_cpu_stall_reset(void);
/*
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
index a4c25a6283b0..80faf2273ce9 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
@@ -1086,9 +1086,8 @@ void rcu_irq_enter_irqson(void)
* Just check whether or not this CPU has non-offloaded RCU callbacks
* queued.
*/
-int rcu_needs_cpu(u64 basemono, u64 *nextevt)
+int rcu_needs_cpu(void)
{
- *nextevt = KTIME_MAX;
return !rcu_segcblist_empty(&this_cpu_ptr(&rcu_data)->cblist) &&
!rcu_rdp_is_offloaded(this_cpu_ptr(&rcu_data));
}
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
index 17a283ce2b20..2abb5112feb9 100644
--- a/kernel/time/tick-sched.c
+++ b/kernel/time/tick-sched.c
@@ -768,7 +768,7 @@ static inline bool local_timer_softirq_pending(void)
static ktime_t tick_nohz_next_event(struct tick_sched *ts, int cpu)
{
- u64 basemono, next_tick, next_tmr, next_rcu, delta, expires;
+ u64 basemono, next_tick, delta, expires;
unsigned long basejiff;
unsigned int seq;
@@ -791,7 +791,7 @@ static ktime_t tick_nohz_next_event(struct tick_sched *ts, int cpu)
* minimal delta which brings us back to this place
* immediately. Lather, rinse and repeat...
*/
- if (rcu_needs_cpu(basemono, &next_rcu) || arch_needs_cpu() ||
+ if (rcu_needs_cpu() || arch_needs_cpu() ||
irq_work_needs_cpu() || local_timer_softirq_pending()) {
next_tick = basemono + TICK_NSEC;
} else {
@@ -802,10 +802,8 @@ static ktime_t tick_nohz_next_event(struct tick_sched *ts, int cpu)
* disabled this also looks at the next expiring
* hrtimer.
*/
- next_tmr = get_next_timer_interrupt(basejiff, basemono);
- ts->next_timer = next_tmr;
- /* Take the next rcu event into account */
- next_tick = next_rcu < next_tmr ? next_rcu : next_tmr;
+ next_tick = get_next_timer_interrupt(basejiff, basemono);
+ ts->next_timer = next_tick;
}
/*
--
2.25.1
Dear Frederic,
Am 08.02.22 um 17:16 schrieb Frederic Weisbecker:
> Some cleanups and debug rework.
>
> git://git.kernel.org/pub/scm/linux/kernel/git/frederic/linux-dynticks.git
> timers/core
>
> HEAD: 18b00369d58da4c73946d5f8ebed8e8c7ade89e2
>
> Thanks,
> Frederic
> ---
>
> Frederic Weisbecker (3):
> tick/rcu: Remove obsolete rcu_needs_cpu() parameters
> tick/rcu: Stop allowing RCU_SOFTIRQ in idle
> lib/irq_poll: Declare IRQ_POLL softirq vector as ksoftirqd-parking safe
>
>
> include/linux/interrupt.h | 11 ++++++++-
> include/linux/rcutiny.h | 3 +--
> include/linux/rcutree.h | 2 +-
> kernel/rcu/tree.c | 3 +--
> kernel/time/tick-sched.c | 60 ++++++++++++++++++++++++++++++++++-------------
> 5 files changed, 57 insertions(+), 22 deletions(-)
I tested this series on the IBM S822LC with Ubuntu 20.10 and rcu/dev
(commit 0ba8896d2fd7 (lib/irq_poll: Declare IRQ_POLL softirq vector as
ksoftirqd-parking safe)). Running `sudo ppc64_cpu --smt=off` the
warnings are gone.
Tested-by: Paul Menzel <[email protected]>
Kind regards,
Paul
On Mon, Feb 14, 2022 at 06:46:59AM +0100, Paul Menzel wrote:
> Dear Frederic,
>
>
> Am 08.02.22 um 17:16 schrieb Frederic Weisbecker:
> > Some cleanups and debug rework.
> >
> > git://git.kernel.org/pub/scm/linux/kernel/git/frederic/linux-dynticks.git
> > timers/core
> >
> > HEAD: 18b00369d58da4c73946d5f8ebed8e8c7ade89e2
> >
> > Thanks,
> > Frederic
> > ---
> >
> > Frederic Weisbecker (3):
> > tick/rcu: Remove obsolete rcu_needs_cpu() parameters
> > tick/rcu: Stop allowing RCU_SOFTIRQ in idle
> > lib/irq_poll: Declare IRQ_POLL softirq vector as ksoftirqd-parking safe
> >
> >
> > include/linux/interrupt.h | 11 ++++++++-
> > include/linux/rcutiny.h | 3 +--
> > include/linux/rcutree.h | 2 +-
> > kernel/rcu/tree.c | 3 +--
> > kernel/time/tick-sched.c | 60 ++++++++++++++++++++++++++++++++++-------------
> > 5 files changed, 57 insertions(+), 22 deletions(-)
>
> I tested this series on the IBM S822LC with Ubuntu 20.10 and rcu/dev (commit
> 0ba8896d2fd7 (lib/irq_poll: Declare IRQ_POLL softirq vector as
> ksoftirqd-parking safe)). Running `sudo ppc64_cpu --smt=off` the warnings
> are gone.
>
> Tested-by: Paul Menzel <[email protected]>
I will apply on my next rebase, thank you!
And thanks to Peter and Christophe for chasing this down!
Thanx, Paul