/* * Housekeeping management. Manage the targets for routine code that can run on * any CPU: unbound workqueues, timers, kthreads and any offloadable work. * * Copyright (C) 2017 Red Hat, Inc., Frederic Weisbecker * */ #include #include #include #include cpumask_var_t housekeeping_mask; void __init housekeeping_init(void) { if (!tick_nohz_full_enabled()) return; if (!alloc_cpumask_var(&housekeeping_mask, GFP_KERNEL)) { WARN(1, "NO_HZ: Can't allocate not-full dynticks cpumask\n"); cpumask_clear(tick_nohz_full_mask); tick_nohz_full_running = false; return; } cpumask_andnot(housekeeping_mask, cpu_possible_mask, tick_nohz_full_mask); /* We need at least one CPU to handle housekeeping work */ WARN_ON_ONCE(cpumask_empty(housekeeping_mask)); }