Message ID | 20231024214625.6483-2-frederic@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | rcu: Fix PF_IDLE related issues v2 | expand |
> > Export the RCU point of view as to when a CPU is considered offline > (ie: when does RCU consider that a CPU is sufficiently down in the > hotplug process to not feature any possible read side). > > This will be used by RCU-tasks whose vision of an offline CPU should > reasonably match the one of RCU core. > > Fixes: cff9b2332ab7 ("kernel/sched: Modify initial boot task idle setup") > Signed-off-by: Frederic Weisbecker <frederic@kernel.org> > --- > kernel/rcu/rcu.h | 2 ++ > kernel/rcu/tree.c | 7 +++++++ > 2 files changed, 9 insertions(+) > > diff --git a/kernel/rcu/rcu.h b/kernel/rcu/rcu.h > index 0d866eaa4cc8..b531c33e9545 100644 > --- a/kernel/rcu/rcu.h > +++ b/kernel/rcu/rcu.h > @@ -500,6 +500,7 @@ static inline void rcu_expedite_gp(void) { } > static inline void rcu_unexpedite_gp(void) { } > static inline void rcu_async_hurry(void) { } > static inline void rcu_async_relax(void) { } > +static inline bool rcu_cpu_online(int cpu) { return true; } > #else /* #ifdef CONFIG_TINY_RCU */ > bool rcu_gp_is_normal(void); /* Internal RCU use. */ > bool rcu_gp_is_expedited(void); /* Internal RCU use. */ > @@ -509,6 +510,7 @@ void rcu_unexpedite_gp(void); > void rcu_async_hurry(void); > void rcu_async_relax(void); > void rcupdate_announce_bootup_oddness(void); > +bool rcu_cpu_online(int cpu); > #ifdef CONFIG_TASKS_RCU_GENERIC > void show_rcu_tasks_gp_kthreads(void); > #else /* #ifdef CONFIG_TASKS_RCU_GENERIC */ > diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c > index 700524726079..fd21c1506092 100644 > --- a/kernel/rcu/tree.c > +++ b/kernel/rcu/tree.c > @@ -4202,6 +4202,13 @@ static bool rcu_rdp_cpu_online(struct rcu_data *rdp) > return !!(rdp->grpmask & rcu_rnp_online_cpus(rdp->mynode)); > } > > +bool rcu_cpu_online(int cpu) > +{ > + struct rcu_data *rdp = this_cpu_ptr(&rcu_data); > > Should 'struct rcu_data *rdp = per_cpu_ptr(&rcu_data, cpu)' be used ? Thanks Zqiang > > + > + return rcu_rdp_cpu_online(rdp); > +} > + > #if defined(CONFIG_PROVE_RCU) && defined(CONFIG_HOTPLUG_CPU) > > /* > -- > 2.41.0 >
Le Wed, Oct 25, 2023 at 10:29:46AM +0800, Z qiang a écrit : > > > > Export the RCU point of view as to when a CPU is considered offline > > (ie: when does RCU consider that a CPU is sufficiently down in the > > hotplug process to not feature any possible read side). > > > > This will be used by RCU-tasks whose vision of an offline CPU should > > reasonably match the one of RCU core. > > > > Fixes: cff9b2332ab7 ("kernel/sched: Modify initial boot task idle setup") > > Signed-off-by: Frederic Weisbecker <frederic@kernel.org> > > --- > > kernel/rcu/rcu.h | 2 ++ > > kernel/rcu/tree.c | 7 +++++++ > > 2 files changed, 9 insertions(+) > > > > diff --git a/kernel/rcu/rcu.h b/kernel/rcu/rcu.h > > index 0d866eaa4cc8..b531c33e9545 100644 > > --- a/kernel/rcu/rcu.h > > +++ b/kernel/rcu/rcu.h > > @@ -500,6 +500,7 @@ static inline void rcu_expedite_gp(void) { } > > static inline void rcu_unexpedite_gp(void) { } > > static inline void rcu_async_hurry(void) { } > > static inline void rcu_async_relax(void) { } > > +static inline bool rcu_cpu_online(int cpu) { return true; } > > #else /* #ifdef CONFIG_TINY_RCU */ > > bool rcu_gp_is_normal(void); /* Internal RCU use. */ > > bool rcu_gp_is_expedited(void); /* Internal RCU use. */ > > @@ -509,6 +510,7 @@ void rcu_unexpedite_gp(void); > > void rcu_async_hurry(void); > > void rcu_async_relax(void); > > void rcupdate_announce_bootup_oddness(void); > > +bool rcu_cpu_online(int cpu); > > #ifdef CONFIG_TASKS_RCU_GENERIC > > void show_rcu_tasks_gp_kthreads(void); > > #else /* #ifdef CONFIG_TASKS_RCU_GENERIC */ > > diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c > > index 700524726079..fd21c1506092 100644 > > --- a/kernel/rcu/tree.c > > +++ b/kernel/rcu/tree.c > > @@ -4202,6 +4202,13 @@ static bool rcu_rdp_cpu_online(struct rcu_data *rdp) > > return !!(rdp->grpmask & rcu_rnp_online_cpus(rdp->mynode)); > > } > > > > +bool rcu_cpu_online(int cpu) > > +{ > > + struct rcu_data *rdp = this_cpu_ptr(&rcu_data); > > > > > > Should 'struct rcu_data *rdp = per_cpu_ptr(&rcu_data, cpu)' be used ? Oh! Good catch! > > Thanks > Zqiang > > > > > > + > > + return rcu_rdp_cpu_online(rdp); > > +} > > + > > #if defined(CONFIG_PROVE_RCU) && defined(CONFIG_HOTPLUG_CPU) > > > > /* > > -- > > 2.41.0 > >
diff --git a/kernel/rcu/rcu.h b/kernel/rcu/rcu.h index 0d866eaa4cc8..b531c33e9545 100644 --- a/kernel/rcu/rcu.h +++ b/kernel/rcu/rcu.h @@ -500,6 +500,7 @@ static inline void rcu_expedite_gp(void) { } static inline void rcu_unexpedite_gp(void) { } static inline void rcu_async_hurry(void) { } static inline void rcu_async_relax(void) { } +static inline bool rcu_cpu_online(int cpu) { return true; } #else /* #ifdef CONFIG_TINY_RCU */ bool rcu_gp_is_normal(void); /* Internal RCU use. */ bool rcu_gp_is_expedited(void); /* Internal RCU use. */ @@ -509,6 +510,7 @@ void rcu_unexpedite_gp(void); void rcu_async_hurry(void); void rcu_async_relax(void); void rcupdate_announce_bootup_oddness(void); +bool rcu_cpu_online(int cpu); #ifdef CONFIG_TASKS_RCU_GENERIC void show_rcu_tasks_gp_kthreads(void); #else /* #ifdef CONFIG_TASKS_RCU_GENERIC */ diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index 700524726079..fd21c1506092 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -4202,6 +4202,13 @@ static bool rcu_rdp_cpu_online(struct rcu_data *rdp) return !!(rdp->grpmask & rcu_rnp_online_cpus(rdp->mynode)); } +bool rcu_cpu_online(int cpu) +{ + struct rcu_data *rdp = this_cpu_ptr(&rcu_data); + + return rcu_rdp_cpu_online(rdp); +} + #if defined(CONFIG_PROVE_RCU) && defined(CONFIG_HOTPLUG_CPU) /*
Export the RCU point of view as to when a CPU is considered offline (ie: when does RCU consider that a CPU is sufficiently down in the hotplug process to not feature any possible read side). This will be used by RCU-tasks whose vision of an offline CPU should reasonably match the one of RCU core. Fixes: cff9b2332ab7 ("kernel/sched: Modify initial boot task idle setup") Signed-off-by: Frederic Weisbecker <frederic@kernel.org> --- kernel/rcu/rcu.h | 2 ++ kernel/rcu/tree.c | 7 +++++++ 2 files changed, 9 insertions(+)