2021-08-15 03:23:56

by 黄军华

[permalink] [raw]
Subject: [PATCH] percpu: remove the unnecessary operation for bitmaps in finding suitable region

From: Junhua Huang <[email protected]>

We use pcpu_next_fit_region to find the next fit region for alloc. Once
return, the region fit the request and then break the loop, or get the
next start offset from pcpu_is_populated. So there is no necessary to
add bits to bit_off. At the same time, bits will set 0 in
pcpu_next_fit_region each time, so I think it is unnecessary to
set bits zero in pcpu_for_each_fit_region loops.

Signed-off-by: Junhua Huang <[email protected]>
---
mm/percpu.c | 2 --
1 file changed, 2 deletions(-)

diff --git a/mm/percpu.c b/mm/percpu.c
index 7f2e0151c4e2..ec7a5d10f6c9 100644
--- a/mm/percpu.c
+++ b/mm/percpu.c
@@ -489,7 +489,6 @@ static void pcpu_next_fit_region(struct pcpu_chunk *chunk, int alloc_bits,
for (pcpu_next_fit_region((chunk), (alloc_bits), (align), &(bit_off), \
&(bits)); \
(bit_off) < pcpu_chunk_map_bits((chunk)); \
- (bit_off) += (bits), \
pcpu_next_fit_region((chunk), (alloc_bits), (align), &(bit_off), \
&(bits)))

@@ -1126,7 +1125,6 @@ static int pcpu_find_block_fit(struct pcpu_chunk *chunk, int alloc_bits,
break;

bit_off = next_off;
- bits = 0;
}

if (bit_off == pcpu_chunk_map_bits(chunk))
--
2.25.1



2021-08-15 16:30:52

by Dennis Zhou

[permalink] [raw]
Subject: Re: [PATCH] percpu: remove the unnecessary operation for bitmaps in finding suitable region

Hello,

On Sat, Aug 14, 2021 at 08:20:18PM -0700, Junhua Huang wrote:
> From: Junhua Huang <[email protected]>
>
> We use pcpu_next_fit_region to find the next fit region for alloc. Once
> return, the region fit the request and then break the loop, or get the
> next start offset from pcpu_is_populated. So there is no necessary to
> add bits to bit_off. At the same time, bits will set 0 in
> pcpu_next_fit_region each time, so I think it is unnecessary to
> set bits zero in pcpu_for_each_fit_region loops.
>

I think you're right in this instance, but I don't think this change is
correct as a whole.

> Signed-off-by: Junhua Huang <[email protected]>
> ---
> mm/percpu.c | 2 --
> 1 file changed, 2 deletions(-)
>
> diff --git a/mm/percpu.c b/mm/percpu.c
> index 7f2e0151c4e2..ec7a5d10f6c9 100644
> --- a/mm/percpu.c
> +++ b/mm/percpu.c
> @@ -489,7 +489,6 @@ static void pcpu_next_fit_region(struct pcpu_chunk *chunk, int alloc_bits,
> for (pcpu_next_fit_region((chunk), (alloc_bits), (align), &(bit_off), \
> &(bits)); \
> (bit_off) < pcpu_chunk_map_bits((chunk)); \
> - (bit_off) += (bits), \

Removing this makes the iterator by itself wrong. While correct in the
current usage, it could potentially be wrong for the next.

> pcpu_next_fit_region((chunk), (alloc_bits), (align), &(bit_off), \
> &(bits)))
>
> @@ -1126,7 +1125,6 @@ static int pcpu_find_block_fit(struct pcpu_chunk *chunk, int alloc_bits,
> break;
>
> bit_off = next_off;
> - bits = 0;
> }
>
> if (bit_off == pcpu_chunk_map_bits(chunk))
> --
> 2.25.1
>
>

Thanks,
Dennis