]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - kernel/sched/isolation.c
Merge branch 'x86-entry-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux.git] / kernel / sched / isolation.c
index 123ea07a3f3b048089dc1e3e1c6ad8f422ed50ab..9fcb2a695a41289fe490c64a0656300a74fefb99 100644 (file)
@@ -14,11 +14,25 @@ EXPORT_SYMBOL_GPL(housekeeping_overridden);
 static cpumask_var_t housekeeping_mask;
 static unsigned int housekeeping_flags;
 
+bool housekeeping_enabled(enum hk_flags flags)
+{
+       return !!(housekeeping_flags & flags);
+}
+EXPORT_SYMBOL_GPL(housekeeping_enabled);
+
 int housekeeping_any_cpu(enum hk_flags flags)
 {
-       if (static_branch_unlikely(&housekeeping_overridden))
-               if (housekeeping_flags & flags)
+       int cpu;
+
+       if (static_branch_unlikely(&housekeeping_overridden)) {
+               if (housekeeping_flags & flags) {
+                       cpu = sched_numa_find_closest(housekeeping_mask, smp_processor_id());
+                       if (cpu < nr_cpu_ids)
+                               return cpu;
+
                        return cpumask_any_and(housekeeping_mask, cpu_online_mask);
+               }
+       }
        return smp_processor_id();
 }
 EXPORT_SYMBOL_GPL(housekeeping_any_cpu);