From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 427B5C77B7C for ; Wed, 2 Jul 2025 17:36:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D983A6B00BC; Wed, 2 Jul 2025 13:36:24 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D6F3D6B00BD; Wed, 2 Jul 2025 13:36:24 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CAC6F6B00BE; Wed, 2 Jul 2025 13:36:24 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id BAEF46B00BC for ; Wed, 2 Jul 2025 13:36:24 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id E2702803AA for ; Wed, 2 Jul 2025 17:36:22 +0000 (UTC) X-FDA: 83620028604.20.3955BBC Received: from tor.source.kernel.org (tor.source.kernel.org [172.105.4.254]) by imf29.hostedemail.com (Postfix) with ESMTP id 5465012000A for ; Wed, 2 Jul 2025 17:36:21 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=vQleZpGg; spf=pass (imf29.hostedemail.com: domain of rppt@kernel.org designates 172.105.4.254 as permitted sender) smtp.mailfrom=rppt@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751477781; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=sjhJLum0O2OZFeYsn8aXUqNKKqr2IVmQ4r9hW3Xod8g=; b=w4noTdzAcU0QoI7yE9S7yTJUuZA+5Z5RZTSxNLFaOrhEfLhVuP1QCQcwfaFFfkbeQCb1qW +z+apUnxgZ+QGN06Z67YoFGz8Ew/a4PPqw/n1SszRyp1bn+aLVBpe+3Uf4AjQBRKNmESWX zfL86GLSjs0v6JZZL0abJn+hO9kyp2M= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751477781; a=rsa-sha256; cv=none; b=c0npx8DieMbMhRzLUR0rGNIHArUhZUMvgpE6XA0fn5QoCo7d4iH1505lq9JSGj3yCyXtxz PThtIfjPvgShmYfbT+BjrzpWKBx7kHjAFVMT3BzzfbcflIhDq0+qjEcDJ1Cyntl3qTkU2n B0loANHhwdnXTmOBsam4mYNk2QIhTh0= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=vQleZpGg; spf=pass (imf29.hostedemail.com: domain of rppt@kernel.org designates 172.105.4.254 as permitted sender) smtp.mailfrom=rppt@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id 9452961120; Wed, 2 Jul 2025 17:36:20 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2A365C4CEEE; Wed, 2 Jul 2025 17:36:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1751477780; bh=NqKk8ngarG6g3EyeYQKPZPq7rwSgnU5mnxeVmbW10t0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vQleZpGgNy3mRTy5dbm9tOQSQllRNd7C7MW0izMjJH9NSe7mbO92fQJ0qQUrNG2R2 2dIWbQ1ryYr6OTjjqOP5P3arqEyF2pAUeb1rHo+D1daavMkQN2y7kXt/V9IBRCneJY XRE7FNsbSaTMWKkw15gykIINHiFYjQ6TEjSLcBUS4TVVcGMjBKE/VnrzrJ5iABejga +4QMO6t9+bbz4kDf9Kqt00H7L3dEOFkyjj4DuZYQsGl6oSHR97tFHEBZLTzCnrBzA+ zKP74NX5aLNUqsRFVdYFODDbnG27smcrw3eGree46NKcn5WyuA+5aAhuK5cFuhMBi+ n4oL+U2o1vUqg== From: Mike Rapoport To: Andrew Morton Cc: Alexandre Ghiti , David Hildenbrand , Mike Rapoport , Oscar Salvador , Pratyush Yadav , linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 3/3] cma: move allocation from HIGHMEM to a helper function Date: Wed, 2 Jul 2025 20:36:05 +0300 Message-ID: <20250702173605.2198924-4-rppt@kernel.org> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250702173605.2198924-1-rppt@kernel.org> References: <20250702173605.2198924-1-rppt@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 5465012000A X-Stat-Signature: 5uuamk7x8y4r1bp1s8xup1r4n14um3ef X-Rspam-User: X-HE-Tag: 1751477781-845678 X-HE-Meta: U2FsdGVkX19ffoA21L0zcwluu37C+MzYpyCW8BghqmY9VrpK9sjW8ZDnK0al8J7+OO9IDl3GDnCe6PqVNfnKDXa+Wk0/mjKTCiN/HzB7cSLoFCha8rx7FIuVf84Ly3kGaT66LNa68CnWDQOFooKzoT+hW59uYrSXy/48BivuO/rGA+hwNrURdw9R2eSZmmChl5GRkIOTirZeYVLr38Vkc+efZibEIJGk9/eXR/Ay2lJq4qM1+x/+gLkghsNSNav9ihdDW7FLln/ussh2TMsVAXTMHu4d5oyVgIPrG2PmCeA1wSNHIVj3A8QwxnTGEEzYfnqC9LG9m4FWeTIVJt8xKT4qTFgaKD/fzT69yxKWsZL93Zlk03dJUPSTFuywida530iE94rVPxMvQi10hcBXNq1m3Si68JoW5XEYbP4uZ7xVSYOJ2q/xZuexFjtxJsY+jB9nvZsxysu38koyIDNcFsVDve3bs/RMVuPlAQ/uxlZJn4ZHv0CL/7kJ/dSyT96dKcpqUsDbiWVJlJui+U7HQna5QZvnAjZc8lEhKWmaCdLCCTTagQFOUZ69aS81a98rrnGV45pwdMvHR+wIsOOMPRxfBecv+Pbav0Nbv0VZRg2nx3n4LMdL6mJU3UW1LSZ93Ig7g+4f1SNg9nD5RLlANxbPL93knv2o4LxLsRqw7mOt3rotXGnATdVjMaYX3TzeA+GdnKW7/fzWfrJeTL3//Pe6Jenj5v9gKD8A2skw97C7EHONNRRHDX4qECoBc8/LmyXLflv6bwFwWmmFB74NBfmnFBDZs4fvcYfGP9mFkSvrP3RVQw1naO5tCeM6G+UaQQxyVwHjNXiohBjK4roSRY1yofhFCeVc7Dig6hPEgfQVYhBq5+J7xeWjxYfiAyEYJqjD8nuqNmTxeZAbwVTSAWlCGUwkBQCXBHJEFJcwhkRfOeSlTb5EurjHDkeUyFVS8IdYGeRZUIlHQ0JJsja FwapISHN 4ICws4VONTdLmYVeNYO4dKRgZ4UyQ6nIMO/yAaRvDmSjiSSfVOJ6/o0qcR6hfuBP4ZSDxoDvisPb95NIOeHCeXKUqFPa9Qx4IVwSTFEndZLc6x2u7Q1rO0TSPnAOdZUwwDo4+O1dK0NovZolfsebVjGWWLqJO+1ZerXhLPEEf4atzvHh0jFXqr13sOlkeJ4paLUxib3NKfYZzavoKD4nxWMQa0lPxZ3BJoLoKXmlXhyOg9s4zKiVoFqiK96kXVAHZHszMgRvyzzEVeuU= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: "Mike Rapoport (Microsoft)" When CONFIG_HIGMEM is enabled, __cma_declare_contiguous_nid() first tries to allocate the area from HIGHMEM and if that fails it falls back to allocation from low memory. Split allocation from HIGMEM into a helper function to further decouple logic related to CONFIG_HIGHMEM. Signed-off-by: Mike Rapoport (Microsoft) --- mm/cma.c | 52 +++++++++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/mm/cma.c b/mm/cma.c index 1df8ff312d99..0a24c46f3296 100644 --- a/mm/cma.c +++ b/mm/cma.c @@ -376,6 +376,30 @@ static int __init cma_fixed_reserve(phys_addr_t base, phys_addr_t size) return 0; } +static phys_addr_t __init cma_alloc_highmem(phys_addr_t base, phys_addr_t size, + phys_addr_t align, phys_addr_t *limit, int nid) +{ + phys_addr_t addr = 0; + + if (IS_ENABLED(CONFIG_HIGHMEM)) { + phys_addr_t highmem = __pa(high_memory - 1) + 1; + + /* + * All pages in the reserved area must come from the same zone. + * If the requested region crosses the low/high memory boundary, + * try allocating from high memory first and fall back to low + * memory in case of failure. + */ + if (base < highmem && *limit > highmem) { + addr = memblock_alloc_range_nid(size, align, highmem, + *limit, nid, true); + *limit = highmem; + } + } + + return addr; +} + static int __init __cma_declare_contiguous_nid(phys_addr_t *basep, phys_addr_t size, phys_addr_t limit, phys_addr_t alignment, unsigned int order_per_bit, @@ -383,19 +407,9 @@ static int __init __cma_declare_contiguous_nid(phys_addr_t *basep, int nid) { phys_addr_t memblock_end = memblock_end_of_DRAM(); - phys_addr_t highmem_start, base = *basep; + phys_addr_t base = *basep; int ret; - /* - * We can't use __pa(high_memory) directly, since high_memory - * isn't a valid direct map VA, and DEBUG_VIRTUAL will (validly) - * complain. Find the boundary by adding one to the last valid - * address. - */ - if (IS_ENABLED(CONFIG_HIGHMEM)) - highmem_start = __pa(high_memory - 1) + 1; - else - highmem_start = memblock_end_of_DRAM(); pr_debug("%s(size %pa, base %pa, limit %pa alignment %pa)\n", __func__, &size, &base, &limit, &alignment); @@ -472,18 +486,10 @@ static int __init __cma_declare_contiguous_nid(phys_addr_t *basep, } #endif - /* - * All pages in the reserved area must come from the same zone. - * If the requested region crosses the low/high memory boundary, - * try allocating from high memory first and fall back to low - * memory in case of failure. - */ - if (!addr && base < highmem_start && limit > highmem_start) { - addr = memblock_alloc_range_nid(size, alignment, - highmem_start, limit, nid, true); - limit = highmem_start; - } - + /* On systems with HIGHMEM try allocating from there first */ + if (!addr) + addr = cma_alloc_highmem(base, size, alignment, &limit, + nid); if (!addr) { addr = memblock_alloc_range_nid(size, alignment, base, limit, nid, true); -- 2.47.2