diff --git a/include/linux/sched/isolation.h b/include/linux/sched/isolation.h index 4a6582c27dea..dd392ffaa2a0 100644 --- a/include/linux/sched/isolation.h +++ b/include/linux/sched/isolation.h @@ -27,7 +27,15 @@ extern void __init housekeeping_init(void); 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) @@ -46,7 +54,7 @@ static inline bool housekeeping_cpu(int cpu, enum hk_flags flags) if (static_branch_unlikely(&housekeeping_overriden)) return housekeeping_test_cpu(cpu, flags); #endif - return true; + return !cpu_isolated(cpu); } #endif /* _LINUX_SCHED_ISOLATION_H */