mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-07 13:43:51 +00:00
memblock: avoid some repeat when add new range
The worst case is that the new memory range overlaps all existing regions, which requires type->cnt + 1 empty struct memblock_region slots in the type->regions array. So if type->cnt + 1 + type->cnt is less than type->max, we can insert regions directly rather than calculate the needed amount before the insertion. And becase of merge operation in the end of function, tpye->cnt will increase slowly for many cases. This change allows to avoid unnecessary repeat of memblock ranges traversal for many cases when adding new memory range. Signed-off-by: Jinyu Tang <tjytimi@163.com> [rppt: massaged comment and changelog text] Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
This commit is contained in:
parent
03c765b0e3
commit
28e1a8f4b0
@ -593,6 +593,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
|
||||
|
Loading…
Reference in New Issue
Block a user