sched/smp: Always define rq->hrtick_csd
Simplify the scheduler by making CONFIG_SMP=y data structure of rq->hrtick_csd unconditional. Adjust hrtick_start() accordingly, which was split due to the ::hrtick_csd asymmetry and use the SMP version there too. Signed-off-by: Ingo Molnar <mingo@kernel.org> Acked-by: Peter Zijlstra <peterz@infradead.org> Cc: Dietmar Eggemann <dietmar.eggemann@arm.com> Cc: Juri Lelli <juri.lelli@redhat.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Mel Gorman <mgorman@suse.de> Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Cc: Shrikanth Hegde <sshegde@linux.ibm.com> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Valentin Schneider <vschneid@redhat.com> Cc: Vincent Guittot <vincent.guittot@linaro.org> Link: https://lore.kernel.org/r/20250528080924.2273858-23-mingo@kernel.orgpull/1309/head
parent
06ddd17521
commit
a1416303d1
|
|
@ -851,8 +851,6 @@ static enum hrtimer_restart hrtick(struct hrtimer *timer)
|
||||||
return HRTIMER_NORESTART;
|
return HRTIMER_NORESTART;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
|
||||||
|
|
||||||
static void __hrtick_restart(struct rq *rq)
|
static void __hrtick_restart(struct rq *rq)
|
||||||
{
|
{
|
||||||
struct hrtimer *timer = &rq->hrtick_timer;
|
struct hrtimer *timer = &rq->hrtick_timer;
|
||||||
|
|
@ -897,30 +895,9 @@ void hrtick_start(struct rq *rq, u64 delay)
|
||||||
smp_call_function_single_async(cpu_of(rq), &rq->hrtick_csd);
|
smp_call_function_single_async(cpu_of(rq), &rq->hrtick_csd);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* !CONFIG_SMP: */
|
|
||||||
/*
|
|
||||||
* Called to set the hrtick timer state.
|
|
||||||
*
|
|
||||||
* called with rq->lock held and IRQs disabled
|
|
||||||
*/
|
|
||||||
void hrtick_start(struct rq *rq, u64 delay)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Don't schedule slices shorter than 10000ns, that just
|
|
||||||
* doesn't make sense. Rely on vruntime for fairness.
|
|
||||||
*/
|
|
||||||
delay = max_t(u64, delay, 10000LL);
|
|
||||||
hrtimer_start(&rq->hrtick_timer, ns_to_ktime(delay),
|
|
||||||
HRTIMER_MODE_REL_PINNED_HARD);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* !CONFIG_SMP */
|
|
||||||
|
|
||||||
static void hrtick_rq_init(struct rq *rq)
|
static void hrtick_rq_init(struct rq *rq)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_SMP
|
|
||||||
INIT_CSD(&rq->hrtick_csd, __hrtick_start, rq);
|
INIT_CSD(&rq->hrtick_csd, __hrtick_start, rq);
|
||||||
#endif
|
|
||||||
hrtimer_setup(&rq->hrtick_timer, hrtick, CLOCK_MONOTONIC, HRTIMER_MODE_REL_HARD);
|
hrtimer_setup(&rq->hrtick_timer, hrtick, CLOCK_MONOTONIC, HRTIMER_MODE_REL_HARD);
|
||||||
}
|
}
|
||||||
#else /* !CONFIG_SCHED_HRTICK: */
|
#else /* !CONFIG_SCHED_HRTICK: */
|
||||||
|
|
|
||||||
|
|
@ -1219,9 +1219,7 @@ struct rq {
|
||||||
long calc_load_active;
|
long calc_load_active;
|
||||||
|
|
||||||
#ifdef CONFIG_SCHED_HRTICK
|
#ifdef CONFIG_SCHED_HRTICK
|
||||||
#ifdef CONFIG_SMP
|
|
||||||
call_single_data_t hrtick_csd;
|
call_single_data_t hrtick_csd;
|
||||||
#endif
|
|
||||||
struct hrtimer hrtick_timer;
|
struct hrtimer hrtick_timer;
|
||||||
ktime_t hrtick_time;
|
ktime_t hrtick_time;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue