From nobody Tue Oct 7 22:38:28 2025 Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com [209.85.167.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 551DF1E9B21 for ; Fri, 4 Jul 2025 15:25:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751642745; cv=none; b=roV6lQfE83lywIp53Ek0HhhFzUGDEUEMplPzSCZur8l4WT7zZgYmybAeHcnFIg9co6q0g88FO2wbJFb3CpM+4jjaM93mYJaMAJCGEcv9u28nvdxon6XsUk5rGNawFDNPImxHHB0JDyl/aQeBGeZe0UiLPzRD+yG+XBNgwsXzXh0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751642745; c=relaxed/simple; bh=1P23idn8S50Wp/z6psc62ni2xbplTpC+5t49NOZ2Zpw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=a1ZMVOcbL7mdEoOJGzsH2fn7JoL9z+ozdVLqiRAI4kL4Ep+TW8pfycUYL4jE1o+0ioQfKEcjVN9QV96Bym7bTvhQIiVm9yRGELx+4S8SEr2MOGFudooZmDtdCWY8clR2ARHYZu3E7AGJAWRq6UOl9/q2n+oDjZLUxXLs/fk5iiA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Tcpy0n2K; arc=none smtp.client-ip=209.85.167.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Tcpy0n2K" Received: by mail-lf1-f50.google.com with SMTP id 2adb3069b0e04-553b6a349ccso1380593e87.0 for ; Fri, 04 Jul 2025 08:25:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751642740; x=1752247540; darn=vger.kernel.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=X0Q3LF2X+8a61qCC6llydbLSjvVlZ/Q0p+A1+lNpFsg=; b=Tcpy0n2Keiyx2bRzDpBpkAtFPY+HMTumb+7H2Xx20oCq57EzuzysT3poO4vs0ySygX es55mXwh0+PszBtVHgzrmjrkv869yCo6di4GaOYEbvMVr5SwGAVVusEkkvz+p1MpaZ7O 13YIs3Bt8WfRg0lRtzKPxLN93rF/pZvPIvHLCMZKnvbnkRNI2bsoW40gSXVVdkTzVPBt Xb6g8elQBYE8PhbZsbQyCNxEzIUmEt415oOm7DDXA7bIurv2pQTBOQ5uanc8u0PyeagP y6XLb6wOQyMl7kePxEQEAVOnqhM7hZgHNqa+fmDCXjiXP9zIGTzpEOC8gt3Epsw5b1jk BNbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751642740; x=1752247540; 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=X0Q3LF2X+8a61qCC6llydbLSjvVlZ/Q0p+A1+lNpFsg=; b=nrHNAhQ03ad+RjC/z+dNmusedPmw8Dm3Z20rIoKg/ZpeXebOK5A37WjO0Gj6fJ276B aA0KHsVr6dndJ523B6s9SMCTNPNdIWls5CBlZoMvVaTkd+Ckt2oR9GryYF1lQGenrOqM cVuv0PR12Xb7+XTzg0BIi1myOpSfCL3rVkkpADQSN54GfZw+HQZ0DVTlhKzYSQRAvSc9 793OQX2z+TBPHMZFDyNusl6GtNMnhMWMJYGcB2hEhJf7AAv3DPLOcbSyLRaRhOpb1JmX LhuX4Ys1aegVdSWAQ09z28YhQOHEOCgLxGU7k7mDfE2Qh3Wf6cJcajQpLcc5QuQbZvZY nHLQ== X-Forwarded-Encrypted: i=1; AJvYcCXnaKaYvkfcZTN82lnd3d5qwGpwA/7NpRQSXoumSJGK2/3lX/qmcyhsqJIwzrZAa3ugqGWDjha9BR8+NX4=@vger.kernel.org X-Gm-Message-State: AOJu0YznVbGtgKQjjUMSc/pazokUgar5GkgW03R+AQDXyVwejIbIDsXc GS9i37eqBOKDJPTMkh3dPFfBKEuIa3FDFKvYKiSH8WA55JdyYxtvtsbg X-Gm-Gg: ASbGnctlOUgcxdcHTE8LATIzOlqpom6UAQV2oEFWGV30CBssHfFp6pyVOLNE2BakC2F G/g9w+gU2f7SR4GaPDd+lJXxr4w7N9+7+BOA8SZ0TCnRIGnRFcttlpLT/u6RuVYNPnf2DrLHHSn H4+Bk9BETrjh2RVB5HvlqxDyYQxa2jOnpXwSQ37qGl45h4MW/1WBNEcG3goXNA0kCIzqrdjOZcF uRERkA604+kXf/Yz7TiUX57jcTWhAEWoTQDwMs/sdLTV69vncs3blpM/h8jGvLaQBwPPLub5zPk L/C2QuWfInYx/rOeaEWnIpwUF3yq0VSRKTCPa7oxuS+8wDy06ftu8xPAqw== X-Google-Smtp-Source: AGHT+IFDQmOJmOUPECY01enwclADE0hOpl3t0KsXrnWY1Pas6IAjlW705AxCcYjP0ABpz8i541WqSw== X-Received: by 2002:a05:6512:131c:b0:550:e527:886f with SMTP id 2adb3069b0e04-556de363b96mr977862e87.51.1751642740150; Fri, 04 Jul 2025 08:25:40 -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.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 08:25:39 -0700 (PDT) From: "Uladzislau Rezki (Sony)" To: linux-mm@kvack.org, Andrew Morton Cc: Michal Hocko , LKML , Baoquan He , Uladzislau Rezki Subject: [RFC 1/7] lib/test_vmalloc: Add non-block-alloc-test case Date: Fri, 4 Jul 2025 17:25:31 +0200 Message-Id: <20250704152537.55724-2-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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Signed-off-by: Uladzislau Rezki (Sony) --- lib/test_vmalloc.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/lib/test_vmalloc.c b/lib/test_vmalloc.c index 1b0b59549aaf..9e3429dfe176 100644 --- a/lib/test_vmalloc.c +++ b/lib/test_vmalloc.c @@ -54,6 +54,7 @@ __param(int, run_test_mask, INT_MAX, "\t\tid: 256, name: kvfree_rcu_1_arg_vmalloc_test\n" "\t\tid: 512, name: kvfree_rcu_2_arg_vmalloc_test\n" "\t\tid: 1024, name: vm_map_ram_test\n" + "\t\tid: 2048, name: no_block_alloc_test\n" /* Add a new test case description here. */ ); =20 @@ -283,6 +284,31 @@ static int fix_size_alloc_test(void) return 0; } =20 +static DEFINE_SPINLOCK(no_block_alloc_lock); + +static int no_block_alloc_test(void) +{ + void *ptr; + u8 rnd; + int i; + + for (i =3D 0; i < test_loop_count; i++) { + rnd =3D get_random_u8(); + + spin_lock(&no_block_alloc_lock); + ptr =3D __vmalloc(PAGE_SIZE, (rnd % 2) ? GFP_NOWAIT : GFP_ATOMIC); + spin_unlock(&no_block_alloc_lock); + + if (!ptr) + return -1; + + *((__u8 *)ptr) =3D 0; + vfree(ptr); + } + + return 0; +} + static int pcpu_alloc_test(void) { @@ -410,6 +436,7 @@ static struct test_case_desc test_case_array[] =3D { { "kvfree_rcu_1_arg_vmalloc_test", kvfree_rcu_1_arg_vmalloc_test }, { "kvfree_rcu_2_arg_vmalloc_test", kvfree_rcu_2_arg_vmalloc_test }, { "vm_map_ram_test", vm_map_ram_test }, + { "no_block_alloc_test", no_block_alloc_test }, /* Add a new test case here. */ }; =20 --=20 2.39.5 From nobody Tue Oct 7 22:38:28 2025 Received: from mail-lf1-f54.google.com (mail-lf1-f54.google.com [209.85.167.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 856E2289E16 for ; Fri, 4 Jul 2025 15:25:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751642745; cv=none; b=PCgRX7vcPxkfGOYrbuO6n5DAl4mNj4LJSw+SccEKAugyTKGZl7syt0KXyal7Vt9Xz423JD/Hx3Y/NzZMrQgPrUdA5Q0L14KPsB8Q3O9X+ynKRWgexxhKiOrnknWSuqt6kLPO6OPFCEEnl/CdOuGPiS0oRSLOV9gf4HU4E1fENxQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751642745; c=relaxed/simple; bh=NAaX3YimyE+ipEesLgZwSS1IZCcvgj0M72vfhzONliw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=lDHxMOTjUV6iriU7IDlwqgNmSrRxnCRt+4b0epmLuCi7YIChgHmN8K/hKKM21zCBRzxG0YVBrWc7G3POvz3kTeHJY/CB0fpO3v9BFR+cE/h5psyvl80trAUzvQ8+kKA6/cmCdUHWv8pMtyyF9vbRq0bJEsmGx4gJXccYYMl++Io= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=AKtqVpKT; arc=none smtp.client-ip=209.85.167.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="AKtqVpKT" Received: by mail-lf1-f54.google.com with SMTP id 2adb3069b0e04-553b5165cf5so1473899e87.0 for ; Fri, 04 Jul 2025 08:25:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751642741; x=1752247541; darn=vger.kernel.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=AKtqVpKTbaGlm0/fo7NgoNh+Bgk/Gl1nnAmr2HlvKTWqidZY/ifOvgMkNS5/EHehki EgXXW5kT35BgJFcz4AbHpkqLc/bFuoV2Zq63zACL39UciR9e+38DTJXxGS8JZeQ3A/SQ GhTq+jsvopTfvlsfIhRNADxZLwnAapqSILF9nULVKrjycBmaHRLh3Ze0riQ3C+rE0hGv MFwJZ8JcCp346blyjk4MHIyR79VY7Pjsw7uSDWV8nrOoCFPwyQ6AXMhHFK1D2WCw2xgE byaKqpN6u1l2XwgUQCMTbWaylihJNoc5iol8uEaU5GDwBG/6b+qFylg1N9Jz/UO9SJH9 ittw== 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=N2WEoB5xMdRjSJItY+YjzSaQBDOdFoSeUhJwuPGs7g1OqwWpWXsJnC/6s17z5ksrL1 WnMcs55vo/TCyCJOfTL/1wlI/mLex7o42ooyfXj/r1k5dgLWoYizBbtZostUgQrW7cxh Y15+aEmBCFo6sEEsFshjqATCvjo9/RkHrgOJwizG60Ioo8tCMgCuki5+0Ta6Bn6NqaMH YJCy6S1VI2K9JlaDjJMYjJC2s2rxoK6FeIO0gpyMNh/NTwjo0GFyG8VPFTebY0XFa4SQ Nn1jIEHZzIp3rX1d6uA8hrK8cMZukiqL0rQlCKmjo3Vs2PVZ3BRCj4sR2jClLNfuM8mz b0xA== X-Forwarded-Encrypted: i=1; AJvYcCWfso4cK+PkA7wvlWWDCrH5HUAPd4r+tGnx4ZHtraxeeAEYfktsBBd9wyUT+tkwOR8YW0mun51spmm1Dyk=@vger.kernel.org X-Gm-Message-State: AOJu0YwISn+VMt5UGY2X39IChKyBWmzYkiU84apkgebuxB5vc5mRUiTG VSHdxZaRWh2sb1u9adkOIuYk63YLUqoPvx7AANtIZjfQba8hjNIG/5kBsJRTmw== X-Gm-Gg: ASbGncv0je0lPb2thXkWhAhkqMUk/DqOgIqpakLEZwO1gls0pdKmWRIrsfPFHnqQDa/ H/8Hk4Cxn0m2Um0pDav3ig/QAuZuOwmksU5Z7svSBsZVyi6IAxoqxjp1BlWsxQBPjHMHvjjL31f PEGsz7+/r/wgCKRGk4PmQpt3OBh+Wt1OI3BEQlP9b5rGBeZRNJjQGZHR9YM7ubQ750hDbLx+c0v TaCGxyacijL5mwXeIkhkrz2zkPBXeyb59lI5o7luPKF8Lp4WduJCFd4VGX9KUpqZ0ohGRsU8627 ilXIqBP373bfDR3im4wmPpfwuEEnDmbBWTvzp1d3ynBJd1UPAJ/pvCh1Lw== 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 lon= g size, unsigned long freed; unsigned long addr; unsigned int vn_id; + bool allow_block; int purged =3D 0; int ret; =20 @@ -2018,7 +2019,9 @@ static struct vmap_area *alloc_vmap_area(unsigned lon= g size, if (unlikely(!vmap_initialized)) return ERR_PTR(-EBUSY); =20 - might_sleep(); + allow_block =3D gfpflags_allow_blocking(gfp_mask); + if (allow_block) + might_sleep(); =20 /* * 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 lon= g size, */ va =3D node_alloc(size, align, vstart, vend, &addr, &vn_id); if (!va) { - gfp_mask =3D gfp_mask & GFP_RECLAIM_MASK; + if (allow_block) + gfp_mask =3D gfp_mask & GFP_RECLAIM_MASK; =20 va =3D 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 lo= ng 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; + } =20 va->va_start =3D addr; va->va_end =3D addr + size; --=20 2.39.5 From nobody Tue Oct 7 22:38:28 2025 Received: from mail-lj1-f178.google.com (mail-lj1-f178.google.com [209.85.208.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 638F32BEC3A for ; Fri, 4 Jul 2025 15:25:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751642746; cv=none; b=oZRGVH/ER8FeaRnLvPtDuIb9MoY3Ofo1oB44setyd3i7oDXjJXhVMCnoSWiMM2xy+h0cFZWMa2UbCtoj8mkl4FjB4xdgbuLM58K/T32HZ6i5kJUQqxmCl0G8al4Q6pT9efqYiUyMbM4xeunrwI/GoTVfE/0+zf9HZTJFsWde6Qs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751642746; c=relaxed/simple; bh=0gfbkB3PV5N02Wr92thznYi7vUbD0NR4fC7Dj9uLn9E=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=kOibfPV1r65F5Osa+yJzngGlLlYwE0KuQjsCYEXfj/NK+5NOglQv/QwnPR1tNsgL6dyNpQ7YvgMmfENG86egmwgvA9rmJ/8Gs5hdOMrVBmTr+fMgFy3LUboPK6PKRMV8nw0WWCxpw4wXxSzOMV0k2xnlz8pNubWGxVl+ZiD7EX8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VsmEfBR9; arc=none smtp.client-ip=209.85.208.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VsmEfBR9" Received: by mail-lj1-f178.google.com with SMTP id 38308e7fff4ca-32b4876dfecso21826571fa.1 for ; Fri, 04 Jul 2025 08:25:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751642742; x=1752247542; darn=vger.kernel.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=zNvWjNYrNAUtF5MSlixELkfrw/rQdgWdiIqr1YNwBsU=; b=VsmEfBR9+XSWUt2EG+UPyTsPzraeV1GUpDvTrdl6GeeLqsSjdL1Suzmg94G7gDeHB3 tZLgv5p5yhOGmfQUN3aHOwVyb7VGV06H4r72z3Rz7gPlYG2qORqzMqIB9qGNKq71XAzO 7Z4/w/AXlJKZX5F/tFSExdEEcWMwJ0OajhvLSOb+Qllc7LIiUVdieN0GKrjMFgauIZeL SvNEPN00nMDxmWhkuo2umV9gft3pApgkxeQ3Mv8RwESgxU+1fIEIcAOjKlYdAcvQrea/ lJIRPX6MLhAvs2zHKW+iLWr6Dunhb6mdK6ciHOotmZJ7BA2NhUTOQ7Qbr9DNYpfxWnVR cpDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751642742; x=1752247542; 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=zNvWjNYrNAUtF5MSlixELkfrw/rQdgWdiIqr1YNwBsU=; b=wZkSaZhsDmDalkUFJ6BZV4F4d5OoC1vEqvARhYwt2vlL2eVQo7y53/OrO/g1l2MFED VNLuKP34sIiMLbiDvxK2bVPCzCNXlTQLnung8348bZLjwjedg9KzvCFbe5LozfOHZYwX lcODvEzCWUUtmhRB3OGVdKknVk4KPPJuteHiLjJz1NVy+AiVt8SzJ8SXNbEJev0gKO84 EU4HRcux8R4DLjt+53k46FL5exHjayDb3OILq41LcXweSKXnURw+USlvPrM+yMt+EbgC g1mKHs4w3FNJcj0hOktcVc1Zvj8OfnOF/Yx34Jh635dG0DbQoll4HbpmIfkTndq34o2N CpuQ== X-Forwarded-Encrypted: i=1; AJvYcCV87tb+6QJsSboYSnKweLR/jpqpl1KWLQ+wbMIJbUhDHxia0uHlMtF2/IF4yDqpWjimYbQqsYSZ6az1GlA=@vger.kernel.org X-Gm-Message-State: AOJu0Yx2N7NsBN8K8lnVqjy/T8+i3tN5/mVDc4wbq+ibWCZkU1QnE5JQ YD0SJ91Yq1/kxVVpnHWLTqBK84UpUo1AUD6aaa35aBgcov42cFDJMj/M X-Gm-Gg: ASbGncsHw6oYEP+KsjLsp/lAXwYDB1pANu9Xv4XFfkLA/z2HtsEUXws7QpjJu0SLxc+ P3yx3SkXeBUCd7RZvD9VnjRI+xHT3b/AUFGuF/k8BzRBmTGsmk2ol6MUyGJeFP7Q3x3I30z8EoY 7UQyOlseurLeiVUg6iNl0d+0AxYD5rsTLDl4kPhHa9pKUg7WJ8GBgUIzeHkhlb3MRC/s++/DeEE xsOexWP12A24ozWQYg8otIIiIizBfj7JMMEtpgASp9mKp1Gx7qglGG8NhpApfJVRMuRpBdPRUVx Z8Y+4l1Jc8AvS/3IrqNqgYhfLa+w6f/TWqz9ZkBRGTFdYt19RiYwUbwRJA== X-Google-Smtp-Source: AGHT+IGE2i8eluV/zaoznxDbYgeSGEvnc5JUvAs8UNdO65hStlbpmoDP2IpLyiwGQKpAahNWwpnd+Q== X-Received: by 2002:a05:6512:790:b0:553:2159:8716 with SMTP id 2adb3069b0e04-5566258d705mr899527e87.26.1751642742258; Fri, 04 Jul 2025 08:25:42 -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.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 08:25:41 -0700 (PDT) From: "Uladzislau Rezki (Sony)" To: linux-mm@kvack.org, Andrew Morton Cc: Michal Hocko , LKML , Baoquan He , Uladzislau Rezki Subject: [RFC 3/7] mm/vmalloc: Avoid cond_resched() when blocking is not permitted Date: Fri, 4 Jul 2025 17:25:33 +0200 Message-Id: <20250704152537.55724-4-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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The vm_area_alloc_pages() function uses cond_resched() to yield the CPU during potentially long-running loops. However, yielding should only be done if the given GFP flags allow blocking. This patch avoids calling cond_resched() when the allocation context is non-blocking(GFP_ATOMIC, GFP_NOWAIT). Signed-off-by: Uladzislau Rezki (Sony) --- mm/vmalloc.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 8c375b8e269d..25d09f753239 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -3624,7 +3624,9 @@ vm_area_alloc_pages(gfp_t gfp, int nid, pages + nr_allocated); =20 nr_allocated +=3D nr; - cond_resched(); + + if (gfpflags_allow_blocking(gfp)) + cond_resched(); =20 /* * If zero or pages were obtained partly, @@ -3666,7 +3668,9 @@ vm_area_alloc_pages(gfp_t gfp, int nid, for (i =3D 0; i < (1U << order); i++) pages[nr_allocated + i] =3D page + i; =20 - cond_resched(); + if (gfpflags_allow_blocking(gfp)) + cond_resched(); + nr_allocated +=3D 1U << order; } =20 --=20 2.39.5 From nobody Tue Oct 7 22:38:28 2025 Received: from mail-lf1-f52.google.com (mail-lf1-f52.google.com [209.85.167.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7B7DE2D3229 for ; Fri, 4 Jul 2025 15:25:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751642747; cv=none; b=dK7wwl8igXlQGVtwT1wIFYylNHYMCjNOq7bGL09VuULepTVIOg3+AJZ6OSQIwUfsvaw1hA3yMeUGvAHCG7FPb54USkJ6fDTBGRhpU+ocGajr2USK34GVsOaVTahoUCiiPDRLsc1opVyg2efnZrpYkCS3GgmR/wb+wx93BRmindU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751642747; c=relaxed/simple; bh=8MPgw+SJjFIBSYmvWK+ubTN4n1htzJkdVdeoDxNgCgk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=NB560bw97RSag9mKbLf5/7bEfJ5X28EJflTq7JqMDdwkasaT8CmX/ck6X+P8tMvOX6Ox3Y6vcdvszlktdRCmTvtX3D7z3c/ws+vheoGPiI50pKpr8uMxnJKOSum67PPl3EGIurGCQQcDkeMYFz61MrRl/Sc/63hnWiFPPaPZfj4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=JqoQ07qu; arc=none smtp.client-ip=209.85.167.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JqoQ07qu" Received: by mail-lf1-f52.google.com with SMTP id 2adb3069b0e04-555163cd09aso1049046e87.3 for ; Fri, 04 Jul 2025 08:25:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751642743; x=1752247543; darn=vger.kernel.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=OgS0KJaXTfPzzFhO8JiQ2ZNCuUgGHrASYJQSS3SosFc=; b=JqoQ07quhRXuik6Nmq0X7Cb+Q7A3PiiTadposGv/644M+OXKm9dQHLHsVnkIcZP60n aGAPtTR9DS6PCuZKU1nf7TJPp3ETRCSWHlKrNj6XDedwsWx24U0F7ukC6Myak5QFEPO6 zE/a/VTDr9t7dZ8Hrx/5266/DBH5GtvqHokWlT3mwwXYGH9tMwO3gUhh+4rIm8ers0ul G430WE1hre6j1AuklPH+Gmtasf5jLpy7+/oyoyDIV/tXmdmPRv4BhZtV0PH879uGD64s qS00MOCFf6J27kGRYUeqLv0cn2LRPY0A+4sHJqG/AfzJgxx0U7zexlOH+R1uapTwGOOe W3VQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751642743; x=1752247543; 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=OgS0KJaXTfPzzFhO8JiQ2ZNCuUgGHrASYJQSS3SosFc=; b=m6QMNONvPcCfu1rGMdDZxFddX2gXlYFbzELIBmoMYeLHiLHkUZ50rYc3FZO+bgGJ6u Y16zAZMSj1Js5zarVl0C7yI+UxLYkne+77kOLn05D60HKAb0qG/iWNVW95LVzTKcBtE/ xg8LgTCnELCF/iGQtI0gf+r4i3K+tYyRSe5bVxVnMsYrgqWf/w+xEKvdJjKhBRtDNtde y7V/fsz8Z2xl/EDgMlPSCO0/o0V+qn7U/7T/C0XkBXEzs+1aTw03CTexd4XxFLauuhVe wLFi3rwgwVVBp74VH55k79QLSE5BAVwGKG8cigPc+A51hD7HTZhDBU+FMgKn/io8yftt 3SOQ== X-Forwarded-Encrypted: i=1; AJvYcCUZlTmECsV/I+QdhfFfsGNnpblUqHyVPNjwEW6mgiN4ej1upYmNU5Y2m1ZVOgTP4gdiRgbFTqGAi8fVjYA=@vger.kernel.org X-Gm-Message-State: AOJu0Yzgwl6DhagtRQ2X5FiC4mvRNKICZ1/X4hu5khD+bLcOUYJXDFTZ KM6XJM5yuTp/pZPCnXi8fkjD67T75qhaywKiZnuCuzUOrDeibt4Lhwpu X-Gm-Gg: ASbGncu6T6PZZRCGv6oSrblBzIQn6+srugni+vyUZMTrAV99E67UXdLynf+OS4psfD+ 41C4fcziRveio7HuhPjKDW1LLcycRToaiLj8H8FIf51e1f15k8umVeDllCplfC3+R7FYOFh9nBb M8bJSFoTtQsLbqM09AIp25nmLvBlXmVQ/u+3mJEQn/OWxWrfZLKVYy0ibAwZ4mbA46hazznh9sN RjODUaJpi64cKOXNMSaTsvogakbHA9v4s995u88jUXxC3KPLET9aI4L9ZSLbWX6tUOArLuPmJQF jksJJJuM+mHIWv0606bDssWg7mq4bNAxsuNv5lKlYIk6NW/Z6X7bo9hTSByXHUVq4pzP X-Google-Smtp-Source: AGHT+IF38JqZkPzw0ACXRYTdNdIPx2TOesuSd9rduFFD+CHMcf7TmprM3nkyvPUZKkjtKEYwubd/Jg== X-Received: by 2002:a05:6512:1246:b0:553:37e7:867a with SMTP id 2adb3069b0e04-556e6e3157cmr1097417e87.49.1751642743323; Fri, 04 Jul 2025 08:25:43 -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.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 08:25:42 -0700 (PDT) From: "Uladzislau Rezki (Sony)" To: linux-mm@kvack.org, Andrew Morton Cc: Michal Hocko , LKML , Baoquan He , Uladzislau Rezki , Andrey Ryabinin , Alexander Potapenko Subject: [RFC 4/7] mm/kasan, mm/vmalloc: Respect GFP flags in kasan_populate_vmalloc() Date: Fri, 4 Jul 2025 17:25:34 +0200 Message-Id: <20250704152537.55724-5-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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The function kasan_populate_vmalloc() internally allocates a page using a hardcoded GFP_KERNEL flag. This is not safe in contexts where non-blocking allocation flags are required, such as GFP_ATOMIC or GFP_NOWAIT, for example during atomic vmalloc paths. This patch modifies kasan_populate_vmalloc() and its helpers to accept a gfp_mask argument to use it for a page allocation. It allows the caller to specify the correct allocation context. Also, when non-blocking flags are used, memalloc_noreclaim_save/restore() is used around apply_to_page_range() to suppress potential reclaim behavior that may otherwise violate atomic constraints. Cc: Andrey Ryabinin Cc: Alexander Potapenko Signed-off-by: Uladzislau Rezki (Sony) --- include/linux/kasan.h | 6 +++--- mm/kasan/shadow.c | 22 +++++++++++++++------- mm/vmalloc.c | 4 ++-- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/include/linux/kasan.h b/include/linux/kasan.h index 890011071f2b..fe5ce9215821 100644 --- a/include/linux/kasan.h +++ b/include/linux/kasan.h @@ -562,7 +562,7 @@ static inline void kasan_init_hw_tags(void) { } #if defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KASAN_SW_TAGS) =20 void kasan_populate_early_vm_area_shadow(void *start, unsigned long size); -int kasan_populate_vmalloc(unsigned long addr, unsigned long size); +int kasan_populate_vmalloc(unsigned long addr, unsigned long size, gfp_t g= fp_mask); void kasan_release_vmalloc(unsigned long start, unsigned long end, unsigned long free_region_start, unsigned long free_region_end, @@ -574,7 +574,7 @@ static inline void kasan_populate_early_vm_area_shadow(= void *start, unsigned long size) { } static inline int kasan_populate_vmalloc(unsigned long start, - unsigned long size) + unsigned long size, gfp_t gfp_mask) { return 0; } @@ -610,7 +610,7 @@ static __always_inline void kasan_poison_vmalloc(const = void *start, static inline void kasan_populate_early_vm_area_shadow(void *start, unsigned long size) { } static inline int kasan_populate_vmalloc(unsigned long start, - unsigned long size) + unsigned long size, gfp_t gfp_mask) { return 0; } diff --git a/mm/kasan/shadow.c b/mm/kasan/shadow.c index d2c70cd2afb1..5edfc1f6b53e 100644 --- a/mm/kasan/shadow.c +++ b/mm/kasan/shadow.c @@ -335,13 +335,13 @@ static void ___free_pages_bulk(struct page **pages, i= nt nr_pages) } } =20 -static int ___alloc_pages_bulk(struct page **pages, int nr_pages) +static int ___alloc_pages_bulk(struct page **pages, int nr_pages, gfp_t gf= p_mask) { unsigned long nr_populated, nr_total =3D nr_pages; struct page **page_array =3D pages; =20 while (nr_pages) { - nr_populated =3D alloc_pages_bulk(GFP_KERNEL, nr_pages, pages); + nr_populated =3D alloc_pages_bulk(gfp_mask, nr_pages, pages); if (!nr_populated) { ___free_pages_bulk(page_array, nr_total - nr_pages); return -ENOMEM; @@ -353,25 +353,33 @@ static int ___alloc_pages_bulk(struct page **pages, i= nt nr_pages) return 0; } =20 -static int __kasan_populate_vmalloc(unsigned long start, unsigned long end) +static int __kasan_populate_vmalloc(unsigned long start, unsigned long end= , gfp_t gfp_mask) { unsigned long nr_pages, nr_total =3D PFN_UP(end - start); + bool noblock =3D !gfpflags_allow_blocking(gfp_mask); struct vmalloc_populate_data data; + unsigned int flags; int ret =3D 0; =20 - data.pages =3D (struct page **)__get_free_page(GFP_KERNEL | __GFP_ZERO); + data.pages =3D (struct page **)__get_free_page(gfp_mask | __GFP_ZERO); if (!data.pages) return -ENOMEM; =20 while (nr_total) { nr_pages =3D min(nr_total, PAGE_SIZE / sizeof(data.pages[0])); - ret =3D ___alloc_pages_bulk(data.pages, nr_pages); + ret =3D ___alloc_pages_bulk(data.pages, nr_pages, gfp_mask); if (ret) break; =20 data.start =3D start; + if (noblock) + flags =3D memalloc_noreclaim_save(); + ret =3D apply_to_page_range(&init_mm, start, nr_pages * PAGE_SIZE, kasan_populate_vmalloc_pte, &data); + if (noblock) + memalloc_noreclaim_restore(flags); + ___free_pages_bulk(data.pages, nr_pages); if (ret) break; @@ -385,7 +393,7 @@ static int __kasan_populate_vmalloc(unsigned long start= , unsigned long end) return ret; } =20 -int kasan_populate_vmalloc(unsigned long addr, unsigned long size) +int kasan_populate_vmalloc(unsigned long addr, unsigned long size, gfp_t g= fp_mask) { unsigned long shadow_start, shadow_end; int ret; @@ -414,7 +422,7 @@ int kasan_populate_vmalloc(unsigned long addr, unsigned= long size) shadow_start =3D PAGE_ALIGN_DOWN(shadow_start); shadow_end =3D PAGE_ALIGN(shadow_end); =20 - ret =3D __kasan_populate_vmalloc(shadow_start, shadow_end); + ret =3D __kasan_populate_vmalloc(shadow_start, shadow_end, gfp_mask); if (ret) return ret; =20 diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 25d09f753239..5bac15b09b03 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -2091,7 +2091,7 @@ static struct vmap_area *alloc_vmap_area(unsigned lon= g size, BUG_ON(va->va_start < vstart); BUG_ON(va->va_end > vend); =20 - ret =3D kasan_populate_vmalloc(addr, size); + ret =3D kasan_populate_vmalloc(addr, size, gfp_mask); if (ret) { free_vmap_area(va); return ERR_PTR(ret); @@ -4832,7 +4832,7 @@ struct vm_struct **pcpu_get_vm_areas(const unsigned l= ong *offsets, =20 /* populate the kasan shadow space */ for (area =3D 0; area < nr_vms; area++) { - if (kasan_populate_vmalloc(vas[area]->va_start, sizes[area])) + if (kasan_populate_vmalloc(vas[area]->va_start, sizes[area], GFP_KERNEL)) goto err_free_shadow; } =20 --=20 2.39.5 From nobody Tue Oct 7 22:38:28 2025 Received: from mail-lf1-f47.google.com (mail-lf1-f47.google.com [209.85.167.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9B3562DE710 for ; Fri, 4 Jul 2025 15:25:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751642748; cv=none; b=PGMxKCRt+tbKOv9RWs+yoLfw/2nHXcWi/ueLbfPVpOcXIqCfd8IsFO4qkvwYcpM34jcegCExt/8iaTWr2C3V91tnDswJCSpfCSJhbD54ukijkQ4KTAjyoPII7ofKUGs69v8Qg+/Q6SL3Tm+Fbwwn3IUNmqDwxkF5stwRR31HA/0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751642748; c=relaxed/simple; bh=c/wwj7NoTIZ6brrC+Uki7csFkVScCU8q323cPmYgFk8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Qds5nv9q80NGhBxZ+Swznadu/5mISoL26Dcm9H2P7u96+4G9PAJwOxdmilnRo53rRp0ZE9c1ppOzV0/Vg9tHKzSs2QOX6e0aOkPSnqUYmQ1L4aZLUd+SdKTrB5Odnvo1wFCd8idv6GR1ZA9VA1WSU/j0/+d8W92c0ZENgudxESk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=XQs0VSMi; arc=none smtp.client-ip=209.85.167.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XQs0VSMi" Received: by mail-lf1-f47.google.com with SMTP id 2adb3069b0e04-553b16a0e38so1317080e87.1 for ; Fri, 04 Jul 2025 08:25:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751642745; x=1752247545; darn=vger.kernel.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=pHUeFclyhwsVTJxzUfzvQTESeuKzcTwA3vHG8FET718=; b=XQs0VSMiJ07UlmnprxyuG/r1jiTdgr0fL1324bO72bihUTtvB120cRNX5q8qutTdPr FdTtPiLsiC88cKlwYGOAbK9IavxyhyH7nt5zBKvAcgF77NOzDXENIg04UMK79KUumj8f jHSDasgF13fAecZHpjusyW4/5knkdVxXoJzh3dN2xgpaVIs2BY7AMS8EYnQz0DtZVaYL QI3wAqHp5y3vZYZOBk9g4O+5DvUQqvoC3hpZR5adgU3+EqRgwFUBl3ilZIZ+apibeuKp 1cjkf2jTfp7dhM9y02+gVc6u5MbDQOqza10fczEn3MZN2KLbQobV3f+qWas6/BIWFVWX rYDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751642745; x=1752247545; 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=pHUeFclyhwsVTJxzUfzvQTESeuKzcTwA3vHG8FET718=; b=JjENYAZjTcS4eziS4OZkt29YfZ8WqlmTEo/OpIzTwRlB6nF9pg/L5j+CWx2GdahSzl vXhKgHz0gGv/Rm6qpZhQHrr5eLr7VdWMume+qpI5YRyHDE73z+M3CA/A1ZgvCekCcBP2 Lb+5o2nHazrfYKrcx7qb6BmHOLl5y3lq0QT4XX4htNEwNjTlFz6vq+4Nol5UaR6/InB8 tUM5wyJGbP23zsY5fF6do9jld5fVD/J1CVukCi6lHQFyLiK4trD1E+lN2JGFKKxzpgRC eHO1mbRKqoCB9IRJwpUEvlHBHmOuDksA6Qls6wZPmdySOgMKtH4ZlkC4ZxfDUIbyPZHz 3U2g== X-Forwarded-Encrypted: i=1; AJvYcCV8gCRzErZSC2Ij/3GY598nvoNxJk+AmyATqshc2xtDm13NRtk/j+wiQ7J75S2a7Z6XZJfikYhfYZgFPCI=@vger.kernel.org X-Gm-Message-State: AOJu0YzD7uLAWuO/dhJSwwKAByaR+dmfbGDdJ7c/lm36SwIQKrJjvhNb CMgD5IjTi55hgYRQo/kheUnIHGDxqPdO6YFqZ1ofDCmX2hEHc1vh72IS X-Gm-Gg: ASbGnctIvyi+J1BUD3soQ87Rw7A2ohVgkyNE1adh4Tu+aGZcmXKGpQVycFbIIhEeMGt zvc4xKFM5h2LrQ/KnKtLHyLTKvzUclmeuu7TbMtwpPs9wL4v/sSvMYQh7PkuEfaqgBtyrDx574+ FBzJvS/HdtgeXGnb1QodwKcV/F2HKj0PHlG++9jPWZG4Nlq2HCnzheNhqS46h3buOwG8MHoZnVk XhJJ02cg80Ob5jyw39v12IakYI2aMgf67dO3yN0NOxE4TPTRhHz1yLuSxYcceB3DCU5HipU6bJ+ BIouOmp55KTiwsfatxKF9+ZR43yZHwkH8A0Vc3FEqH05EgWRsCR+8H9zbg== X-Google-Smtp-Source: AGHT+IF9kNVMLIoDCz9z6Zd+gvYPf6NxUQYP6tWGaRRecVqu4l25Lqb05sgsp0OcAW+jSRltea3qnQ== X-Received: by 2002:a05:6512:12c8:b0:553:35f5:7aac with SMTP id 2adb3069b0e04-556dd1e4a26mr931874e87.48.1751642744366; Fri, 04 Jul 2025 08:25:44 -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.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 08:25:43 -0700 (PDT) From: "Uladzislau Rezki (Sony)" To: linux-mm@kvack.org, Andrew Morton Cc: Michal Hocko , LKML , Baoquan He , Uladzislau Rezki Subject: [RFC 5/7] mm/vmalloc: Defer freeing partly initialized vm_struct Date: Fri, 4 Jul 2025 17:25:35 +0200 Message-Id: <20250704152537.55724-6-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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" __vmalloc_area_node() may call free_vmap_area() or vfree() on error paths, both of which can sleep. This becomes problematic if the function is invoked from an atomic context, such as when GFP_ATOMIC or GFP_NOWAIT is passed via gfp_mask. To fix this, unify error paths and defer the cleanup of partly initialized vm_struct objects to a workqueue. This ensures that freeing happens in a process context and avoids invalid sleeps in atomic regions. Signed-off-by: Uladzislau Rezki (Sony) --- mm/vmalloc.c | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 5bac15b09b03..2eaff0575a9e 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -3677,6 +3677,36 @@ vm_area_alloc_pages(gfp_t gfp, int nid, return nr_allocated; } =20 +static LLIST_HEAD(pending_vm_area_cleanup); + +static void cleanup_vm_area_work(struct work_struct *work) +{ + struct llist_node *node, *next; + struct vm_struct *vm; + + llist_for_each_safe(node, next, llist_del_all(&pending_vm_area_cleanup)) { + vm =3D (void *) node - offsetof(struct vm_struct, next); + + if (!vm->nr_pages) + free_vm_area(vm); + else + vfree(vm->addr); + } +} + +static DECLARE_WORK(cleanup_vm_area, cleanup_vm_area_work); + +/* + * Helper for __vmalloc_area_node() to defer cleanup + * of partially initialized vm_struct in error paths. + */ +static void +defer_vm_area_cleanup(struct vm_struct *area) +{ + if (llist_add((struct llist_node *) &area->next, &pending_vm_area_cleanup= )) + schedule_work(&cleanup_vm_area); +} + static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask, pgprot_t prot, unsigned int page_shift, int node) @@ -3708,8 +3738,7 @@ static void *__vmalloc_area_node(struct vm_struct *ar= ea, gfp_t gfp_mask, warn_alloc(gfp_mask, NULL, "vmalloc error: size %lu, failed to allocated page array size %lu", nr_small_pages * PAGE_SIZE, array_size); - free_vm_area(area); - return NULL; + goto fail; } =20 set_vm_area_page_order(area, page_shift - PAGE_SHIFT); @@ -3786,7 +3815,7 @@ static void *__vmalloc_area_node(struct vm_struct *ar= ea, gfp_t gfp_mask, return area->addr; =20 fail: - vfree(area->addr); + defer_vm_area_cleanup(area); return NULL; } =20 --=20 2.39.5 From nobody Tue Oct 7 22:38:28 2025 Received: from mail-lf1-f47.google.com (mail-lf1-f47.google.com [209.85.167.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A0CD82FCE24 for ; Fri, 4 Jul 2025 15:25:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751642749; cv=none; b=rxmUXQw3jSkMRSwhKKAkfSqjDGIHcxpkIoR/j4QabFlL4/9C5ALtgsu+lDEXPICDUEErFx/RAmSHn+jStQ8AgfCEMtyqikzqC/WUlQz4+M/V+9zyKNhcg8UuQQjFl++VqP3snwBdKuFAE2kxdFkUjc03UlDQxNuJI/7DCouCYTo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751642749; c=relaxed/simple; bh=QERXImmKTFcq5MvR6flFLm9XxD1DBZ2gtpjDf6XrFRs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=iX/7qdAPfHPVQ8xM5fizRumYTpaLdErTqvd3JaZNsr+gtxCi6VYYp09BxZLo2zPFcJ106tQ8/c+74XqwIkFN9WRgUff2eidWdi+WoUE/ns+tM9K3taGN6lbrxTaS1JPQwb/JeyBy4XWrfvGwkCMB1XSNI7Ys/VtGHxlz57djYiI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=i3Q3ccBv; arc=none smtp.client-ip=209.85.167.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="i3Q3ccBv" Received: by mail-lf1-f47.google.com with SMTP id 2adb3069b0e04-556fd896c99so774731e87.3 for ; Fri, 04 Jul 2025 08:25:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751642746; x=1752247546; darn=vger.kernel.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=arwAS3MnsbTZHt/wqS3QddqTZ/QZ8JyexXGr/bs6RJk=; b=i3Q3ccBv+bL0kNq3Xjo8E2+SQ4SAQ4Y/rDqB1ORZVvOm2AKmIZwOnVGcexhe6qR3dL pEyqLLK21DCdZuITia00r/SCAq+RoABLvnBecmxBeLzIH72uR7vY2A6MJifdh5X1giuQ kg8uc6iCGem2JFjVU32wqWekLc7vIuZG/B9o+CdFb/eMzOaCxMqtIzaOi5sYGbE8l8XC VKgSbs1p4PVMB0CS0VUVZ8dYGxctG42mwUop0czPaH3kLDD0x5eQuSa1v2WQUiW6G6gc T+X7gjM8mzfXEdzks5mZxPQHNm/GjuK6HguGln3QK9Nx+zBAI4hRhnIKuOK/2IfvSBib o/0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751642746; x=1752247546; 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=arwAS3MnsbTZHt/wqS3QddqTZ/QZ8JyexXGr/bs6RJk=; b=ZqX+00ZNNIkAgBlJcPPmP4J0nB92Rws5hdv1Z8fUeuz2RQqnNwG48FIclJisHlbnma Eyx3Lhvq1gkRXp5neyRO22dP83q6i51dFOzPC1DujTxO5RTZwZa2W9eI8l8n6/+xsUtO XG0cHh+o0ZThZn3tRZMkCz7LYtA0dwtAXY518J7KGlEqSMA8ulK15SbIVEX2yuDpbuKi 6rJk33AhIipINogNKU9QvRZgbbGgL77EFJshwarEzbk4mUvmWLJiorcXFPqqojh25p3q niz8yFJ0vMPSuD8tZNfvWwMnL9zjPuaLMIdObLF5hj1t9oCX+ZPmizCzm7babj4os9Nt 0+7w== X-Forwarded-Encrypted: i=1; AJvYcCWqELBm+Q4flPusX9tOACDcfgP+n2sJ3tWrr5OC4r7QuUlDmqG+7Ud8jUFBNJkEqBwu12ttdG7u3y8betY=@vger.kernel.org X-Gm-Message-State: AOJu0Yy1FcNm4X7Oy+qf/IAOp30bUDWgtOv423WI3FQZuxTPAzyxfzN0 5UTou1v6UBKK1Z4hJ4QzMdmw21WYg3g982vETNONOE2DaRz8HdVyFV9B X-Gm-Gg: ASbGncvFjbxOSUuuvzoIlky4S/a026oz4/otTnIHON3wRnxDlfUtpBEasG3XXzKzKGa IV6OVBk8eCHo1DuOSfwyBBWKM0llqz3gGBR32xs1UzfhxUIGOmvOuA1LsB70AaHUDZNCzem278C 0k9BOmxX21uCNEXfVfA6hFsDEH+b2jeMhz8KpTQ3InQhgvb/3Ys0HCCeHSHn697PtTyzOqoy5e5 B8+BSYCHXGpIGmS9EfX2Jqa7uKUiW5ywGSyLlz78hXYXh+vrKAxBCIfT9isYFBuVL5Rft1VCdJP w3AP8cHY7biqhFULYryHSOFvmAkOkiP/6D/gYTqYhfq0MwTUIx6BhNEvEQ== X-Google-Smtp-Source: AGHT+IEYL7tRLeQ9FHsJy0cpiiGVHfquXjv3sMFZffM/DIKO7uvCOChW4gRxbWFFqxpfUSQWnHPTig== X-Received: by 2002:a05:6512:e99:b0:553:37a7:b217 with SMTP id 2adb3069b0e04-557aa292c14mr873459e87.35.1751642745406; Fri, 04 Jul 2025 08:25:45 -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.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 08:25:44 -0700 (PDT) From: "Uladzislau Rezki (Sony)" To: linux-mm@kvack.org, Andrew Morton Cc: Michal Hocko , LKML , Baoquan He , Uladzislau Rezki Subject: [RFC 6/7] mm/vmalloc: Support non-blocking GFP flags in __vmalloc_area_node() Date: Fri, 4 Jul 2025 17:25:36 +0200 Message-Id: <20250704152537.55724-7-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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This patch makes __vmalloc_area_node() to correctly handle non-blocking allocation requests, such as GFP_ATOMIC and GFP_NOWAIT. Main changes: - nested_gfp flag follows the same non-blocking constraints as the primary gfp_mask, ensuring consistency and avoiding sleeping allocations in atomic contexts. - if blocking is not allowed, __GFP_NOFAIL is forcibly cleared and warning is issued if it was set, since __GFP_NOFAIL is incompatible with non-blocking contexts; - Add a __GFP_HIGHMEM to gfp_mask only for blocking requests if there are no DMA constraints. - in non-blocking mode we use memalloc_noreclaim_save/restore() to prevent reclaim related operations that may sleep while setting up page tables or mapping pages. This is particularly important for page table allocations that internally use GFP_PGTABLE_KERNEL, which may sleep unless such scope restrictions are applied. For example: #define GFP_PGTABLE_KERNEL (GFP_KERNEL | __GFP_ZERO) __pte_alloc_kernel() pte_alloc_one_kernel(&init_mm); pagetable_alloc_noprof(GFP_PGTABLE_KERNEL & ~__GFP_HIGHMEM, 0); Signed-off-by: Uladzislau Rezki (Sony) --- mm/vmalloc.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 2eaff0575a9e..fe1699e01e02 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -3711,7 +3711,7 @@ static void *__vmalloc_area_node(struct vm_struct *ar= ea, gfp_t gfp_mask, pgprot_t prot, unsigned int page_shift, int node) { - const gfp_t nested_gfp =3D (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO; + gfp_t nested_gfp =3D (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO; bool nofail =3D gfp_mask & __GFP_NOFAIL; unsigned long addr =3D (unsigned long)area->addr; unsigned long size =3D get_vm_area_size(area); @@ -3719,12 +3719,28 @@ static void *__vmalloc_area_node(struct vm_struct *= area, gfp_t gfp_mask, unsigned int nr_small_pages =3D size >> PAGE_SHIFT; unsigned int page_order; unsigned int flags; + bool noblock; int ret; =20 array_size =3D (unsigned long)nr_small_pages * sizeof(struct page *); + noblock =3D !gfpflags_allow_blocking(gfp_mask); =20 - if (!(gfp_mask & (GFP_DMA | GFP_DMA32))) - gfp_mask |=3D __GFP_HIGHMEM; + if (noblock) { + /* __GFP_NOFAIL is incompatible with non-blocking contexts. */ + WARN_ON_ONCE(gfp_mask & __GFP_NOFAIL); + gfp_mask &=3D ~__GFP_NOFAIL; + + /* + * In non-sleeping contexts, ensure nested allocations follow + * same non-blocking rules. + */ + nested_gfp =3D gfp_mask | __GFP_ZERO; + nofail =3D false; + } else { + /* Allow highmem allocations if there are no DMA constraints. */ + if (!(gfp_mask & (GFP_DMA | GFP_DMA32))) + gfp_mask |=3D __GFP_HIGHMEM; + } =20 /* Please note that the recursion is strictly bounded. */ if (array_size > PAGE_SIZE) { @@ -3788,7 +3804,9 @@ static void *__vmalloc_area_node(struct vm_struct *ar= ea, gfp_t gfp_mask, * page tables allocations ignore external gfp mask, enforce it * by the scope API */ - if ((gfp_mask & (__GFP_FS | __GFP_IO)) =3D=3D __GFP_IO) + if (noblock) + flags =3D memalloc_noreclaim_save(); + else if ((gfp_mask & (__GFP_FS | __GFP_IO)) =3D=3D __GFP_IO) flags =3D memalloc_nofs_save(); else if ((gfp_mask & (__GFP_FS | __GFP_IO)) =3D=3D 0) flags =3D memalloc_noio_save(); @@ -3800,7 +3818,9 @@ static void *__vmalloc_area_node(struct vm_struct *ar= ea, gfp_t gfp_mask, schedule_timeout_uninterruptible(1); } while (nofail && (ret < 0)); =20 - if ((gfp_mask & (__GFP_FS | __GFP_IO)) =3D=3D __GFP_IO) + if (noblock) + memalloc_noreclaim_restore(flags); + else if ((gfp_mask & (__GFP_FS | __GFP_IO)) =3D=3D __GFP_IO) memalloc_nofs_restore(flags); else if ((gfp_mask & (__GFP_FS | __GFP_IO)) =3D=3D 0) memalloc_noio_restore(flags); --=20 2.39.5 From nobody Tue Oct 7 22:38:28 2025 Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com [209.85.167.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ACE31307AC9 for ; Fri, 4 Jul 2025 15:25:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751642750; cv=none; b=gZaP4H//SnS/rHQ6JYxSXvrbdkETfkpPDIsEbeFzX3SVIlmykrZas8u8NYzkxBn21wvc5dqXT/70GnGSgxtdYrj0Pa310tfH+CnQqkHnJsJX5xR3JzuvruBQ8Ax+qeSzzCxXt4OQd8QGGEXwRUgyikeIqbwcy3tsTbWeoJG3FmI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751642750; c=relaxed/simple; bh=qdbcmnfi6BBagOQtQeWcXYCebYXtRv8siscZpl3YqSs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ueWXoLhZj/sGupXrAyEDP12MqOfyZlgEUam51agrC8LKIMC7pawgY2knyASp7YEPfQGgejs6YLn07l2PypNRpPu4JpgDbl3TTatS9pCQAPdtmxbmHguWZZ6Lb51mj9tlGoElnWGiT66bsoDXVUPtmWNkXrTumjMynaxKGV1wRYI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=aB8OuB49; arc=none smtp.client-ip=209.85.167.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="aB8OuB49" Received: by mail-lf1-f50.google.com with SMTP id 2adb3069b0e04-5561c20e2d5so1308106e87.0 for ; Fri, 04 Jul 2025 08:25:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751642747; x=1752247547; darn=vger.kernel.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=Kenxt5H/LkX1Kdgcu9dff1634Pox2bcA7pVcuxiSLYs=; b=aB8OuB4936SnwjW0Pe8curH/YYo8TyLrhzITvmA6FpeaJE+8BAtUlcVwX01rP3XXPs xmP22WqV5CA3HxGpCKkNr7fKibVXiV7DqlCaAjxaIpm2gGyUufSaPnc+dygaYpEe+Fkk QCXXQs2uhL74XTDPnMnbc72Giqu14OVHt+H2ivc4mvGsDCBjAAJtpoVEbj2Bxe8tD+Jx kGw8eZl+ymxZxVfxWXtPzXVN0lv6SCoDiygWkpLcN+bFCjxydREjAUZl7hTkRZInX+XX gE2wpauraestzFo6Pgs2egTsVt+pRH6Ru9GfrNhEAdfKGJKXDYAFzVCVS4KQtwumcF7x tbgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751642747; x=1752247547; 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=Kenxt5H/LkX1Kdgcu9dff1634Pox2bcA7pVcuxiSLYs=; b=jyGnaPZ6f1adbopTukVc6N9SlKR61CdnWhlKh9xrxAa3fFzd/3Q86mk088fnsxCUWh djnxKGewPtPsew0q2Qy06zK2sI9cMfxfZ4MxpVeXS/G2vFPwv4Nb8MpkXS97QKkKFKEJ N1usBkoaR06fXUiTSh5fPhBl3YdmSKiHdunK5awlHyV2Tpjt3ztMJESbZB5fIG9QsQBw ilfOKBUH+0F3b++SVR8tK9Z0snbsuqC28cCUKgMH5FBf8ak7SrhhNALKhie+MZa2O7vO 5oLaEwkN5NCfEvKoU8caTrjxctOCyA9CeNcyp4nPXGCfDWNH9hVVCTZKJw5Odq/w/Yw/ ZKBA== X-Forwarded-Encrypted: i=1; AJvYcCUUJhhW4KKdfeIYty1TrsMTLXUbjBEjtq39U3ZvdCz0elh4sDQTylXcbmI8vE3f256DVcXc33OGSOJ2zZM=@vger.kernel.org X-Gm-Message-State: AOJu0Yx9oCWdPHp+iTeeKxFEz6K+Ec3ilxcle1NDtyGAsx0Gffs6+eeR Jg+9GwlazCvUu37VNfVm2H94DJEhYtMhEmXcrTiBU3f7iPWfUcG2gI57 X-Gm-Gg: ASbGncsA5P3ZFnNn+r9+oRE0JxEgJgVB4XcSl02oRebOlJYMfiRwfDRY6lYB35tRkS2 JSKa5gSGLPGZXKjxUO2yc7AWiK0c4GmJtFj84lIUy+3KvzEcNet+dWWgAtBnKz/LjvJUmK7PC4U LxkVH/oZaM3s5wsxHxFPurfELrOCemXMJjyTUM0DGtbbmisqLOWw2NjMrXiLjCop9RNT1QokJEv xY7IE91+X1mdyabeyVw9gU+KoF78uTC0ka2M4GV5mmi+gAfz+4uXTVUD4LGRCWitHvB4DxAEhjD qBFyBwQkqnfOBo0W5AMW/lko0iHKrs4h50/pgtw4aKUWReeyF/AnegSDwQ== X-Google-Smtp-Source: AGHT+IG/HUixC6AiULlotmtiHBrwDZHuColKMq21lzt3LlhO52ExwXaVlOR9T0P1ss5qTdOAN6EAxw== X-Received: by 2002:a05:6512:12c8:b0:553:35f5:7aac with SMTP id 2adb3069b0e04-556dd1e4a26mr931907e87.48.1751642746367; Fri, 04 Jul 2025 08:25:46 -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.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 08:25:45 -0700 (PDT) From: "Uladzislau Rezki (Sony)" To: linux-mm@kvack.org, Andrew Morton Cc: Michal Hocko , LKML , Baoquan He , Uladzislau Rezki Subject: [RFC 7/7] mm: Drop __GFP_DIRECT_RECLAIM flag if PF_MEMALLOC is set Date: Fri, 4 Jul 2025 17:25:37 +0200 Message-Id: <20250704152537.55724-8-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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The memory allocator already avoids reclaim when PF_MEMALLOC is set. Clear __GFP_DIRECT_RECLAIM explicitly to suppress might_alloc() warnings to make more correct behavior. Signed-off-by: Uladzislau Rezki (Sony) --- include/linux/sched/mm.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/include/linux/sched/mm.h b/include/linux/sched/mm.h index b13474825130..40757173acb1 100644 --- a/include/linux/sched/mm.h +++ b/include/linux/sched/mm.h @@ -246,12 +246,14 @@ static inline bool in_vfork(struct task_struct *tsk) * PF_MEMALLOC_NOIO implies GFP_NOIO * PF_MEMALLOC_NOFS implies GFP_NOFS * PF_MEMALLOC_PIN implies !GFP_MOVABLE + * PF_MEMALLOC implies !__GFP_DIRECT_RECLAIM */ static inline gfp_t current_gfp_context(gfp_t flags) { unsigned int pflags =3D READ_ONCE(current->flags); =20 - if (unlikely(pflags & (PF_MEMALLOC_NOIO | PF_MEMALLOC_NOFS | PF_MEMALLOC_= PIN))) { + if (unlikely(pflags & (PF_MEMALLOC_NOIO | PF_MEMALLOC_NOFS | + PF_MEMALLOC_PIN | PF_MEMALLOC))) { /* * NOIO implies both NOIO and NOFS and it is a weaker context * so always make sure it makes precedence @@ -263,6 +265,9 @@ static inline gfp_t current_gfp_context(gfp_t flags) =20 if (pflags & PF_MEMALLOC_PIN) flags &=3D ~__GFP_MOVABLE; + + if (pflags & PF_MEMALLOC) + flags &=3D ~__GFP_DIRECT_RECLAIM; } return flags; } --=20 2.39.5