diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2019-05-13 18:34:03 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-05-13 18:34:03 -0400 |
| commit | 3aff5fac54d722f363eac7db94536bffb55ca43f (patch) | |
| tree | cd778c4e8e9ebc5a42f5fea13d3fec12b35dfe87 /include/linux | |
| parent | 0aed4b28187078565cafbfe86b62f941d580d840 (diff) | |
| parent | 198790d9a3aeaef5792d33a560020861126edc22 (diff) | |
Merge branch 'for-5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/dennis/percpu
Pull percpu updates from Dennis Zhou:
- scan hint update which helps address performance issues with heavily
fragmented blocks
- lockdep fix when freeing an allocation causes balance work to be
scheduled
* 'for-5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/dennis/percpu:
percpu: remove spurious lock dependency between percpu and sched
percpu: use chunk scan_hint to skip some scanning
percpu: convert chunk hints to be based on pcpu_block_md
percpu: make pcpu_block_md generic
percpu: use block scan_hint to only scan forward
percpu: remember largest area skipped during allocation
percpu: add block level scan_hint
percpu: set PCPU_BITMAP_BLOCK_SIZE to PAGE_SIZE
percpu: relegate chunks unusable when failing small allocations
percpu: manage chunks based on contig_bits instead of free_bytes
percpu: introduce helper to determine if two regions overlap
percpu: do not search past bitmap when allocating an area
percpu: update free path with correct new free region
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/percpu.h | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/include/linux/percpu.h b/include/linux/percpu.h index 70b7123f38c7..9909dc0e273a 100644 --- a/include/linux/percpu.h +++ b/include/linux/percpu.h | |||
| @@ -26,16 +26,10 @@ | |||
| 26 | #define PCPU_MIN_ALLOC_SHIFT 2 | 26 | #define PCPU_MIN_ALLOC_SHIFT 2 |
| 27 | #define PCPU_MIN_ALLOC_SIZE (1 << PCPU_MIN_ALLOC_SHIFT) | 27 | #define PCPU_MIN_ALLOC_SIZE (1 << PCPU_MIN_ALLOC_SHIFT) |
| 28 | 28 | ||
| 29 | /* number of bits per page, used to trigger a scan if blocks are > PAGE_SIZE */ | ||
| 30 | #define PCPU_BITS_PER_PAGE (PAGE_SIZE >> PCPU_MIN_ALLOC_SHIFT) | ||
| 31 | |||
| 32 | /* | 29 | /* |
| 33 | * This determines the size of each metadata block. There are several subtle | 30 | * The PCPU_BITMAP_BLOCK_SIZE must be the same size as PAGE_SIZE as the |
| 34 | * constraints around this constant. The reserved region must be a multiple of | 31 | * updating of hints is used to manage the nr_empty_pop_pages in both |
| 35 | * PCPU_BITMAP_BLOCK_SIZE. Additionally, PCPU_BITMAP_BLOCK_SIZE must be a | 32 | * the chunk and globally. |
| 36 | * multiple of PAGE_SIZE or PAGE_SIZE must be a multiple of | ||
| 37 | * PCPU_BITMAP_BLOCK_SIZE to align with the populated page map. The unit_size | ||
| 38 | * also has to be a multiple of PCPU_BITMAP_BLOCK_SIZE to ensure full blocks. | ||
| 39 | */ | 33 | */ |
| 40 | #define PCPU_BITMAP_BLOCK_SIZE PAGE_SIZE | 34 | #define PCPU_BITMAP_BLOCK_SIZE PAGE_SIZE |
| 41 | #define PCPU_BITMAP_BLOCK_BITS (PCPU_BITMAP_BLOCK_SIZE >> \ | 35 | #define PCPU_BITMAP_BLOCK_BITS (PCPU_BITMAP_BLOCK_SIZE >> \ |
