Hello, On Wed, Apr 07, 2021 at 08:57:35PM -0700, Roman Gushchin wrote: > Factor out the pcpu_check_chunk_hint() helper, which will be useful > in the future. The new function checks if the allocation can likely > fit the given chunk. > > Signed-off-by: Roman Gushchin <guro@xxxxxx> > --- > mm/percpu.c | 30 +++++++++++++++++++++--------- > 1 file changed, 21 insertions(+), 9 deletions(-) > > diff --git a/mm/percpu.c b/mm/percpu.c > index e20119668c42..357fd6994278 100644 > --- a/mm/percpu.c > +++ b/mm/percpu.c > @@ -306,6 +306,26 @@ static unsigned long pcpu_block_off_to_off(int index, int off) > return index * PCPU_BITMAP_BLOCK_BITS + off; > } > > +/** > + * pcpu_check_chunk_hint - check that allocation can fit a chunk > + * @chunk_md: chunk's block nit for consistency: @block: block of interest > + * @bits: size of request in allocation units > + * @align: alignment of area (max PAGE_SIZE) > + * > + * Check to see if the allocation can fit in the chunk's contig hint. > + * This is an optimization to prevent scanning by assuming if it > + * cannot fit in the global hint, there is memory pressure and creating > + * a new chunk would happen soon. > + */ It occurred to me, That I converged block_md and chunk_md to be the same object as 1 is just a degenerative case of the other. Can we rename this to be pcpu_check_block_hint() and have it take in pcpu_block_md? > +static bool pcpu_check_chunk_hint(struct pcpu_block_md *chunk_md, int bits, > + size_t align) > +{ > + int bit_off = ALIGN(chunk_md->contig_hint_start, align) - > + chunk_md->contig_hint_start; > + > + return bit_off + bits <= chunk_md->contig_hint; > +} > + > /* > * pcpu_next_hint - determine which hint to use > * @block: block of interest > @@ -1065,15 +1085,7 @@ static int pcpu_find_block_fit(struct pcpu_chunk *chunk, int alloc_bits, > struct pcpu_block_md *chunk_md = &chunk->chunk_md; > int bit_off, bits, next_off; > > - /* > - * Check to see if the allocation can fit in the chunk's contig hint. > - * This is an optimization to prevent scanning by assuming if it > - * cannot fit in the global hint, there is memory pressure and creating > - * a new chunk would happen soon. > - */ > - bit_off = ALIGN(chunk_md->contig_hint_start, align) - > - chunk_md->contig_hint_start; > - if (bit_off + alloc_bits > chunk_md->contig_hint) > + if (!pcpu_check_chunk_hint(chunk_md, alloc_bits, align)) > return -1; > > bit_off = pcpu_next_hint(chunk_md, alloc_bits); > -- > 2.30.2 > Thanks, Dennis