Commit 61659efd authored by Gavin Shan's avatar Gavin Shan Committed by Andrew Morton
Browse files

drivers/base/memory: improve add_boot_memory_block()

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: default avatarGavin Shan <gshan@redhat.com>
Acked-by: default avatarDavid Hildenbrand <david@redhat.com>
Acked-by: default avatarOscar 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: default avatarAndrew Morton <akpm@linux-foundation.org>
parent c637c61c
Loading
Loading
Loading
Loading
+8 −9
Original line number Diff line number Diff line
@@ -818,20 +818,19 @@ 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 0;
}

static int add_hotplug_memory_block(unsigned long block_id,
				    struct vmem_altmap *altmap,
				    struct memory_group *group)
+5 −0
Original line number Diff line number Diff line
@@ -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
+0 −5
Original line number Diff line number Diff line
@@ -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);