linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Jaewon Kim <jaewon31.kim@samsung.com>
To: rppt@kernel.org, vbabka@suse.cz, akpm@linux-foundation.org
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	jaewon31.kim@gmail.com, Jaewon Kim <jaewon31.kim@samsung.com>
Subject: [RESEND PATCH 04/10] memblock: take a region intersecting an unknown region
Date: Tue, 21 May 2024 11:39:51 +0900	[thread overview]
Message-ID: <20240521023957.2587005-5-jaewon31.kim@samsung.com> (raw)
In-Reply-To: <20240521023957.2587005-1-jaewon31.kim@samsung.com>

There is case where reserved regions overlapped with already checked as
unknown regions. To get more information of the name, size, so far we
allowed only regions which are exactly matching with or located within
the unknown region.

For a region intersecting an unknown region, we did not take and just
showed that duplicated information. So total size was not perfect. To
fix this, let's allow to take even the intersecting region.

Signed-off-by: Jaewon Kim <jaewon31.kim@samsung.com>
---
 mm/memblock.c | 38 ++++++++++++++++++++++++++++++++++++--
 1 file changed, 36 insertions(+), 2 deletions(-)

diff --git a/mm/memblock.c b/mm/memblock.c
index 4a0506e14025..9b68ddc4af5e 100644
--- a/mm/memblock.c
+++ b/mm/memblock.c
@@ -2081,20 +2081,54 @@ static bool __init_memblock memsize_update_nomap_region(const char *name, phys_a
 	for (i = 0; i < memsize_rgn_count; i++)	{
 		rmem_rgn = &memsize_rgn[i];
 
+		/* skip either !nomap, !unknown, !overlap */
 		if (!rmem_rgn->nomap)
 			continue;
 		if (strcmp(rmem_rgn->name, "unknown"))
 			continue;
-		if (base < rmem_rgn->base)
+		if (base + size <= rmem_rgn->base)
 			continue;
-		if (base + size > rmem_rgn->base + rmem_rgn->size)
+		if (base >= rmem_rgn->base + rmem_rgn->size)
 			continue;
 
+		/* exactly same */
 		if (base == rmem_rgn->base && size == rmem_rgn->size) {
 			memsize_get_valid_name(rmem_rgn->name, name);
 			return true;
 		}
 
+		/* bigger */
+		if (base <= rmem_rgn->base &&
+				base + size >= rmem_rgn->base + rmem_rgn->size) {
+			memsize_get_valid_name(rmem_rgn->name, name);
+			rmem_rgn->base = base;
+			rmem_rgn->size = size;
+			return true;
+		}
+
+		/* intersect */
+		if (base < rmem_rgn->base ||
+				base + size > rmem_rgn->base + rmem_rgn->size) {
+			new_rgn = memsize_get_new_rgn();
+			if (!new_rgn)
+				return true;
+			new_rgn->base = base;
+			new_rgn->size = size;
+			new_rgn->nomap = nomap;
+			new_rgn->reusable = false;
+			memsize_get_valid_name(new_rgn->name, name);
+
+			if (base < rmem_rgn->base) {
+				rmem_rgn->size -= base + size - rmem_rgn->base;
+				rmem_rgn->base = base + size;
+			} else {
+				rmem_rgn->size -= rmem_rgn->base
+							+ rmem_rgn->size - base;
+			}
+			return true;
+		}
+
+		/* smaller */
 		new_rgn = memsize_get_new_rgn();
 		if (!new_rgn)
 			return true;
-- 
2.25.1



  parent reply	other threads:[~2024-05-21  2:40 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20240521024009epcas1p10ed9f9b929203183a29f79508e79bb76@epcas1p1.samsung.com>
2024-05-21  2:39 ` [RESEND PATCH 00/10] memblock: introduce memsize showing reserved memory Jaewon Kim
     [not found]   ` <CGME20240521024009epcas1p4451928c8f5b32bf84082a24c59ca7dd0@epcas1p4.samsung.com>
2024-05-21  2:39     ` [RESEND PATCH 01/10] " Jaewon Kim
     [not found]   ` <CGME20240521024009epcas1p3e80e90863a453053d5aac901ef644070@epcas1p3.samsung.com>
2024-05-21  2:39     ` [RESEND PATCH 02/10] memblock: detect hidden memory hole size Jaewon Kim
     [not found]   ` <CGME20240521024009epcas1p152671a613e86fa83d840962ee3db50fb@epcas1p1.samsung.com>
2024-05-21  2:39     ` [RESEND PATCH 03/10] memblock: handle overlapped reserved memory region Jaewon Kim
     [not found]   ` <CGME20240521024009epcas1p3440f857e3b31b319c270e2d658379383@epcas1p3.samsung.com>
2024-05-21  2:39     ` Jaewon Kim [this message]
     [not found]   ` <CGME20240521024009epcas1p20ddcabed3d037904a9c651d27f82c077@epcas1p2.samsung.com>
2024-05-21  2:39     ` [RESEND PATCH 05/10] memblock: track memblock changed at early param Jaewon Kim
     [not found]   ` <CGME20240521024009epcas1p40d0ea59e8ae93f6cc89846626fea4207@epcas1p4.samsung.com>
2024-05-21  2:39     ` [RESEND PATCH 06/10] memblock: recognize late freed size by checking PageReserved Jaewon Kim
     [not found]   ` <CGME20240521024009epcas1p3ccda7b2d9e6518b4575427c957e19377@epcas1p3.samsung.com>
2024-05-21  2:39     ` [RESEND PATCH 07/10] memblock: track kernel size on memsize Jaewon Kim
2024-05-22 19:03       ` kernel test robot
     [not found]   ` <CGME20240521024009epcas1p291bbc11c4e5cdaa922ca302d95330e6b@epcas1p2.samsung.com>
2024-05-21  2:39     ` [RESEND PATCH 08/10] memblock: print memsize summary information Jaewon Kim
     [not found]   ` <CGME20240521024009epcas1p441a4c458d251eec7bb6e63e671c25b4e@epcas1p4.samsung.com>
2024-05-21  2:39     ` [RESEND PATCH 09/10] memblock: print kernel internal size Jaewon Kim
2024-05-22 18:52       ` kernel test robot
     [not found]   ` <CGME20240521024009epcas1p15a3290b675ee66339033c185a5a8c00b@epcas1p1.samsung.com>
2024-05-21  2:39     ` [RESEND PATCH 10/10] memblock: support memsize reusable to consider as reusable Jaewon Kim
2024-05-22 22:40       ` kernel test robot
     [not found]       ` <CGME20240522224129epcas1p10433785cc14bef5de93e9f26aa599ff0@epcms1p8>
2024-05-23 10:55         ` Jaewon Kim
     [not found]   ` <CGME20240521024009epcas1p10ed9f9b929203183a29f79508e79bb76@epcms1p6>
2024-05-21  2:53     ` [RESEND PATCH 00/10] memblock: introduce memsize showing reserved memory Jaewon Kim
2024-05-21  7:31       ` Mike Rapoport
     [not found]       ` <CGME20240521024009epcas1p10ed9f9b929203183a29f79508e79bb76@epcms1p5>
2024-05-21 10:17         ` Jaewon Kim
2024-05-22  8:16           ` (2) " Wei Yang
2024-05-23 14:34           ` Mike Rapoport
2024-05-24 17:33             ` Pintu Agarwal
     [not found]           ` <CGME20240521024009epcas1p10ed9f9b929203183a29f79508e79bb76@epcms1p8>
2024-05-22  8:47             ` Jaewon Kim
2024-05-23  8:55               ` Wei Yang
     [not found]               ` <CGME20240521024009epcas1p10ed9f9b929203183a29f79508e79bb76@epcms1p2>
2024-05-23  9:23                 ` 김재원
2024-05-24  9:07                 ` (2) " Jaewon Kim
2024-05-26 13:55                   ` Mike Rapoport
     [not found]                   ` <CGME20240521024009epcas1p10ed9f9b929203183a29f79508e79bb76@epcms1p7>
2024-05-27  1:30                     ` Jaewon Kim
     [not found]                     ` <20240529095119epcms1p73f0e9ff756bcb2ee6a14db459128a644@epcms1p7>
2024-05-29 11:35                       ` Wei Yang
2024-05-29 13:10                         ` Jaewon Kim
2024-05-30  0:03                           ` Wei Yang
2024-05-27  1:35                 ` Jaewon Kim
2024-05-27 16:22                   ` Mike Rapoport
2024-05-30 10:49             ` Jaewon Kim
2024-05-31  1:05               ` (2) " Wei Yang
     [not found]               ` <CGME20240521024009epcas1p10ed9f9b929203183a29f79508e79bb76@epcms1p4>
2024-05-31  8:21                 ` Jaewon Kim
2024-06-01  1:40                   ` Wei Yang
2024-06-03  9:33             ` Jaewon Kim
2024-05-22  8:20       ` Wei Yang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240521023957.2587005-5-jaewon31.kim@samsung.com \
    --to=jaewon31.kim@samsung.com \
    --cc=akpm@linux-foundation.org \
    --cc=jaewon31.kim@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=rppt@kernel.org \
    --cc=vbabka@suse.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox