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 C95EFC83F1A for ; Fri, 18 Jul 2025 02:17:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 466306B00AE; Thu, 17 Jul 2025 22:17:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4162D6B00B1; Thu, 17 Jul 2025 22:17:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 305426B00B2; Thu, 17 Jul 2025 22:17: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 1EDC56B00AE for ; Thu, 17 Jul 2025 22:17:01 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id DD4B81D9646 for ; Fri, 18 Jul 2025 02:17:00 +0000 (UTC) X-FDA: 83675772600.23.B0EB536 Received: from mail-pf1-f179.google.com (mail-pf1-f179.google.com [209.85.210.179]) by imf29.hostedemail.com (Postfix) with ESMTP id 0FD83120002 for ; Fri, 18 Jul 2025 02:16:58 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="TUpdlLE/"; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf29.hostedemail.com: domain of alexei.starovoitov@gmail.com designates 209.85.210.179 as permitted sender) smtp.mailfrom=alexei.starovoitov@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752805019; a=rsa-sha256; cv=none; b=N4nX0qhY+FOr7bzXh6VzDW5Kb5H6QGNd3adDD/8UTLLw/Po2UwMg01es4F8IKL5OhB4Csb yCfNFh0eHjUkFMwqwD+sDubbPVO4OcdRUbH+2es3tFEUGr0sMePXnU9PCYLx+ZEO50VDKW EFJWbcrOA181wczUqU/ryRegMtxEdvg= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="TUpdlLE/"; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf29.hostedemail.com: domain of alexei.starovoitov@gmail.com designates 209.85.210.179 as permitted sender) smtp.mailfrom=alexei.starovoitov@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752805019; 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=ZuA/XIiS/PtBSaJOIUt5hu5AZg5850snKe3VMWy5DuQ=; b=V07W3BSkRnD83k/qCn+QEz3zC0HH3T+uk8R2iYNXay0s85b4RL61lRrY318AcfE8M6iIgf U7snY6zFvXRnTiU91DjQNfznM1nPCl3tkDRgvZYDZRuH7Mr/qG16XO83K9zgjlq8FygNi4 vvt7xVPkLP5h/+DtufqZsaQ/UeAknqo= Received: by mail-pf1-f179.google.com with SMTP id d2e1a72fcca58-748d982e97cso1502889b3a.1 for ; Thu, 17 Jul 2025 19:16:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752805018; x=1753409818; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ZuA/XIiS/PtBSaJOIUt5hu5AZg5850snKe3VMWy5DuQ=; b=TUpdlLE/1ivhPH5MO7Z+VS2RPO3mo4M+od+UjoKumSBZ3PZIEemLxBXvAQwB6ppK+B UVX11Eu2OEBbSwql6bHc5Jr1KtZ+1sbq8Q3oj+1QLc8c+oQz0n2hRJ1NU/bww/l5dKnL a9vowjMPAmDeK8YlrhQaGgxu3kZrK6PtFSb4vUiRh92vVL26uL4dKNwzA8JUkgvmGYpm BbGhCA58TSR3v5feND7ginn6BSuX/+iEHCPrn1n6K8j029rd5AQwygD2v3ECj3q5PbjU 4/iuALmUMvQYEmae/Jgx4xbfHLAtsKvJvdpOZ7uE+ay2LjnTPOC0HEU1k11lW3RJhrDY bqNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752805018; x=1753409818; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ZuA/XIiS/PtBSaJOIUt5hu5AZg5850snKe3VMWy5DuQ=; b=l5PLO9d4cyvlg0VZcxQFiWpDXLRckTYZwPN+Qo3QYEnxZ60tlc80zGxO1ThY/2w152 U+kWF+XGTyYnxuPd2utjXhJsGvbTJ7+rUfK17/zqtuONG4WtCIul7B+/bLqzWetsijP7 g98Xfht1sq4WT/iI+0BnsgEzAPLjE9Sxg++/xNXKsMkkzOIRXUiN+kHWtF6jGI8LcGjd AIKL5JJI3p0rpok1fVTUhBmu75x+9/CmH2qIO1OI07EXSBq5o5IFDvVJnaLok4zHqq4b TRJGnNh/OtcO5veHh6jEYVK8TNbzNg/jwawJrTENMS59lFhINuH8aRDxONVylVnbZq4k Gt6A== X-Forwarded-Encrypted: i=1; AJvYcCVmiw5s5tW3U2FL/DcsrHrcfHFBgFC3QHV00PoyPOtvfXbKWOmjhyYGe0QxqQwRQCHCTFqBuInhUw==@kvack.org X-Gm-Message-State: AOJu0Yyo0YdBShv+pKcsi+QQH6rLlH8ao3qNm4ImvwjIsbCk5JIpddDJ 1iZ2hBnrLg2o4x40z9LZ7Op5dbXRnwhJgltJ/YhiiyZx68ozQH8bPxKG X-Gm-Gg: ASbGncvV8CPg8stzCTATiIR059JPgavN9m39DvbhP7WQD4aFggpqQEA3drhyvF4WIWm R3h84j4IPOi9VrrSlvVq39UTjPc2UDKkw8IyVXJm4fnCraAyW95THXs0zBZrIznOeENdtAM/OqK PDEQ2zyLoi/Jo2eaD7JQb2q0Cmruk2K2CqOPzsx9VHYYyQYr7wXSc88ZlBCtaaftY6YXlljLtgn zcCv9gjm7Oy4tSMPTh3TJo+ywxh/ljYTFQCgHb99LJ0uVZHhExc813wRl6FW3+RjYV94wrjJsxb Mf7eom9rLK7KBlM8BgmEqbxgtmhebgDBkf4AfmmalC7jdEmbMbg4filvOV+Ghi9BrgfO/lUBSAn xIgZPiTCdbhFkeaw/3DCpq9DM2CRMdE1FSyAsskEaxufEvgH298nI0TaU8BL4Vwg= X-Google-Smtp-Source: AGHT+IHFD95keE/9He7L+EbnGEIuvPADjxInNCQJsechooxa8qLKnunVikIclaiznhdQ84GlfqEaCA== X-Received: by 2002:a05:6300:6199:b0:232:9550:128f with SMTP id adf61e73a8af0-23813237521mr13770813637.36.1752805017855; Thu, 17 Jul 2025 19:16:57 -0700 (PDT) Received: from localhost.localdomain ([2001:558:600a:7:a83d:600f:32cc:235a]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b3f2fe8bf2csm314930a12.17.2025.07.17.19.16.56 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Thu, 17 Jul 2025 19:16:57 -0700 (PDT) From: Alexei Starovoitov To: bpf@vger.kernel.org, linux-mm@kvack.org Cc: vbabka@suse.cz, harry.yoo@oracle.com, shakeel.butt@linux.dev, mhocko@suse.com, bigeasy@linutronix.de, andrii@kernel.org, memxor@gmail.com, akpm@linux-foundation.org, peterz@infradead.org, rostedt@goodmis.org, hannes@cmpxchg.org Subject: [PATCH v4 3/6] mm: Allow GFP_ACCOUNT to be used in alloc_pages_nolock(). Date: Thu, 17 Jul 2025 19:16:43 -0700 Message-Id: <20250718021646.73353-4-alexei.starovoitov@gmail.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20250718021646.73353-1-alexei.starovoitov@gmail.com> References: <20250718021646.73353-1-alexei.starovoitov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 0FD83120002 X-Stat-Signature: an6cpo1n3xujqicmmpf7ztc3xdo81k1y X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1752805018-931830 X-HE-Meta: U2FsdGVkX18zyV4AQCp5vVuDG1SOpVfUl4DIYzlsadvF4fJs9HmTaeP14Bd2nQQelcdl0Qg770l2CyP+TGYM/LPZsiOXBxw+/8rxF9HDhEvO8EhjPRfXQvni66hYR97mcxJoeYIzg8SWLamWU7KDnz6mWF4K2J8RnAtStSvcQHf17ZAcFurUUZcZCwNW5wY6Ib+St2ZK2/K7h3CTt23LPCGW45vyDHj5baDASuYF9TTaB+Sy0KXRgkQj3ZL/GcLPKJxTStODqa+qeRSjqALVY3L4QVgNDS1uyH5Jq6HrC/2cIEPJAyqTLDE3YfA7cjpGk6OFs5xrLeuvqmajQwJESrcDtqr7jNW+tUC7l2J7vr6Ea9hAwMsgxuQlxQx4r5uNcklQoqjiwDB23gq3mPUgzBEYAujFXw/ce86wQstnM/30YOI3wBGlK6i4PG5XAjXTE3wNBwxgbzUcfCJ8skqSJUJLcHznpNpXcIWEyBI/gyUblh29TL0v76FkLERHhWGBIQc6GfCkbyHCS1oWn1Jp/woNKfZhfrrYcaGsHGCtXqe7MbE4hR2tjfBV8d+lK+OMZ5ISw2qZK3rqN1Z3w6/spUZmLuKmH9Q4YfgVtqQ5R19eQcjNabaajwXFapOlMZFqJe6FLQ4CaK1XFQo/dWOzAdCtsPg7OGU/F1h6S3u4O/6dWovKJc2TsdmfZ30gT6c4a/Wr+1KdUYGzmfrC1CRlglS8ZqScMo4qDwgCqRdgfMdqyyk0yvqoWCD9R9KcLhUyD2ks31ncqWFQQcOKlYm07ghXqMBX2FO8SHnzMsHZ3i3o0WB8wULgh9bXwhJm9DAEzlGkzt25Ug+IOfSn5+yBlSDPMh0hIP3DVXjQJKzHbb/44BvAXPw5kzzoEpHqb7ii+Ue1HnAxgzv1wd0+WKnkhZAqz+Ti+ySncGfwV1SKWc6nmJsgcaD6m2FEFGGkIhJli+IaRG0ejD6wCFDToXf xD5Hic7w kwfhpO8zhrFSK2uPAJyZ+Ks6TOp4lBKFrSGfqZTDrYXJhsiG3/f31E5PqOpqlFnEbqt4W3N89rg5zkWLClVXRP0jdLrknlBG2S/fezyw5ZV8dAIQEU8Phobk7f7AhUiJ8F9Z6hBQX2Qe4NM0Z77+YBjP2Hw69WwG6hacaPsLW+/Y11/lvi5RNb+b+we07P6LZoswz0l3rxNB7M/ZBEQuhkKVMXPOn+yNyZmC9mPphp3XlMtHy4kmuIUAMt78JiMl1rOpVIp17//HhoeKDpcBBoaqhp4cel9m28tWH6QKyASVEZ9cTMgHjMxFcGrXCnyCmmuw2jzND2sH1mYEhea8LIY1z2V8XNozANvqzBdtYMNSZXbFqR5HwRfalSOOjSZN6eZhF1HUjBzuphxzoy8dnBH7QK0xFtzKHPUYwILLV9etx2I2PrOtC5crf+KdSh8m88zF4XZg6f2wtxXL6LDNUNgDRYw9O2UNwrshafaZVLcV7t07MuZpKx19wBhuXnZKvDZ1PHddLXSoyLh/oFV2QHWt1c2lyExwtQNjnapov+Zrus7vXrm3BhgS8DxGHvM+Xxaf/ 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: Alexei Starovoitov Change alloc_pages_nolock() to default to __GFP_COMP when allocating pages, since upcoming reentrant alloc_slab_page() needs __GFP_COMP. Also allow __GFP_ACCOUNT flag to be specified, since BPF infra needs __GFP_ACCOUNT. Reviewed-by: Vlastimil Babka Signed-off-by: Alexei Starovoitov --- include/linux/gfp.h | 2 +- kernel/bpf/syscall.c | 2 +- mm/page_alloc.c | 10 ++++++---- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/include/linux/gfp.h b/include/linux/gfp.h index 5ebf26fcdcfa..0ceb4e09306c 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h @@ -354,7 +354,7 @@ static inline struct page *alloc_page_vma_noprof(gfp_t gfp, } #define alloc_page_vma(...) alloc_hooks(alloc_page_vma_noprof(__VA_ARGS__)) -struct page *alloc_pages_nolock_noprof(int nid, unsigned int order); +struct page *alloc_pages_nolock_noprof(gfp_t gfp_flags, int nid, unsigned int order); #define alloc_pages_nolock(...) alloc_hooks(alloc_pages_nolock_noprof(__VA_ARGS__)) extern unsigned long get_free_pages_noprof(gfp_t gfp_mask, unsigned int order); diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index dd5304c6ac3c..eb9b6c4c10e9 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c @@ -579,7 +579,7 @@ static bool can_alloc_pages(void) static struct page *__bpf_alloc_page(int nid) { if (!can_alloc_pages()) - return alloc_pages_nolock(nid, 0); + return alloc_pages_nolock(__GFP_ACCOUNT, nid, 0); return alloc_pages_node(nid, GFP_KERNEL | __GFP_ZERO | __GFP_ACCOUNT diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 78ddf1d43c6c..148945f0b667 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -7506,6 +7506,7 @@ static bool __free_unaccepted(struct page *page) /** * alloc_pages_nolock - opportunistic reentrant allocation from any context + * @gfp_flags: GFP flags. Only __GFP_ACCOUNT allowed. * @nid: node to allocate from * @order: allocation order size * @@ -7519,7 +7520,7 @@ static bool __free_unaccepted(struct page *page) * Return: allocated page or NULL on failure. NULL does not mean EBUSY or EAGAIN. * It means ENOMEM. There is no reason to call it again and expect !NULL. */ -struct page *alloc_pages_nolock_noprof(int nid, unsigned int order) +struct page *alloc_pages_nolock_noprof(gfp_t gfp_flags, int nid, unsigned int order) { /* * Do not specify __GFP_DIRECT_RECLAIM, since direct claim is not allowed. @@ -7541,12 +7542,13 @@ struct page *alloc_pages_nolock_noprof(int nid, unsigned int order) * specify it here to highlight that alloc_pages_nolock() * doesn't want to deplete reserves. */ - gfp_t alloc_gfp = __GFP_NOWARN | __GFP_ZERO | __GFP_NOMEMALLOC - | __GFP_ACCOUNT; + gfp_t alloc_gfp = __GFP_NOWARN | __GFP_ZERO | __GFP_NOMEMALLOC | __GFP_COMP + | gfp_flags; unsigned int alloc_flags = ALLOC_TRYLOCK; struct alloc_context ac = { }; struct page *page; + VM_WARN_ON_ONCE(gfp_flags & ~__GFP_ACCOUNT); /* * In PREEMPT_RT spin_trylock() will call raw_spin_lock() which is * unsafe in NMI. If spin_trylock() is called from hard IRQ the current @@ -7584,7 +7586,7 @@ struct page *alloc_pages_nolock_noprof(int nid, unsigned int order) if (page) set_page_refcounted(page); - if (memcg_kmem_online() && page && + if (memcg_kmem_online() && page && (gfp_flags & __GFP_ACCOUNT) && unlikely(__memcg_kmem_charge_page(page, alloc_gfp, order) != 0)) { free_pages_nolock(page, order); page = NULL; -- 2.47.1