forked from Minki/linux
34 lines
859 B
C
34 lines
859 B
C
|
/*
|
||
|
* 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 <linux/sched/isolation.h>
|
||
|
#include <linux/tick.h>
|
||
|
#include <linux/init.h>
|
||
|
#include <linux/kernel.h>
|
||
|
|
||
|
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));
|
||
|
}
|