percpu: some trivial cleanup patches
Subsystems (2)
cover percpu: some trivial cleanup patches
There's a left issue in my mailbox about percpu code at below. When I rechecked it and considered Dennis's comment, I made an attmept to fix it with patch 3.
https://lore.kernel.org/all/Y407wDMKq5ibE9sc@fedora/T/#u
Patch 1 and 2 are trivial clean up patches when reading percpu code.
Baoquan He (3):
mm/percpu.c: remove redundant check
mm/percpu.c: optimize the code in pcpu_setup_first_chunk() a little
bit
mm/percpu.c: print error message too if atomic alloc failed
mm/percpu.c | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-)
Signature · 1 line
2.34.1
PATCH 1/3 mm/percpu.c: remove redundant check
The conditional check "(ai->dyn_size < PERCPU_DYNAMIC_EARLY_SIZE) has covered the check '(!ai->dyn_size)'.
--- mm/percpu.c | 1 - 1 file changed, 1 deletion(-)
mm/percpu.c +0 -1
@@ -2615,7 +2615,6 @@ void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai,PCPU_SETUP_BUG_ON (ai->unit_size <PCPU_MIN_UNIT_SIZE );PCPU_SETUP_BUG_ON (!IS_ALIGNED (ai->unit_size,PCPU_BITMAP_BLOCK_SIZE ));PCPU_SETUP_BUG_ON (ai->dyn_size <PERCPU_DYNAMIC_EARLY_SIZE ); -PCPU_SETUP_BUG_ON (!ai->dyn_size);PCPU_SETUP_BUG_ON (!IS_ALIGNED (ai->reserved_size,PCPU_MIN_ALLOC_SIZE ));PCPU_SETUP_BUG_ON (!(IS_ALIGNED (PCPU_BITMAP_BLOCK_SIZE ,PAGE_SIZE ) ||IS_ALIGNED (PAGE_SIZE ,PCPU_BITMAP_BLOCK_SIZE )));
Signature · 1 line
2.34.1
Re: [PATCH 1/3] mm/percpu.c: remove redundant check
Quoted 23 lines · Baoquan He
The conditional check "(
ai->dyn_size<PERCPU_DYNAMIC_EARLY_SIZE) has covered the check '(!ai->dyn_size)'.Signed-off-by Baoquan He <[email protected]>--- mm/percpu.c | 1 - 1 file changed, 1 deletion(-)mm/percpu.c +0
-1@@ -2615,7 +2615,6 @@ void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai,PCPU_SETUP_BUG_ON (ai->unit_size <PCPU_MIN_UNIT_SIZE );PCPU_SETUP_BUG_ON (!IS_ALIGNED (ai->unit_size,PCPU_BITMAP_BLOCK_SIZE ));PCPU_SETUP_BUG_ON (ai->dyn_size <PERCPU_DYNAMIC_EARLY_SIZE ); -PCPU_SETUP_BUG_ON (!ai->dyn_size);PCPU_SETUP_BUG_ON (!IS_ALIGNED (ai->reserved_size,PCPU_MIN_ALLOC_SIZE ));PCPU_SETUP_BUG_ON (!(IS_ALIGNED (PCPU_BITMAP_BLOCK_SIZE ,PAGE_SIZE ) ||IS_ALIGNED (PAGE_SIZE ,PCPU_BITMAP_BLOCK_SIZE )));Signature · 1 line
2.34.1
Thanks,
Dennis
PATCH 2/3 mm/percpu.c: optimize the code in pcpu_setup_first_chunk() a little bit
In reply to Baoquan HeThis removes the need of local varibale 'chunk', and optimize the code calling pcpu_alloc_first_chunk() to initialize reserved chunk and dynamic chunk to make it simpler.
--- mm/percpu.c | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-)
mm/percpu.c +13 -19
@@ -2581,7 +2581,6 @@ void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, {size_t size_sum = ai->static_size + ai->reserved_size + ai->dyn_size;size_t static_size, dyn_size; -struct pcpu_chunk *chunk;unsigned long *group_offsets;size_t *group_sizes;unsigned long *unit_off;
@@ -2697,7 +2696,7 @@ void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, pcpu_unit_pages = ai->unit_size >>PAGE_SHIFT ; pcpu_unit_size = pcpu_unit_pages <<PAGE_SHIFT ; pcpu_atom_size = ai->atom_size; - pcpu_chunk_struct_size =struct_size (chunk, populated, + pcpu_chunk_struct_size =struct_size ((struct pcpu_chunk *)0 , populated,BITS_TO_LONGS (pcpu_unit_pages));pcpu_stats_save_ai (ai);
@@ -2735,28 +2734,23 @@ void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai,/* * Initialize first chunk. -* If the reserved_size is non-zero, this initializes the reserved -* chunk. If the reserved_size is zero, the reserved chunk is NULL -* and the dynamic region is initialized here. The first chunk, -* pcpu_first_chunk, will always point to the chunk that serves -* the dynamic region. +* If the reserved_size is non-zero, initializes the reserved chunk +* firstly. If the reserved_size is zero, the reserved chunk is NULL +* and the dynamic region is initialized directly. The first chunk, +* pcpu_first_chunk, will always point to the chunk that serves the +* dynamic region. */ tmp_addr = (unsigned long )base_addr + static_size; - map_size = ai->reserved_size ?: dyn_size; - chunk =pcpu_alloc_first_chunk (tmp_addr, map_size); - -/* init dynamic chunk if necessary */ if (ai->reserved_size) { - pcpu_reserved_chunk = chunk; - - tmp_addr = (unsigned long )base_addr + static_size + - ai->reserved_size; - map_size = dyn_size; - chunk =pcpu_alloc_first_chunk (tmp_addr, map_size); + map_size = ai->reserved_size; + pcpu_reserved_chunk =pcpu_alloc_first_chunk (tmp_addr, map_size); } -/* link the first chunk in */ - pcpu_first_chunk = chunk; +/* init dynamic chunk if necessary */ + tmp_addr += (unsigned long )ai->reserved_size; + map_size = dyn_size; + pcpu_first_chunk =pcpu_alloc_first_chunk (tmp_addr, map_size); + pcpu_nr_empty_pop_pages = pcpu_first_chunk->nr_empty_pop_pages;pcpu_chunk_relocate (pcpu_first_chunk,-1 );
Signature · 1 line
2.34.1
Dennis Zhou
maintainerRe: [PATCH 2/3] mm/percpu.c: optimize the code in pcpu_setup_first_chunk() a little bit
Hello,
Quoted 31 lines · Baoquan He
This removes the need of local varibale 'chunk', and optimize the code calling
pcpu_alloc_first_chunk()to initialize reserved chunk and dynamic chunk to make it simpler.Signed-off-by Baoquan He <[email protected]>--- mm/percpu.c | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-)mm/percpu.c +1
-2@@ -2581,7 +2581,6 @@ void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, {size_t size_sum = ai->static_size + ai->reserved_size + ai->dyn_size;size_t static_size, dyn_size; -struct pcpu_chunk *chunk;unsigned long *group_offsets;size_t *group_sizes;unsigned long *unit_off;@@ -2697,7 +2696,7 @@ void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, pcpu_unit_pages = ai->unit_size >>PAGE_SHIFT ; pcpu_unit_size = pcpu_unit_pages <<PAGE_SHIFT ; pcpu_atom_size = ai->atom_size; - pcpu_chunk_struct_size =struct_size (chunk, populated, + pcpu_chunk_struct_size =struct_size ((struct pcpu_chunk *)0 , populated,BITS_TO_LONGS (pcpu_unit_pages));pcpu_stats_save_ai (ai);
mm/percpu.c void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, · line 2737
Quoted 9 lines
mm/percpu.c +1
-5@@ -2735,28 +2734,23 @@ void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai,/* * Initialize first chunk. -* If the reserved_size is non-zero, this initializes the reserved -* chunk. If the reserved_size is zero, the reserved chunk is NULL -* and the dynamic region is initialized here. The first chunk, -* pcpu_first_chunk, will always point to the chunk that serves -* the dynamic region. +* If the reserved_size is non-zero, initializes the reserved chunk
^initialize
mm/percpu.c void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, · line 2738
Quoted 1 line
mm/percpu.c +1
-0+* firstly. If the reserved_size is zero, the reserved chunk is NULL
^ can remove firstly.
mm/percpu.c void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, · line 2741
Quoted 3 lines
mm/percpu.c +3
-0+* and the dynamic region is initialized directly. The first chunk, +* pcpu_first_chunk, will always point to the chunk that serves the +* dynamic region.
Reading this, I'll probably reword this comment to explain the reserved chunk better.
Quoted 11 lines
mm/percpu.c +0
-8*/ tmp_addr = (unsigned long )base_addr + static_size; - map_size = ai->reserved_size ?: dyn_size; - chunk =pcpu_alloc_first_chunk (tmp_addr, map_size); - -/* init dynamic chunk if necessary */ if (ai->reserved_size) { - pcpu_reserved_chunk = chunk; - - tmp_addr = (unsigned long )base_addr + static_size + - ai->reserved_size;
mm/percpu.c void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, · line 2750
Quoted 10 lines
mm/percpu.c +4
-4- map_size = dyn_size; - chunk =pcpu_alloc_first_chunk (tmp_addr, map_size); + map_size = ai->reserved_size; + pcpu_reserved_chunk =pcpu_alloc_first_chunk (tmp_addr, map_size); } -/* link the first chunk in */ - pcpu_first_chunk = chunk; +/* init dynamic chunk if necessary */ + tmp_addr += (unsigned long )ai->reserved_size;
I'm not a big fan of += the tmp_addr as I personally find it easier to read if it's just laid out explicitly.
Quoted 9 lines
mm/percpu.c +3
-0+ map_size = dyn_size; + pcpu_first_chunk =pcpu_alloc_first_chunk (tmp_addr, map_size); + pcpu_nr_empty_pop_pages = pcpu_first_chunk->nr_empty_pop_pages;pcpu_chunk_relocate (pcpu_first_chunk,-1 );Signature · 1 line
2.34.1
Overall, I think this is good, but I'd go 1 step further and get rid of map_size. Regarding tmp_addr, I'd prefer if we kept all the math together.
Thanks,
Dennis
Re: [PATCH 2/3] mm/percpu.c: optimize the code in pcpu_setup_first_chunk() a little bit
Quoted 44 lines · Dennis Zhou
Hello,
Quoted 31 lines · Baoquan He
This removes the need of local varibale 'chunk', and optimize the code calling
pcpu_alloc_first_chunk()to initialize reserved chunk and dynamic chunk to make it simpler.Signed-off-by Baoquan He <[email protected]>--- mm/percpu.c | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-)mm/percpu.c +1
-2@@ -2581,7 +2581,6 @@ void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, {size_t size_sum = ai->static_size + ai->reserved_size + ai->dyn_size;size_t static_size, dyn_size; -struct pcpu_chunk *chunk;unsigned long *group_offsets;size_t *group_sizes;unsigned long *unit_off;@@ -2697,7 +2696,7 @@ void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, pcpu_unit_pages = ai->unit_size >>PAGE_SHIFT ; pcpu_unit_size = pcpu_unit_pages <<PAGE_SHIFT ; pcpu_atom_size = ai->atom_size; - pcpu_chunk_struct_size =struct_size (chunk, populated, + pcpu_chunk_struct_size =struct_size ((struct pcpu_chunk *)0 , populated,BITS_TO_LONGS (pcpu_unit_pages));pcpu_stats_save_ai (ai);mm/percpu.c void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, · line 2737
Quoted 9 lines
mm/percpu.c +1
-5@@ -2735,28 +2734,23 @@ void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai,/* * Initialize first chunk. -* If the reserved_size is non-zero, this initializes the reserved -* chunk. If the reserved_size is zero, the reserved chunk is NULL -* and the dynamic region is initialized here. The first chunk, -* pcpu_first_chunk, will always point to the chunk that serves -* the dynamic region. +* If the reserved_size is non-zero, initializes the reserved chunk ^initialize
Quoted 8 lines
mm/percpu.c void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, · line 2738
Quoted 1 line
mm/percpu.c +1
-0+* firstly. If the reserved_size is zero, the reserved chunk is NULL ^ can remove firstly.
mm/percpu.c void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, · line 2741
Quoted 3 lines
mm/percpu.c +3
-0+* and the dynamic region is initialized directly. The first chunk, +* pcpu_first_chunk, will always point to the chunk that serves the +* dynamic region. Reading this, I'll probably reword this comment to explain the reserved chunk better.
Agree. The expression is a little messy and too colloquial.
Quoted 18 lines
Quoted 18 lines
mm/percpu.c +2
-10*/ tmp_addr = (unsigned long )base_addr + static_size; - map_size = ai->reserved_size ?: dyn_size; - chunk =pcpu_alloc_first_chunk (tmp_addr, map_size); - -/* init dynamic chunk if necessary */ if (ai->reserved_size) { - pcpu_reserved_chunk = chunk; - - tmp_addr = (unsigned long )base_addr + static_size + - ai->reserved_size; - map_size = dyn_size; - chunk =pcpu_alloc_first_chunk (tmp_addr, map_size); + map_size = ai->reserved_size; + pcpu_reserved_chunk =pcpu_alloc_first_chunk (tmp_addr, map_size); }
Quoted 7 lines
mm/percpu.c void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, · line 2750
Quoted 4 lines
mm/percpu.c +2
-2-/* link the first chunk in */ - pcpu_first_chunk = chunk; +/* init dynamic chunk if necessary */ + tmp_addr += (unsigned long )ai->reserved_size;I'm not a big fan of += the
tmp_addras I personally find it easier to read if it's just laid out explicitly.
OK, will change.
Quoted 7 lines
Quoted 7 lines
mm/percpu.c +3
-0+ map_size = dyn_size; + pcpu_first_chunk =pcpu_alloc_first_chunk (tmp_addr, map_size); + pcpu_nr_empty_pop_pages = pcpu_first_chunk->nr_empty_pop_pages;pcpu_chunk_relocate (pcpu_first_chunk,-1 );
Quoted 7 lines
Quoted 3 lines
Signature · 1 line
2.34.1Overall, I think this is good, but I'd go 1 step further and get rid of
map_size. Regardingtmp_addr, I'd prefer if we kept all the math together.
Makes sense. Thanks a lot for your careful review and great suggestions.
According to your comments, I made a draft v2. Please help check if I have got them correctly and if the new change is OK to you.
From 17832ce8a755d8327b853a18c6f1cc00c9f93e50 Mon Sep 17 00:00:00 2001
From: Baoquan He <[email protected]>
Date: Tue, 27 Jun 2023 09:33:28 +0800
Subject: [PATCH] mm/percpu.c: optimize the code in pcpu_setup_first_chunk() a
little bit
Content-type: text/plain
This removes the need of local varibale 'chunk', and optimize the code calling pcpu_alloc_first_chunk() to initialize reserved chunk and dynamic chunk to make it simpler.
--- mm/percpu.c | 36 +++++++++++++----------------------- 1 file changed, 13 insertions(+), 23 deletions(-)
mm/percpu.c +13 -23
@@ -2581,14 +2581,12 @@ void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, {size_t size_sum = ai->static_size + ai->reserved_size + ai->dyn_size;size_t static_size, dyn_size; -struct pcpu_chunk *chunk;unsigned long *group_offsets;size_t *group_sizes;unsigned long *unit_off;unsigned int cpu;int *unit_map;int group, unit, i; -int map_size;unsigned long tmp_addr;size_t alloc_size;
@@ -2697,7 +2695,7 @@ void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, pcpu_unit_pages = ai->unit_size >>PAGE_SHIFT ; pcpu_unit_size = pcpu_unit_pages <<PAGE_SHIFT ; pcpu_atom_size = ai->atom_size; - pcpu_chunk_struct_size =struct_size (chunk, populated, + pcpu_chunk_struct_size =struct_size ((struct pcpu_chunk *)0 , populated,BITS_TO_LONGS (pcpu_unit_pages));pcpu_stats_save_ai (ai);
@@ -2734,29 +2732,21 @@ void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, dyn_size = ai->dyn_size - (static_size - ai->static_size);/* -* Initialize first chunk. -* If the reserved_size is non-zero, this initializes the reserved -* chunk. If the reserved_size is zero, the reserved chunk is NULL -* and the dynamic region is initialized here. The first chunk, -* pcpu_first_chunk, will always point to the chunk that serves -* the dynamic region. +* Initialize first chunk: +* +* - If the reserved_size is non-zero, initialize the reserved +* chunk firstly. Otherwise, the reserved chunk is NULL. +* +* - The first chunk, pcpu_first_chunk, always points to the +* chunk that serves the dynamic region. */ tmp_addr = (unsigned long )base_addr + static_size; - map_size = ai->reserved_size ?: dyn_size; - chunk =pcpu_alloc_first_chunk (tmp_addr, map_size); - -/* init dynamic chunk if necessary */ -if (ai->reserved_size) { - pcpu_reserved_chunk = chunk; - - tmp_addr = (unsigned long )base_addr + static_size + - ai->reserved_size; - map_size = dyn_size; - chunk =pcpu_alloc_first_chunk (tmp_addr, map_size); - } +if (ai->reserved_size) + pcpu_reserved_chunk =pcpu_alloc_first_chunk (tmp_addr, + ai->reserved_size); + tmp_addr = (unsigned long )base_addr + static_size + ai->reserved_size; + pcpu_first_chunk =pcpu_alloc_first_chunk (tmp_addr, dyn_size); -/* link the first chunk in */ - pcpu_first_chunk = chunk; pcpu_nr_empty_pop_pages = pcpu_first_chunk->nr_empty_pop_pages;pcpu_chunk_relocate (pcpu_first_chunk,-1 );
Signature · 1 line
2.34.1
PATCH 3/3 mm/percpu.c: print error message too if atomic alloc failed
In reply to Baoquan HeThe variable 'err' is assgigned to an error message if atomic alloc failed, while it has no chance to be printed if is_atomic is true.
Here change to print error message too if atomic alloc failed, while avoid to call dump_stack() if that case.
--- mm/percpu.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
mm/percpu.c +4 -2
@@ -1890,13 +1890,15 @@ static void __percpu *pcpu_alloc(size_t size, size_t align, bool reserved, fail:trace_percpu_alloc_percpu_fail (reserved, is_atomic, size, align); -if (!is_atomic && do_warn && warn_limit) { +if (do_warn && warn_limit) {pr_warn ("allocation failed, size=%zu align=%zu atomic=%d, %s\n" , size, align, is_atomic, err); -dump_stack (); +if (is_atomic) +dump_stack ();if (!--warn_limit)pr_info ("limit reached, disable warning\n" ); } +if (is_atomic) {/* see the flag handling in pcpu_balance_workfn() */ pcpu_atomic_alloc_failed = true;
Signature · 1 line
2.34.1
Dennis Zhou
maintainerRe: [PATCH 3/3] mm/percpu.c: print error message too if atomic alloc failed
Quoted 16 lines · Baoquan He
The variable 'err' is assgigned to an error message if atomic alloc failed, while it has no chance to be printed if
is_atomicis true.Here change to print error message too if atomic alloc failed, while avoid to call
dump_stack()if that case.Signed-off-by Baoquan He <[email protected]>--- mm/percpu.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)mm/percpu.c +0
-0
mm/percpu.c static void __percpu *pcpu_alloc(size_t size, size_t align, bool reserved, · line 1897
Quoted 10 lines
mm/percpu.c +3
-2@@ -1890,13 +1890,15 @@ static void __percpu *pcpu_alloc(size_t size, size_t align, bool reserved, fail:trace_percpu_alloc_percpu_fail (reserved, is_atomic, size, align); -if (!is_atomic && do_warn && warn_limit) { +if (do_warn && warn_limit) {pr_warn ("allocation failed, size=%zu align=%zu atomic=%d, %s\n" , size, align, is_atomic, err); -dump_stack (); +if (is_atomic) +dump_stack ();
This should be (!is_atomic) to preserve the current logic?
Quoted 10 lines
mm/percpu.c +1
-0if (!--warn_limit)pr_info ("limit reached, disable warning\n" ); } +if (is_atomic) {/* see the flag handling in pcpu_balance_workfn() */ pcpu_atomic_alloc_failed = true;Signature · 1 line
2.34.1
Thanks,
Dennis
Re: [PATCH 3/3] mm/percpu.c: print error message too if atomic alloc failed
Quoted 20 lines · Dennis Zhou
Quoted 19 lines · Baoquan He
The variable 'err' is assgigned to an error message if atomic alloc failed, while it has no chance to be printed if
is_atomicis true.Here change to print error message too if atomic alloc failed, while avoid to call
dump_stack()if that case.Signed-off-by Baoquan He <[email protected]>--- mm/percpu.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)mm/percpu.c +0
-0@@ -1890,13 +1890,15 @@ static void __percpu *pcpu_alloc(size_t size, size_t align, bool reserved, fail:trace_percpu_alloc_percpu_fail (reserved, is_atomic, size, align);
Quoted 9 lines
mm/percpu.c static void __percpu *pcpu_alloc(size_t size, size_t align, bool reserved, · line 1897
Quoted 7 lines
mm/percpu.c +3
-2-if (!is_atomic && do_warn && warn_limit) { +if (do_warn && warn_limit) {pr_warn ("allocation failed, size=%zu align=%zu atomic=%d, %s\n" , size, align, is_atomic, err); -dump_stack (); +if (is_atomic) +dump_stack ();This should be (!is_atomic) to preserve the current logic?
You are quite right, I must be dizzy at the moment when making change. Will fix this. Thanks for reviewing.
Quoted 15 lines
Quoted 11 lines
mm/percpu.c +1
-0if (!--warn_limit)pr_info ("limit reached, disable warning\n" ); } +if (is_atomic) {/* see the flag handling in pcpu_balance_workfn() */ pcpu_atomic_alloc_failed = true;Signature · 1 line
2.34.1Thanks,
Dennis
Dennis Zhou
maintainerHello,
Quoted 8 lines · Baoquan He
There's a left issue in my mailbox about percpu code at below. When I rechecked it and considered Dennis's comment, I made an attmept to fix it with patch 3.
https://lore.kernel.org/all/Y407wDMKq5ibE9sc@fedora/T/#u
Patch 1 and 2 are trivial clean up patches when reading percpu code.
Quoted 12 lines
Baoquan He (3):
mm/percpu.c: remove redundant check
mm/percpu.c: optimize the code inpcpu_setup_first_chunk()a little
bit
mm/percpu.c: print error message too if atomic alloc failedmm/percpu.c | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-)Signature · 1 line
2.34.1
Thanks for these. I left a few comments. I think I might have some stuff for v6.6, I'll figure that out in a couple days. If that's so, I can pull 1, probably massage 2 and send that out again, and then I think you'll need to resend 3.
Thanks,
Dennis
Quoted 20 lines · Dennis Zhou
Hello,
Quoted 17 lines · Baoquan He
There's a left issue in my mailbox about percpu code at below. When I rechecked it and considered Dennis's comment, I made an attmept to fix it with patch 3.
https://lore.kernel.org/all/Y407wDMKq5ibE9sc@fedora/T/#u
Patch 1 and 2 are trivial clean up patches when reading percpu code.
Baoquan He (3):
mm/percpu.c: remove redundant check
mm/percpu.c: optimize the code inpcpu_setup_first_chunk()a little
bit
mm/percpu.c: print error message too if atomic alloc failedmm/percpu.c | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-)
Quoted 8 lines
Quoted 3 lines
Signature · 1 line
2.34.1Thanks for these. I left a few comments. I think I might have some stuff for v6.6, I'll figure that out in a couple days. If that's so, I can pull 1, probably massage 2 and send that out again, and then I think you'll need to resend 3.
Sure, thanks for careful reviewing and great suggestion. So I only need to send v2 of patch 3, right? Or I should change and send v2 of the whold series? I may not get it clear.
Dennis Zhou
maintainerHi,
Quoted 25 lines · Baoquan He
Quoted 24 lines · Dennis Zhou
Hello,
Quoted 20 lines · Baoquan He
There's a left issue in my mailbox about percpu code at below. When I rechecked it and considered Dennis's comment, I made an attmept to fix it with patch 3.
https://lore.kernel.org/all/Y407wDMKq5ibE9sc@fedora/T/#u
Patch 1 and 2 are trivial clean up patches when reading percpu code.
Baoquan He (3):
mm/percpu.c: remove redundant check
mm/percpu.c: optimize the code inpcpu_setup_first_chunk()a little
bit
mm/percpu.c: print error message too if atomic alloc failedmm/percpu.c | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-)Signature · 1 line
2.34.1
Quoted 9 lines
Quoted 4 lines
Thanks for these. I left a few comments. I think I might have some stuff for v6.6, I'll figure that out in a couple days. If that's so, I can pull 1, probably massage 2 and send that out again, and then I think you'll need to resend 3.
Sure, thanks for careful reviewing and great suggestion. So I only need to send v2 of patch 3, right? Or I should change and send v2 of the whold series? I may not get it clear.
Sorry for the delay. I've pulled 1 and 2 (reworded the comment). Can you please resend patch 3.
Thanks,
Dennis
Quoted 33 lines · Dennis Zhou
Hi,
Quoted 30 lines · Baoquan He
Quoted 28 lines · Dennis Zhou
Hello,
Quoted 8 lines · Baoquan He
There's a left issue in my mailbox about percpu code at below. When I rechecked it and considered Dennis's comment, I made an attmept to fix it with patch 3.
https://lore.kernel.org/all/Y407wDMKq5ibE9sc@fedora/T/#u
Patch 1 and 2 are trivial clean up patches when reading percpu code.
Quoted 12 lines
Baoquan He (3):
mm/percpu.c: remove redundant check
mm/percpu.c: optimize the code inpcpu_setup_first_chunk()a little
bit
mm/percpu.c: print error message too if atomic alloc failedmm/percpu.c | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-)Signature · 1 line
2.34.1Thanks for these. I left a few comments. I think I might have some stuff for v6.6, I'll figure that out in a couple days. If that's so, I can pull 1, probably massage 2 and send that out again, and then I think you'll need to resend 3.
Quoted 7 lines
Quoted 4 lines
Sure, thanks for careful reviewing and great suggestion. So I only need to send v2 of patch 3, right? Or I should change and send v2 of the whold series? I may not get it clear.
Sorry for the delay. I've pulled 1 and 2 (reworded the comment). Can you please resend patch 3.
Sent out v2 of patch 3, thanks.