diff options
author | 2014-09-02 14:46:05 -0400 | |
---|---|---|
committer | 2014-09-02 14:46:05 -0400 | |
commit | 1a4d76076cda69b0abf15463a8cebc172406da25 (patch) | |
tree | eb2f8e317795c30942ae298585708e10652e8537 /include/linux/percpu.h | |
parent | percpu: rename pcpu_reclaim_work to pcpu_balance_work (diff) | |
download | linux-1a4d76076cda69b0abf15463a8cebc172406da25.tar.gz linux-1a4d76076cda69b0abf15463a8cebc172406da25.tar.bz2 linux-1a4d76076cda69b0abf15463a8cebc172406da25.zip |
percpu: implement asynchronous chunk population
The percpu allocator now supports atomic allocations by only
allocating from already populated areas but the mechanism to ensure
that there's adequate amount of populated areas was missing.
This patch expands pcpu_balance_work so that in addition to freeing
excess free chunks it also populates chunks to maintain an adequate
level of populated areas. pcpu_alloc() schedules pcpu_balance_work if
the amount of free populated areas is too low or after an atomic
allocation failure.
* PERPCU_DYNAMIC_RESERVE is increased by two pages to account for
PCPU_EMPTY_POP_PAGES_LOW.
* pcpu_async_enabled is added to gate both async jobs -
chunk->map_extend_work and pcpu_balance_work - so that we don't end
up scheduling them while the needed subsystems aren't up yet.
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'include/linux/percpu.h')
-rw-r--r-- | include/linux/percpu.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/include/linux/percpu.h b/include/linux/percpu.h index d1b416da25ed..a3aa63e47637 100644 --- a/include/linux/percpu.h +++ b/include/linux/percpu.h @@ -48,9 +48,9 @@ * intelligent way to determine this would be nice. */ #if BITS_PER_LONG > 32 -#define PERCPU_DYNAMIC_RESERVE (20 << 10) +#define PERCPU_DYNAMIC_RESERVE (28 << 10) #else -#define PERCPU_DYNAMIC_RESERVE (12 << 10) +#define PERCPU_DYNAMIC_RESERVE (20 << 10) #endif extern void *pcpu_base_addr; |