From patchwork Thu Feb 20 09:56:50 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sughosh Ganu X-Patchwork-Id: 866736 Delivered-To: patch@linaro.org Received: by 2002:a05:6000:1f85:b0:38f:210b:807b with SMTP id hj5csp115384wrb; Thu, 20 Feb 2025 01:57:46 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVHfsIyFBJM8tLgMJNWvgA793z3Oj7LIzZDIXSFBnYLOpPTWRTpwOGIcRN5HwAyRt+dLO/Hog==@linaro.org X-Google-Smtp-Source: AGHT+IEVfbVQcUglcld2tp2pIVh5wsJJHuGdDniWLeLWp2ntxTpfQenNLpDpteVMV4nfQudQZYqn X-Received: by 2002:a05:600c:190c:b0:439:65f0:c9ce with SMTP id 5b1f17b1804b1-43999ddac3bmr56294315e9.25.1740045465860; Thu, 20 Feb 2025 01:57:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1740045465; cv=none; d=google.com; s=arc-20240605; b=ALmHJgq3bDqCKDbCW1zK90uEha603frlipzFCUUWdeKwP+ajbX65xWrTjb8QGASWxV j4TBO8d5kyMa0GVyNW9ewzxiZYbafsX4PRXCJe4b2GExly2A/P+u1eQecXMNDNLHHIea tX6PTod1n6Fp/5MehkF1g6fpqJKnbTTW09/A8bx/YsSwlry4Kqfu7yfjC0vpJ+6pke6F kmdjczGBe3Fe1a7UfT1IBDf/a+gryiv2BpNrrsvsSIO9mvvZj8pqkgVAKgmPAlkkwVF1 UXSJ+mUUQUL2eke6FdR9hUdkObZMbwh+uPZqPSBP8F/f8HwORK8cIzU9weNnvPKzcXnO zWXw== 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=BgI+EHX2Bs/W1uLFtLPcFiQ5PrBF/09lep+WySI1m8c=; fh=2HGKihHUAicyV3F+aHiaoPpwvqWA0zlC04Ew6QaQoEg=; b=T6ol4DW/XGEjMhuY52+x2ovks/eukBTbzdPAoisTpDM0XHyt+4JpPJOzi2pKSZWg5s MhGOJH0w9e+r3FM+c9cr+7UqF0RlEQ4OOuntsZTUHp8O7QX3jIk5KY8NkTbeBt8qF2mW 9fCYby7ePM/Hd/3P8GT/hMgnMCgT2Tyg6+lDdqw5uXQnZJCVRoRlosKlULjSKsK9WaXo dEH2nM1lOLrmmVxTS/qa0iHT1QSQ/JeIuUKLnMYkGl7FEM6bjdXN0FfG63keZbKlDmxJ 71KrdTrMRRmUquvJpQ6U2bdPgHw2tFT8yuo1DBtMFeEfNucMX2vBX7SJSoeWxkgJC3/R vnwA==; 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 5b1f17b1804b1-4398adc8c58si52589255e9.6.2025.02.20.01.57.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Feb 2025 01:57:45 -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 4EC2480F84; Thu, 20 Feb 2025 10:57:32 +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 5EC5D80F84; Thu, 20 Feb 2025 10:57:31 +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_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_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 486B880077 for ; Thu, 20 Feb 2025 10:57:29 +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 D27251BB0; Thu, 20 Feb 2025 01:57:46 -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 1EC863F59E; Thu, 20 Feb 2025 01:57:25 -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 v2 2/6] lmb: handle scenario of encompassing overlap Date: Thu, 20 Feb 2025 15:26:50 +0530 Message-Id: <20250220095654.121634-3-sughosh.ganu@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250220095654.121634-1-sughosh.ganu@linaro.org> References: <20250220095654.121634-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 V1: * Use lmb_resize_regions() to fix the overlap instead of lmb_fix_over_lap_regions(). * Remove the now superfluous lmb_fix_over_lap_regions(). Note: To be applied after an A-b/R-b/T-b from the original author of lmb_fix_over_lap_regions(). lib/lmb.c | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/lib/lmb.c b/lib/lmb.c index d7d2c8c6dfd..207f059ceb9 100644 --- a/lib/lmb.c +++ b/lib/lmb.c @@ -100,25 +100,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) @@ -239,8 +220,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++; } }