From patchwork Mon Apr 15 14:24:48 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: DaeRo Lee X-Patchwork-Id: 13630118 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 94D8EC4345F for ; Mon, 15 Apr 2024 14:25:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CDD4C6B0088; Mon, 15 Apr 2024 10:25:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CB4416B0089; Mon, 15 Apr 2024 10:25:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B7C0E6B008A; Mon, 15 Apr 2024 10:25:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 9971B6B0088 for ; Mon, 15 Apr 2024 10:25:01 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 1CDB614069D for ; Mon, 15 Apr 2024 14:25:01 +0000 (UTC) X-FDA: 82011988002.07.C267015 Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) by imf09.hostedemail.com (Postfix) with ESMTP id 4E88914000E for ; Mon, 15 Apr 2024 14:24:59 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=LOaAGvlZ; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf09.hostedemail.com: domain of skseofh@gmail.com designates 209.85.210.175 as permitted sender) smtp.mailfrom=skseofh@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1713191099; 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:references:dkim-signature; bh=SwI3ikGV8bbQKlQb5tgKDZE5mmiKSYxR+j/zmva83hc=; b=m7jg+2u1cfJ7MujhSg57ffELPsGqqDbCAYMOrjTWVSDdjurkeXhBrCvKXTT/BFRLQhIAD2 /GcM0J+B0XopXtlQzxKJZhxwKYYdjgNoo4AtPiecX7x0sYgZ2CRZFHiyLI4FQab2zzPR00 V4jwTN1E2NWaQeuQhCNnwHUFlcDeQ2Q= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=LOaAGvlZ; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf09.hostedemail.com: domain of skseofh@gmail.com designates 209.85.210.175 as permitted sender) smtp.mailfrom=skseofh@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1713191099; a=rsa-sha256; cv=none; b=zXLL+rNN+9u479IGG71Ru4oPceVGmTazxGaP3CSnOs2egUos69xElzqNX4zZP9/RXZydbn T1coU8LJur9tg+fIxb8QsAPGWtRZgfktGJOrIpTeVgI+d7Pn5Z9WXkDySBaFSa8blouFjz aA782DZTeN7JxkNUUO5zBFLHLybSZBY= Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-6f00f24f761so447850b3a.3 for ; Mon, 15 Apr 2024 07:24:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713191098; x=1713795898; darn=kvack.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=SwI3ikGV8bbQKlQb5tgKDZE5mmiKSYxR+j/zmva83hc=; b=LOaAGvlZIqZ0k9JnZGZY13vjgGzSjEMCRsN20wn78nhdCuSUQuBjO9TX5pjjqsxo86 xZLNZtMqLHN1YnMNz328ErETu493CKx6GMPEuwSNglXj+l3bl8T29QqYN6Yyx8yRDtxX gfXmifquA6Rwvj4gur6+gW6eXIQbxbHqDtC0bXhacJR3r+0vPU5tCKXPOnhqIlFWbxYX iq8xqpZ/nmqqozy78+o5cWqpz1dEvzpUPiHQkfVRHYr8fUuMUS3DUez7kMy+Ob+OhoAy O/U32tjcHq3sB74GJWwv1gqWKAxGfqFeeUrg18w5GIGgFhp8NwUmAvPTyPJs8hwrgulA nMIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713191098; x=1713795898; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=SwI3ikGV8bbQKlQb5tgKDZE5mmiKSYxR+j/zmva83hc=; b=itEQJ/l369hHmzaxGZ8IiDq8JF7+/F8sibhbExZIp482kAaH89WFQs3IeBt4iL5nmk yjpyhDQogzAvuJqgv9HxTZNsNtvIOTSbImYjgK9k9U6LjfnvXBpgcRY805xFK4g+iN2n A9Gnn7nJmnb+NbRO3aqJvha1NELq4IUvXNISlz5MDWr+Met325rfMlvNs0qLAH1GXGur louZ229AyozgsjUuOQAhSqEnikPicX6Mjn+T0IHo9vllEnQ/hqDtI1X6Wv4XykgOZsfO VNQhXyYtKVH5ZBHMpyupdKh4r/4MFGLUZqL9gbF2b+SsSzKcnxZ/UADPB2VhN19YuFSS vGSA== X-Forwarded-Encrypted: i=1; AJvYcCXPAkA4Smlq18/CDnNCkVJkr0pLyS7gfTH5erYzn5HtbkuQKTROSdPFPWQ0P6ULue+4un+Y5mRQclVbtbDovUItkE0= X-Gm-Message-State: AOJu0YwO/c+7awLTdXb8EiBqTJkU7njsuM2K7Y8m7HgcJbr3ZnzR8bF0 GfXG4RDlkZJTwimRoUHLAG/CVBNzbTv/SAsX262ep/BUcFDK2CZA X-Google-Smtp-Source: AGHT+IFsQN+LB3mh/jEm1d2fe5hkLQN7T98rFJzdJ4KZHRIWX8LGoqxdqu605fUCbmTPQ9gXCq2dDw== X-Received: by 2002:a05:6a20:6a20:b0:1a9:22b9:754a with SMTP id p32-20020a056a206a2000b001a922b9754amr10200952pzk.7.1713191095575; Mon, 15 Apr 2024 07:24:55 -0700 (PDT) Received: from localhost.localdomain ([49.142.40.215]) by smtp.gmail.com with ESMTPSA id x13-20020aa784cd000000b006ea81423c65sm482906pfn.148.2024.04.15.07.24.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Apr 2024 07:24:55 -0700 (PDT) From: skseofh@gmail.com To: robh@kernel.org, saravanak@google.com, rppt@kernel.org, akpm@linux-foundation.org Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Daero Lee Subject: [PATCH] memblock: add no-map alloc functions Date: Mon, 15 Apr 2024 23:24:48 +0900 Message-Id: <20240415142448.333271-1-skseofh@gmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-Rspam-User: X-Stat-Signature: f1n1emizucqqwrye7demez5jdzxdnwod X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 4E88914000E X-HE-Tag: 1713191099-163440 X-HE-Meta: U2FsdGVkX1/yqU859K6uTW4+WXiSTgeuR0//INIlmEROxWD6dmybP8aQU4Vckgl4VROrFb9lE4lwjIvn3AMAqojKxlATQH+JHwZ9xjOiqKlLjIjmZ8MrZKs06J2V7caQyKiD+P6l7fOkCP85RVS65aKt0oAmVSUjIh5di/QPLJyX1q0ocWQdaCFp+3Ng2TKyr/SSb8CJRi8IJNixeofjdw0q3IbOa132AB4hX5g1eDSky104/aq3I8F+AEtpSKwowgDN8N3d+22vGBAsO0RkukltkwXdZWZSPj3wBMQ5gQXjoEqU2fC+PH/2/sm1c/oS2m002MfNG10rmq2rFJIi9QVVnAVXcTglFn++9cdA3cy2yoSdeKygQ8ezJYLYDjdCK1DWrhhNsrbo7WzZhMpoQGha1avHhRqlENnrmZflUmXjqfF9X9Z2F0uXw8DOD+ptnDA5HebxoNIhAQOeTkxmsssY/FJ1+DoV9jVlG9PoBPEUwsFmGfXPa4+VtHmOPcoL1zxHbSOLS6FOfUEe66wXCx2QyutgQkPn8xsXsdcfW94AAkTsisodcQ/ShLGh8dxyTC3lxEJjY/qfQNs64PYhKBk0U3osc90ZAvl7pWyPD+oC6YtfYGAD2xhSwyGEdvtnfmO15s0cEh2km3NAF63U4grnC9AbHubwrWVTm43M838OV0KVEXP9Rz/Q7rJwwrL4ZpHFLmbqvBsijGMr2G0MKIg8dP+XfMIR0C9n5Ek0asC/U7ADHyXU46xPn31RhTxlZVCnBgcgiygbWFyin6SQssEpaWsZP1HfRhj7n2CNmkC7V51l9EyXnGKQUu3Qlsc2QJJAs7f3FGc62/D2vtxqdV1q5jeOXluOI9QSX5BjB16Lz3ODPXUdkRzhrChSXIwAY6LT/BJO7CqNwzextuSB5hpILDv3OMnamcho/ADN3EoKg0fz2cZElsVMf8U82pL71DRNgkQaCSd7oy4qZ7F IB4efSqm rNa55/Fe/rXQDkPS7BanvvaNrdN/zStnfRyBQczlUSXVZq/GCAeLWnKzaTllXrW7tbOl5j2YjrOXUdQER2g26XH3uuIScI6wpYD18Ovcaxgu2uiIOA34UuFrdBK+SYR2V27i5ypRt/JSiPyUSgU9Uey7BwxEFkt73+0q9GK5oK3dt+9hfBddpdT0G5VX3N1YvWKULAE9DGT9+X0GoCiGRRxbhmXKZ1YoIcrlFIhRKGK8WjiIwdiSKZ5mCYSrfDUciDOmaRRlGMqYq2hhiYRKs0xhhKkGBRSn0XeW0jXKsh0ix7wNABigNy+SyYRvEHmKIMXuxUtGb2v6ivhHU5X29Fa0s9EN0TDy3Qc8cAJDmmgp8JPA/VfltfNwcBrafMSUT4iuFUY6iwmhuxdql9M06nd3SPyQQpjN8FA8H0nEVwA/YRzoKzRo6nVzbtfmcSCYKFfgr 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: Daero Lee Like reserved-memory with the no-map property, there are memory regions need to be allocated in memblock.memory marked with the MEMBLOCK_NOMAP flag, but sholud not be allocated in memblock.reserved. So, functions were added that find the required memory area in memblock.memory, but do not allocate it to memblock.reserved. The early_init_dt_alloc_reserved_memory_arch function was modified using the no-map alloc function. Signed-off-by: Daero Lee --- drivers/of/of_reserved_mem.c | 9 +++-- mm/memblock.c | 78 ++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 3 deletions(-) diff --git a/drivers/of/of_reserved_mem.c b/drivers/of/of_reserved_mem.c index 8236ecae2953..504f2f60689c 100644 --- a/drivers/of/of_reserved_mem.c +++ b/drivers/of/of_reserved_mem.c @@ -40,15 +40,18 @@ static int __init early_init_dt_alloc_reserved_memory_arch(phys_addr_t size, end = !end ? MEMBLOCK_ALLOC_ANYWHERE : end; align = !align ? SMP_CACHE_BYTES : align; - base = memblock_phys_alloc_range(size, align, start, end); + if (nomap) { + base = memblock_phys_alloc_range_nomap(size, align, start, end); + } else { + base = memblock_phys_alloc_range(size, align, start, end); + } + if (!base) return -ENOMEM; *res_base = base; if (nomap) { err = memblock_mark_nomap(base, size); - if (err) - memblock_phys_free(base, size); } kmemleak_ignore_phys(base); diff --git a/mm/memblock.c b/mm/memblock.c index d09136e040d3..f103f1ecbfad 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -1506,6 +1506,72 @@ phys_addr_t __init memblock_alloc_range_nid(phys_addr_t size, return found; } +phys_addr_t __init memblock_alloc_range_nid_nomap(phys_addr_t size, + phys_addr_t align, phys_addr_t start, + phys_addr_t end, int nid, + bool exact_nid) +{ + enum memblock_flags flags = choose_memblock_flags(); + phys_addr_t found; + + if (WARN_ONCE(nid == MAX_NUMNODES, "Usage of MAX_NUMNODES is deprecated. Use NUMA_NO_NODE instead\n")) + nid = NUMA_NO_NODE; + + if (!align) { + /* Can't use WARNs this early in boot on powerpc */ + dump_stack(); + align = SMP_CACHE_BYTES; + } + +again: + found = memblock_find_in_range_node(size, align, start, end, nid, + flags); + if (found) + goto done; + + if (nid != NUMA_NO_NODE && !exact_nid) { + found = memblock_find_in_range_node(size, align, start, + end, NUMA_NO_NODE, + flags); + if (found) + goto done; + } + + if (flags & MEMBLOCK_MIRROR) { + flags &= ~MEMBLOCK_MIRROR; + pr_warn_ratelimited("Could not allocate %pap bytes of mirrored memory\n", + &size); + goto again; + } + + return 0; + +done: + /* + * Skip kmemleak for those places like kasan_init() and + * early_pgtable_alloc() due to high volume. + */ + if (end != MEMBLOCK_ALLOC_NOLEAKTRACE) + /* + * Memblock allocated blocks are never reported as + * leaks. This is because many of these blocks are + * only referred via the physical address which is + * not looked up by kmemleak. + */ + kmemleak_alloc_phys(found, size, 0); + + /* + * Some Virtual Machine platforms, such as Intel TDX or AMD SEV-SNP, + * require memory to be accepted before it can be used by the + * guest. + * + * Accept the memory of the allocated buffer. + */ + accept_memory(found, found + size); + + return found; +} + /** * memblock_phys_alloc_range - allocate a memory block inside specified range * @size: size of memory block to be allocated in bytes @@ -1530,6 +1596,18 @@ phys_addr_t __init memblock_phys_alloc_range(phys_addr_t size, false); } +phys_addr_t __init memblock_phys_alloc_range_nomap(phys_addr_t size, + phys_addr_t align, + phys_addr_t start, + phys_addr_t end) +{ + memblock_dbg("%s: %llu bytes align=0x%llx from=%pa max_addr=%pa %pS\n", + __func__, (u64)size, (u64)align, &start, &end, + (void *)_RET_IP_); + return memblock_alloc_range_nid_nomap(size, align, start, end, + NUMA_NO_NODE, false); +} + /** * memblock_phys_alloc_try_nid - allocate a memory block from specified NUMA node * @size: size of memory block to be allocated in bytes