diff mbox series

[1/2] drivers/base/memory: Simplify add_boot_memory_block()

Message ID 20250214063504.617906-2-gshan@redhat.com (mailing list archive)
State New
Headers show
Series drivers/base/memory: Two cleanups | expand

Commit Message

Gavin Shan Feb. 14, 2025, 6:35 a.m. UTC
It's unnecessary to keep the variable @section_count in the function
because the device for the specific memory block will be added if
any of its memory section is present. The variable @section_count
records the number of present memory sections in the specific memory
block, which isn't needed.

Simplify the function by dropping the variable @section_count. No
functional change intended.

Signed-off-by: Gavin Shan <gshan@redhat.com>
---
 drivers/base/memory.c | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

Comments

David Hildenbrand Feb. 14, 2025, 7:53 a.m. UTC | #1
On 14.02.25 07:35, Gavin Shan wrote:
> It's unnecessary to keep the variable @section_count in the function
> because the device for the specific memory block will be added if
> any of its memory section is present. The variable @section_count
> records the number of present memory sections in the specific memory
> block, which isn't needed.
> 
> Simplify the function by dropping the variable @section_count. No
> functional change intended.
> 
> Signed-off-by: Gavin Shan <gshan@redhat.com>
> ---
>   drivers/base/memory.c | 15 +++++++--------
>   1 file changed, 7 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/base/memory.c b/drivers/base/memory.c
> index 348c5dbbfa68..208b9b544012 100644
> --- a/drivers/base/memory.c
> +++ b/drivers/base/memory.c
> @@ -822,18 +822,17 @@ static int add_memory_block(unsigned long block_id, unsigned long state,
>   
>   static int __init add_boot_memory_block(unsigned long base_section_nr)
>   {
> -	int section_count = 0;
>   	unsigned long nr;
>   
>   	for (nr = base_section_nr; nr < base_section_nr + sections_per_block;
> -	     nr++)
> -		if (present_section_nr(nr))
> -			section_count++;
> +	     nr++) {
> +		if (present_section_nr(nr)) {
> +			return add_memory_block(memory_block_id(base_section_nr),
> +						MEM_ONLINE, NULL, NULL);
> +		}

Superfluous set of braces for the if statement.

Not sure I count this while thing here as a "simplifcation" -- the code 
is IMHO easier to read without the nested return in the loop body.

No strong opinion, though.
Andrew Morton Feb. 14, 2025, 10:57 p.m. UTC | #2
On Fri, 14 Feb 2025 16:35:03 +1000 Gavin Shan <gshan@redhat.com> wrote:

> It's unnecessary to keep the variable @section_count in the function
> because the device for the specific memory block will be added if
> any of its memory section is present. The variable @section_count
> records the number of present memory sections in the specific memory
> block, which isn't needed.
> 
> Simplify the function by dropping the variable @section_count. No
> functional change intended.
> 
> ...
>
>  static int __init add_boot_memory_block(unsigned long base_section_nr)
>  {
> -	int section_count = 0;
>  	unsigned long nr;
>  
>  	for (nr = base_section_nr; nr < base_section_nr + sections_per_block;

mm/sparse.c has a for_each_present_section_nr() - is that usable here?

> -	     nr++)
> -		if (present_section_nr(nr))
> -			section_count++;
> +	     nr++) {
> +		if (present_section_nr(nr)) {
> +			return add_memory_block(memory_block_id(base_section_nr),
> +						MEM_ONLINE, NULL, NULL);
> +		}
> +	}
>
> ...
>
Gavin Shan Feb. 14, 2025, 11:45 p.m. UTC | #3
On 2/15/25 8:57 AM, Andrew Morton wrote:
> On Fri, 14 Feb 2025 16:35:03 +1000 Gavin Shan <gshan@redhat.com> wrote:
> 
>> It's unnecessary to keep the variable @section_count in the function
>> because the device for the specific memory block will be added if
>> any of its memory section is present. The variable @section_count
>> records the number of present memory sections in the specific memory
>> block, which isn't needed.
>>
>> Simplify the function by dropping the variable @section_count. No
>> functional change intended.
>>
>> ...
>>
>>   static int __init add_boot_memory_block(unsigned long base_section_nr)
>>   {
>> -	int section_count = 0;
>>   	unsigned long nr;
>>   
>>   	for (nr = base_section_nr; nr < base_section_nr + sections_per_block;
> 
> mm/sparse.c has a for_each_present_section_nr() - is that usable here?
> 

It should be fine to use it. I will add one preparatory patch to expose
for_each_present_section_nr(). With it, the nested if statements can also
be avoided, Something like below.

         for_each_present_section_nr(base_section_nr - 1, nr) {
		if (nr >= base_section_nr + sections_per_block)
			break;

		return add_memory_block(memory_block_id(nr), MEM_ONLINE, NULL, NULL);
         }

	return 0;

>> -	     nr++)
>> -		if (present_section_nr(nr))
>> -			section_count++;
>> +	     nr++) {
>> +		if (present_section_nr(nr)) {
>> +			return add_memory_block(memory_block_id(base_section_nr),
>> +						MEM_ONLINE, NULL, NULL);
>> +		}
>> +	}
>>

Thanks,
Gavin
Gavin Shan Feb. 14, 2025, 11:48 p.m. UTC | #4
On 2/14/25 5:53 PM, David Hildenbrand wrote:
> On 14.02.25 07:35, Gavin Shan wrote:
>> It's unnecessary to keep the variable @section_count in the function
>> because the device for the specific memory block will be added if
>> any of its memory section is present. The variable @section_count
>> records the number of present memory sections in the specific memory
>> block, which isn't needed.
>>
>> Simplify the function by dropping the variable @section_count. No
>> functional change intended.
>>
>> Signed-off-by: Gavin Shan <gshan@redhat.com>
>> ---
>>   drivers/base/memory.c | 15 +++++++--------
>>   1 file changed, 7 insertions(+), 8 deletions(-)
>>
>> diff --git a/drivers/base/memory.c b/drivers/base/memory.c
>> index 348c5dbbfa68..208b9b544012 100644
>> --- a/drivers/base/memory.c
>> +++ b/drivers/base/memory.c
>> @@ -822,18 +822,17 @@ static int add_memory_block(unsigned long block_id, unsigned long state,
>>   static int __init add_boot_memory_block(unsigned long base_section_nr)
>>   {
>> -    int section_count = 0;
>>       unsigned long nr;
>>       for (nr = base_section_nr; nr < base_section_nr + sections_per_block;
>> -         nr++)
>> -        if (present_section_nr(nr))
>> -            section_count++;
>> +         nr++) {
>> +        if (present_section_nr(nr)) {
>> +            return add_memory_block(memory_block_id(base_section_nr),
>> +                        MEM_ONLINE, NULL, NULL);
>> +        }
> 
> Superfluous set of braces for the if statement.
> 
> Not sure I count this while thing here as a "simplifcation" -- the code is IMHO easier to read without the nested return in the loop body.
> 
> No strong opinion, though.
> 

Indeed. I will use for_each_present_section_nr() as Andrew suggested. With it,
one level of the nested if statement can be avoided. The point was to avoid
counting the number of present sections in the specified block since the block
will be added if any section is present.

Thanks,
Gavin
diff mbox series

Patch

diff --git a/drivers/base/memory.c b/drivers/base/memory.c
index 348c5dbbfa68..208b9b544012 100644
--- a/drivers/base/memory.c
+++ b/drivers/base/memory.c
@@ -822,18 +822,17 @@  static int add_memory_block(unsigned long block_id, unsigned long state,
 
 static int __init add_boot_memory_block(unsigned long base_section_nr)
 {
-	int section_count = 0;
 	unsigned long nr;
 
 	for (nr = base_section_nr; nr < base_section_nr + sections_per_block;
-	     nr++)
-		if (present_section_nr(nr))
-			section_count++;
+	     nr++) {
+		if (present_section_nr(nr)) {
+			return add_memory_block(memory_block_id(base_section_nr),
+						MEM_ONLINE, NULL, NULL);
+		}
+	}
 
-	if (section_count == 0)
-		return 0;
-	return add_memory_block(memory_block_id(base_section_nr),
-				MEM_ONLINE, NULL,  NULL);
+	return 0;
 }
 
 static int add_hotplug_memory_block(unsigned long block_id,