drivers/base/memory: improve add_boot_memory_block()
authorGavin Shan <gshan@redhat.com>
Tue, 11 Mar 2025 23:30:43 +0000 (09:30 +1000)
committerAndrew Morton <akpm@linux-foundation.org>
Tue, 18 Mar 2025 05:07:01 +0000 (22:07 -0700)
Patch series "drivers/base/memory: Two cleanups", v3.

Two cleanups to drivers/base/memory.

This patch (of 2)L

It's unnecessary to count the present sections for the specified block
since the block will be added if any section in the block is present.
Besides, for_each_present_section_nr() can be reused as Andrew Morton
suggested.

Improve by using for_each_present_section_nr() and dropping the
unnecessary @section_count.

No functional changes intended.

Link: https://lkml.kernel.org/r/20250311233045.148943-1-gshan@redhat.com
Link: https://lkml.kernel.org/r/20250311233045.148943-2-gshan@redhat.com
Signed-off-by: Gavin Shan <gshan@redhat.com>
Acked-by: David Hildenbrand <david@redhat.com>
Acked-by: Oscar Salvador <osalvador@suse.de>
Cc: Danilo Krummrich <dakr@kernel.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: "Rafael J. Wysocki" <rafael@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
drivers/base/memory.c
include/linux/mmzone.h
mm/sparse.c

index 4765f2928725cc601335723d69dbc9fc8b111a50..8f3a41d9bfaa2cb56d974b6706233d4f3acac854 100644 (file)
@@ -818,18 +818,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++;
+       for_each_present_section_nr(base_section_nr, nr) {
+               if (nr >= (base_section_nr + sections_per_block))
+                       break;
 
-       if (section_count == 0)
-               return 0;
-       return add_memory_block(memory_block_id(base_section_nr),
-                               MEM_ONLINE, NULL,  NULL);
+               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,
index 550dbba92521aa98f3c02b5d7df8147f299ff09d..dbb0ad69e17f2a7cdf9a36b9d0f92f149fbea611 100644 (file)
@@ -2140,6 +2140,11 @@ static inline unsigned long next_present_section_nr(unsigned long section_nr)
        return -1;
 }
 
+#define for_each_present_section_nr(start, section_nr)         \
+       for (section_nr = next_present_section_nr(start - 1);   \
+            section_nr != -1;                                  \
+            section_nr = next_present_section_nr(section_nr))
+
 /*
  * These are _only_ used during initialisation, therefore they
  * can use __initdata ...  They could have names to indicate
index ee0234a77c7f5c43a6a2342e37a31d1e02bf04e0..3c012cf83cc2b4265394dcf9105cb0b3bd5f79c7 100644 (file)
@@ -170,11 +170,6 @@ static void __section_mark_present(struct mem_section *ms,
        ms->section_mem_map |= SECTION_MARKED_PRESENT;
 }
 
-#define for_each_present_section_nr(start, section_nr)         \
-       for (section_nr = next_present_section_nr(start-1);     \
-            section_nr != -1;                                                          \
-            section_nr = next_present_section_nr(section_nr))
-
 static inline unsigned long first_present_section_nr(void)
 {
        return next_present_section_nr(-1);