summary refs log tree commit diff
path: root/mm/memblock.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2022-08-09 09:48:30 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2022-08-09 09:48:30 -0700
commitb8dcef877ab5f2637fccd3efb6fe169c8211961a (patch)
treece4911c5bfca8a3189a5c2d64bf6f5dd551b1c03 /mm/memblock.c
parent15886321a426c7f4f1a0ff788f5b48e49230c0f3 (diff)
parent04d9490986d1e04a38db88276115e6b3c9ec3faa (diff)
downloadlinux-b8dcef877ab5f2637fccd3efb6fe169c8211961a.tar.gz
Merge tag 'memblock-v5.20-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rppt/memblock
Pull memblock updates from Mike Rapoport:

 - An optimization in memblock_add_range() to reduce array traversals

 - Improvements to the memblock test suite

* tag 'memblock-v5.20-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rppt/memblock:
  memblock test: Modify the obsolete description in README
  memblock tests: fix compilation errors
  memblock tests: change build options to run-time options
  memblock tests: remove completed TODO items
  memblock tests: set memblock_debug to enable memblock_dbg() messages
  memblock tests: add verbose output to memblock tests
  memblock tests: Makefile: add arguments to control verbosity
  memblock: avoid some repeat when add new range
Diffstat (limited to 'mm/memblock.c')
-rw-r--r--mm/memblock.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/mm/memblock.c b/mm/memblock.c
index c0894c137954..b5d3026979fc 100644
--- a/mm/memblock.c
+++ b/mm/memblock.c
@@ -597,6 +597,17 @@ static int __init_memblock memblock_add_range(struct memblock_type *type,
 		type->total_size = size;
 		return 0;
 	}
+
+	/*
+	 * The worst case is when new range overlaps all existing regions,
+	 * then we'll need type->cnt + 1 empty regions in @type. So if
+	 * type->cnt * 2 + 1 is less than type->max, we know
+	 * that there is enough empty regions in @type, and we can insert
+	 * regions directly.
+	 */
+	if (type->cnt * 2 + 1 < type->max)
+		insert = true;
+
 repeat:
 	/*
 	 * The following is executed twice.  Once with %false @insert and