sched/tick: Ensure timers does not get queued on isolated cpus
Timers should not be queued on isolated cpus. Instead try to find other cpus to queue timer on. Change-Id: I7a1a8aade8630226d7349cc37afd1a3abe48fc67 Signed-off-by: Olav Haugan <ohaugan@codeaurora.org> [satyap@codeaurora.org: Port to 4.19 by moving changes needed from include/linux/tick.h to include/linux/sched/isolation.h] Signed-off-by: Satya Durga Srinivasu Prabhala <satyap@codeaurora.org>
This commit is contained in:
committed by
Satya Durga Srinivasu Prabhala
parent
5d135373a7
commit
5a28e00796
@@ -27,7 +27,15 @@ extern void __init housekeeping_init(void);
|
|||||||
|
|
||||||
static inline int housekeeping_any_cpu(enum hk_flags flags)
|
static inline int housekeeping_any_cpu(enum hk_flags flags)
|
||||||
{
|
{
|
||||||
return smp_processor_id();
|
cpumask_t available;
|
||||||
|
int cpu;
|
||||||
|
|
||||||
|
cpumask_andnot(&available, cpu_online_mask, cpu_isolated_mask);
|
||||||
|
cpu = cpumask_any(&available);
|
||||||
|
if (cpu >= nr_cpu_ids)
|
||||||
|
cpu = smp_processor_id();
|
||||||
|
|
||||||
|
return cpu;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline const struct cpumask *housekeeping_cpumask(enum hk_flags flags)
|
static inline const struct cpumask *housekeeping_cpumask(enum hk_flags flags)
|
||||||
@@ -46,7 +54,7 @@ static inline bool housekeeping_cpu(int cpu, enum hk_flags flags)
|
|||||||
if (static_branch_unlikely(&housekeeping_overriden))
|
if (static_branch_unlikely(&housekeeping_overriden))
|
||||||
return housekeeping_test_cpu(cpu, flags);
|
return housekeeping_test_cpu(cpu, flags);
|
||||||
#endif
|
#endif
|
||||||
return true;
|
return !cpu_isolated(cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* _LINUX_SCHED_ISOLATION_H */
|
#endif /* _LINUX_SCHED_ISOLATION_H */
|
||||||
|
|||||||
Reference in New Issue
Block a user