From patchwork Mon Mar 3 13:32:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sughosh Ganu X-Patchwork-Id: 869833 Delivered-To: patch@linaro.org Received: by 2002:a05:6000:1561:b0:38f:210b:807b with SMTP id 1csp2122322wrz; Mon, 3 Mar 2025 05:33:23 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCUhC8caxJfX+mtI/9aVR0h32iFLbS46ZktIbZojaiSWUUgTNmJYXgmmS2SRu5f/zzsEvXtU6A==@linaro.org X-Google-Smtp-Source: AGHT+IGHsjNpcpbzJCU97nKy2+cY9C0DNKjUJM2IiBy2nhR/V2yn9Tg2g5uoD5nJFAInAcXx8Ar8 X-Received: by 2002:a17:902:e750:b0:21f:ba96:5de9 with SMTP id d9443c01a7336-2236926f502mr261131805ad.49.1741008802942; Mon, 03 Mar 2025 05:33:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1741008802; cv=none; d=google.com; s=arc-20240605; b=OFz/KsCbTMJvbhv06ydiM/+vsPCe6ZRkruGzK06e6fmvtxWojaJiY2XKpJ0/W8gBhW qfbHzzMTELr1X4U9VxrbnTWAoxG2PsrwEPHlxe6OfeMWR+w48Q1GM1qDQHjI9umFiMpY 9rSOplPejaURNBRF14VKkTvkSFkFoHADIUZcLZ7/rgWOZPlXKfa+AYU95e9AcitE52NL 6htYKISV4sKb2IGUy+M7pihRQhJ+UrqV1ABoJCyWsxnU7zPHWXMfxLuA6mOrD3acTcbD 0yYovlgKZGYOeVqGU+jmYlAi478pQRI5uZbK7BUmVbd7qgo7rkDyYkhqb0mKBMGh/qq6 OKSQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from; bh=UwstgArQWQ5IcpvQPVZqPcpB2WtGxbvyxBmyRVRWyls=; fh=2HGKihHUAicyV3F+aHiaoPpwvqWA0zlC04Ew6QaQoEg=; b=hkFS3OXeGZ81on9wuOAduZzsw1D4Xep4STJKo7HKzq64Jql+DAwMeOybmSriE5G1yZ T4Z4zRaSF84sD00+fPj3HF0VcYlttu/1qI8/Fdp3jHj2maDflMnoJ9ftMbHZ+SwbFqL+ UpV1ki4eQpfD9L/TM0QI3r964PRZUWonCEnFAXuKFhME/F5Tr49NjqCwOXBntp9lXka3 sO3fesTlGknAQkfXk+X5EOHLfZu07PvwTbiwpATOQe4jzt9rQ93qvKphqWlRpjEW6wfE mbZqOrRl9TsTHyTfj33L/kgHecO7/CPns6CqVDTXnZbnVdUglCKiXnYK2hQThdebUX1H Vc0w==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from phobos.denx.de (phobos.denx.de. [85.214.62.61]) by mx.google.com with ESMTPS id d9443c01a7336-223501d6cf1si148844095ad.22.2025.03.03.05.33.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Mar 2025 05:33:22 -0800 (PST) Received-SPF: pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) client-ip=85.214.62.61; Authentication-Results: mx.google.com; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id B3BAB811B3; Mon, 3 Mar 2025 14:33:02 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by phobos.denx.de (Postfix, from userid 109) id 1C80281276; Mon, 3 Mar 2025 14:33:02 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE,SPF_SOFTFAIL autolearn=no autolearn_force=no version=3.4.2 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by phobos.denx.de (Postfix) with ESMTP id 0A520811B2 for ; Mon, 3 Mar 2025 14:33:00 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=fail smtp.mailfrom=sughosh.ganu@linaro.org Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 85258106F; Mon, 3 Mar 2025 05:33:13 -0800 (PST) Received: from a079122.blr.arm.com (a079122.arm.com [10.162.17.48]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E152D3F673; Mon, 3 Mar 2025 05:32:56 -0800 (PST) From: Sughosh Ganu To: u-boot@lists.denx.de Cc: Ilias Apalodimas , Simon Glass , Tom Rini , Quentin Schulz , Udit Kumar , Heinrich Schuchardt , Sughosh Ganu Subject: [PATCH v3 2/6] lmb: handle scenario of encompassing overlap Date: Mon, 3 Mar 2025 19:02:27 +0530 Message-Id: <20250303133231.405279-3-sughosh.ganu@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250303133231.405279-1-sughosh.ganu@linaro.org> References: <20250303133231.405279-1-sughosh.ganu@linaro.org> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean The lmb_fix_over_lap_regions() function is called if the added region overlaps with an existing region. The function then fixes the overlap and removes the redundant region. However, it makes certain assumptions. One assumption is that the overlap would not encompass the existing region. Another assumption is that the overlap only occurs between two regions -- the scenario of the added region overlapping multiple existing regions is not being handled. Handle these cases by instead calling lmb_resize_regions(). Also remove the now superfluous lmb_fix_over_lap_regions(). Signed-off-by: Sughosh Ganu Reviewed-by: Heinrich Schuchardt --- Changes since V2: None lib/lmb.c | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/lib/lmb.c b/lib/lmb.c index 32c787f8adf..26d9cafef41 100644 --- a/lib/lmb.c +++ b/lib/lmb.c @@ -96,25 +96,6 @@ static void lmb_coalesce_regions(struct alist *lmb_rgn_lst, unsigned long r1, lmb_remove_region(lmb_rgn_lst, r2); } -/*Assumption : base addr of region 1 < base addr of region 2*/ -static void lmb_fix_over_lap_regions(struct alist *lmb_rgn_lst, - unsigned long r1, unsigned long r2) -{ - struct lmb_region *rgn = lmb_rgn_lst->data; - - phys_addr_t base1 = rgn[r1].base; - phys_size_t size1 = rgn[r1].size; - phys_addr_t base2 = rgn[r2].base; - phys_size_t size2 = rgn[r2].size; - - if (base1 + size1 > base2 + size2) { - printf("This will not be a case any time\n"); - return; - } - rgn[r1].size = base2 + size2 - base1; - lmb_remove_region(lmb_rgn_lst, r2); -} - static long lmb_resize_regions(struct alist *lmb_rgn_lst, unsigned long idx_start, phys_addr_t base, phys_size_t size) @@ -235,8 +216,15 @@ static long lmb_add_region_flags(struct alist *lmb_rgn_lst, phys_addr_t base, lmb_coalesce_regions(lmb_rgn_lst, i, i + 1); coalesced++; } else if (lmb_regions_overlap(lmb_rgn_lst, i, i + 1)) { - /* fix overlapping area */ - lmb_fix_over_lap_regions(lmb_rgn_lst, i, i + 1); + /* fix overlapping areas */ + phys_addr_t rgnbase = rgn[i].base; + phys_size_t rgnsize = rgn[i].size; + + ret = lmb_resize_regions(lmb_rgn_lst, i, + rgnbase, rgnsize); + if (ret < 0) + return -1; + coalesced++; } }