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 7B8AFC83F03 for ; Fri, 4 Jul 2025 15:25:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 707F66B02B9; Fri, 4 Jul 2025 11:25:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6B8816B02BC; Fri, 4 Jul 2025 11:25:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 559066B02BD; Fri, 4 Jul 2025 11:25:45 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 3F6F16B02B9 for ; Fri, 4 Jul 2025 11:25:45 -0400 (EDT) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 09E30104383 for ; Fri, 4 Jul 2025 15:25:45 +0000 (UTC) X-FDA: 83626957050.13.EB2E28A Received: from mail-lf1-f51.google.com (mail-lf1-f51.google.com [209.85.167.51]) by imf20.hostedemail.com (Postfix) with ESMTP id 28F541C0009 for ; Fri, 4 Jul 2025 15:25:42 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=HLXcf8rD; spf=pass (imf20.hostedemail.com: domain of urezki@gmail.com designates 209.85.167.51 as permitted sender) smtp.mailfrom=urezki@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=HLXcf8rD; spf=pass (imf20.hostedemail.com: domain of urezki@gmail.com designates 209.85.167.51 as permitted sender) smtp.mailfrom=urezki@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751642743; a=rsa-sha256; cv=none; b=s5MNVi3yqCqfztKvnNsCBrQm5qvX6W7XTqjya06lLKnxtvfd4FwdAVnbSkx0Eg+RafqW90 EXJRai/EvCao1/xzOOjNteCKkciNoEJQwiI74YkPKVjr6HZJkCFPWa5fAVVEJoO9bANtu9 VoxMl0mGeLbYpkaJDlMYhWHKAlpxUy4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751642743; 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=fwtxqi1fI8oj2HRni4fagzovQZ8CdYGC7q8FkIyF8Ac=; b=fOKwOzyw6qz3SoF5Xz+9asx1+M0dwbeZDWjPKbK64Z4ZKmT1kMmWCupC7u9Fj1/rvXcnbp q91pHjeAz3z6XrCnPd3lYojW4DFlcbnR1LGzBiIYfxVirewA304kyPuwhag9lhUZ9t4vjo 3obYIMfFan8uuuAjlkg+BBXIURt16Ls= Received: by mail-lf1-f51.google.com with SMTP id 2adb3069b0e04-553b165c80cso1053356e87.2 for ; Fri, 04 Jul 2025 08:25:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751642741; x=1752247541; 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=fwtxqi1fI8oj2HRni4fagzovQZ8CdYGC7q8FkIyF8Ac=; b=HLXcf8rDhUv4lU7VKr6TdqYmthEgGd9b/M4E/cDXAJKwrQVIViGulNU8KmYJp5nZ6L LdS0amyy9wRFrnVxDtuYEI39dDACDHaadtV1TNpU8h8XpbEUmNl5ytQxFjebmnBd7I7o tRtovB/5is76OipRP00XxmN7v4B82YKSraOXtQA2WRVZIihzKRRsBz53D+ENDIS3O21Z qYOuJ16Rm7TJS8DUof1N0etexR0ogjGB0eboUtxFrWTCrufNswDgw0wc+mMKZpO5ZStC WnzSoMmcSlqNt5Kz7LBPu838U5XDrieUtzORSFs+s1NjlWfDZSRb5YlOSyIFrHMdhcEi P1wg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751642741; x=1752247541; 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=fwtxqi1fI8oj2HRni4fagzovQZ8CdYGC7q8FkIyF8Ac=; b=j8PocZwHm5/A3XVDcLg4feiLcwBUXfm3yUvDUxI+ildxA5UJkHmfWchrN0VngWy9eO TshN4auxyrA3Ee1ADvI+ev9krPYWYmuH9+UG5BroTlV2f/pjbjFn5rRM5eTrrBbHt1ER C1xyaiO/HrIryy6LqNmp1aquGiP9JMgfLbemh2MbrGT4W3KGX62ZaJn3h6HBYJsN6S4l 4cuKnGHVt+nrnYpqqeIKtbBouV/7/yc0P7vPa/F8pIv8d1/5R3BvN6D2lCk7h3XW6wpA SzVNtNdBh5B3J3tFOA60ng70JFx/d1KbOpSGi54WmTWrjshxrj10kx6tCyOq0qajRzim QrVw== X-Gm-Message-State: AOJu0YwbeMAn8Q6V0kd/06czIcNYMYLHfO9+sfj8TPPpTcnZMfPqjDC/ fK6dfSA+3SstqLDbTUAN3rLlxmelsZXzlZyBAyEjpl/pma7efYPjJIRHvIXmUQ== X-Gm-Gg: ASbGncs7Xi94yZ8vuiCMEkYYM5YxWenUejCHJYFaXgLrOhEXksCK5BhF1NQQN2+1d/o 8jQutghkQmIXR9BGKKLqLVDVAtGt6YyOlrmq0oeQxRh7xJV+cJbBkBj405jnA8Xas4ILYiqg3oJ /KGwVRhwmTtJAlJLiwRjEYJnFIVD7g6hmgcTsywACRH1YnCrNrT3vyAp/MU2oAqEU8EyO/MnbDr 8fjny3vciLX53SCl/MaaTgggG12hxLS+sQbhvGjK5+eNhQs4pX4aewAZ9fs6mKnXNNZfMc5vPQn ioas+bBqAcs26olSai2S2BS65w/kpVfaaOnVNzrLtLeK3orXbSU50iDUww== X-Google-Smtp-Source: AGHT+IG/gMey5ORcyt8GcgwGMk7DIKpx9yC2VyClRNGtmOGQ17WBQ45cD96BcHORchuwDkahDEY86w== X-Received: by 2002:a05:6512:31ce:b0:553:aa32:4106 with SMTP id 2adb3069b0e04-556dc83e46fmr843287e87.23.1751642741156; Fri, 04 Jul 2025 08:25:41 -0700 (PDT) Received: from pc638.lan ([2001:9b1:d5a0:a500:2d8:61ff:fec9:d743]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-556383bb113sm281028e87.11.2025.07.04.08.25.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 08:25:40 -0700 (PDT) From: "Uladzislau Rezki (Sony)" To: linux-mm@kvack.org, Andrew Morton Cc: Michal Hocko , LKML , Baoquan He , Uladzislau Rezki Subject: [RFC 2/7] mm/vmalloc: Support non-blocking GFP flags in alloc_vmap_area() Date: Fri, 4 Jul 2025 17:25:32 +0200 Message-Id: <20250704152537.55724-3-urezki@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250704152537.55724-1-urezki@gmail.com> References: <20250704152537.55724-1-urezki@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: 28F541C0009 X-Stat-Signature: zytz6g5yyz839qxcweekpmia9upz3juj X-Rspam-User: X-HE-Tag: 1751642742-468092 X-HE-Meta: U2FsdGVkX18hfs+DP3pdKBFLr4NGh7MIuaac2yTqdbxzK6K1QSW+Q9JsJ6COGCqQR4V6/wbKlLpJo0L6YZEKITcsnRYmAQC3/Gqle2clpFfBc628D2C5Q7wVd7bdjk70g0oPINoFB3YZyaqK/V0s3YlP/oM3rEVfZ5SAgj2pc/nBsk8WNZpNK6wnIXc81Efiag3ab5IiJ2dLMskyhH5oPuy8Y4KPNM88e6EMyY+vOfdW69qghcUrb0vq9ma07kihkLA6cDFUORxy8vOy+dgI83GrfZ6xXDXN3O63bTM9nLUG4iPBFNoDk3WHSgicux35SCyc4x+CgaoEfq1sKjRVTm6cwGn76rHTf6uDk94JfLKpfjcXQeMIo+8bwKKeWd30pFWeGPXhQ/MIHEChahn3Sh08msiEY32bBhN6R5p2RKyKv460XJJxJBLPHzz8G3FvkJ/SzIkp+QHeksszMN1ol7F+0yP+U72KztKpYXwAQp/PbKOEvvRPXK0RWFeZbaCfSvjN8JZ+PlgZg38x25/aM/JlFDcKGiNM/XM0DBOkexf65nEcEoI+Yk86I0V9ld+hs5oPORc+S7OxmollSM+ifzdlS1xf3pfP1Lsc107jC6ddEwdvKHAiQvGVAf1ybHCebHwf70y70ziOSpSxjD6HO/q/7LS/qeQjhZuEwlPkzk1FIHBCnS1X/8xPwqoNCHQgBEaegxRIF+SQZGtYo3WcaLCjv/VCNcYfpB05Sr/CEdlEMB/xr5I1wiQz/D/5Lhlq+g6OM24qKvTdq1ulanttfEPVDrdE7zQdVFwKNGmUoDdINS2CeMzKqSkqHSGqZMY/nyOD5ig4McB/0ozQd7b7pu565hQpcATpPVMPdtc6Zvr4AMh0BmamV5siLizI//v4Yhc89qD7P4fRGRh5C8G5oMHkUz07T4BOrnL2kUJAj1usH1TUOUuw+tC5NOVpS4FCi319fk4D8XCQh0w7j5S imefV722 6RwKLTYD6JArMdVqIWkq7K+TUopyxizprAav2GpVLveAsIe6TaBii3pEhg7gZBHrthk3y7XRXBbZt6KDNVu3MvA1Jqq9K+k7QCWMuy4HpYiFTqPA3H6QffKD7Xjl7KYe8YYihl0IicLqY+egXqxan4kZXokvSdvLpr48+Rfby8DLJSjF6POOowwqH14laeE5Qj7qKwBVnB/KyKnmf//vZXwVxYz79IbcC0U2TPj76opG69MPI7AgpEuxY9SVqi2nff32XRfRScobZjCojCT99HlWBDTDrglqVMU9HGQg8/QwxMZPJ6dwEwPxxmzuGSMvuCNx9cJLyHkWzHgyo6mXTWaDrhZBN4JsaTEjcOhjq0GuhY3kSbha8IzZMRLO2ebKkmdsxXVGrggD8iRVroMgmIK36S2VITIuO9JflGHoPPW35VI5LOxFDdCH3+MiDnL57Qj34O6g12H1PC5BmU3eBvrX+wp1LIVTnEwqz3mZiODXYEaDtiC1kIEppvg== 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: alloc_vmap_area() currently assumes that sleeping is allowed during allocation. This is not true for callers which pass non-blocking GFP flags, such as GFP_ATOMIC or GFP_NOWAIT. This patch adds logic to detect whether the given gfp_mask permits blocking. It avoids invoking might_sleep() or falling back to reclaim path if blocking is not allowed. This makes alloc_vmap_area() safer for use in non-sleeping contexts, where previously it could hit unexpected sleeps, trigger warnings. Signed-off-by: Uladzislau Rezki (Sony) --- mm/vmalloc.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/mm/vmalloc.c b/mm/vmalloc.c index ab986dd09b6a..8c375b8e269d 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -2009,6 +2009,7 @@ static struct vmap_area *alloc_vmap_area(unsigned long size, unsigned long freed; unsigned long addr; unsigned int vn_id; + bool allow_block; int purged = 0; int ret; @@ -2018,7 +2019,9 @@ static struct vmap_area *alloc_vmap_area(unsigned long size, if (unlikely(!vmap_initialized)) return ERR_PTR(-EBUSY); - might_sleep(); + allow_block = gfpflags_allow_blocking(gfp_mask); + if (allow_block) + might_sleep(); /* * If a VA is obtained from a global heap(if it fails here) @@ -2030,7 +2033,8 @@ static struct vmap_area *alloc_vmap_area(unsigned long size, */ va = node_alloc(size, align, vstart, vend, &addr, &vn_id); if (!va) { - gfp_mask = gfp_mask & GFP_RECLAIM_MASK; + if (allow_block) + gfp_mask = gfp_mask & GFP_RECLAIM_MASK; va = kmem_cache_alloc_node(vmap_area_cachep, gfp_mask, node); if (unlikely(!va)) @@ -2057,8 +2061,14 @@ static struct vmap_area *alloc_vmap_area(unsigned long size, * If an allocation fails, the error value is * returned. Therefore trigger the overflow path. */ - if (IS_ERR_VALUE(addr)) + if (IS_ERR_VALUE(addr)) { + if (!allow_block) { + kmem_cache_free(vmap_area_cachep, va); + return ERR_PTR(-ENOMEM); + } + goto overflow; + } va->va_start = addr; va->va_end = addr + size; -- 2.39.5