From: Dennis Zhou Date: Mon, 25 Feb 2019 21:43:38 +0000 (-0800) Subject: percpu: manage chunks based on contig_bits instead of free_bytes X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=3e54097beb228ddcd73bb2fd18bafaa1062e9fe4;p=openwrt%2Fstaging%2Fblogic.git percpu: manage chunks based on contig_bits instead of free_bytes When a chunk becomes fragmented, it can end up having a large number of small allocation areas free. The free_bytes sorting of chunks leads to unnecessary checking of chunks that cannot satisfy the allocation. Switch to contig_bits sorting to prevent scanning chunks that may not be able to service the allocation request. Signed-off-by: Dennis Zhou Reviewed-by: Peng Fan --- diff --git a/mm/percpu.c b/mm/percpu.c index cbace9e79f2d..fc1e8efb5222 100644 --- a/mm/percpu.c +++ b/mm/percpu.c @@ -234,7 +234,7 @@ static int pcpu_chunk_slot(const struct pcpu_chunk *chunk) if (chunk->free_bytes < PCPU_MIN_ALLOC_SIZE || chunk->contig_bits == 0) return 0; - return pcpu_size_to_slot(chunk->free_bytes); + return pcpu_size_to_slot(chunk->contig_bits * PCPU_MIN_ALLOC_SIZE); } /* set the pointer to a chunk in a page struct */