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 BF542C83F09 for ; Wed, 9 Jul 2025 13:45:27 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 12F8E6B0113; Wed, 9 Jul 2025 09:45:27 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0E05B6B0114; Wed, 9 Jul 2025 09:45:27 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F116F6B0115; Wed, 9 Jul 2025 09:45:26 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id DD1BB6B0113 for ; Wed, 9 Jul 2025 09:45:26 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 8DE26B73C7 for ; Wed, 9 Jul 2025 13:45:26 +0000 (UTC) X-FDA: 83644848252.14.76DE3B7 Received: from mail-lj1-f171.google.com (mail-lj1-f171.google.com [209.85.208.171]) by imf20.hostedemail.com (Postfix) with ESMTP id 72A2B1C001D for ; Wed, 9 Jul 2025 13:45:24 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=mtrI97Fs; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf20.hostedemail.com: domain of urezki@gmail.com designates 209.85.208.171 as permitted sender) smtp.mailfrom=urezki@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752068724; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=rl2Ay51sErJT4ZpyfX8LEyFp1MHSjMvW15ejxcEW1Sw=; b=VA5TTLsvZ4sWG3A20agNfZLIqDCLRH5BEROuGpoDQ2nxLXVmKe2iMDHmFyA3KBxl6NZ4WQ F+r+SL/bLMhdORRmzGc+hdzrKQ9TE8YWSasQxnjeaAcSwLWR+WurUnx80lzjzcZsgesVV2 8m6nzV280H58o0eADdBVA/hsd1OuTgE= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752068724; a=rsa-sha256; cv=none; b=IRn6zx0ELg/tyNOQGndfpGk9JMGZj1M8GA/zWbX+jd32hUQmHns6JW0Zx21ZGFiSweogBy AQhVEimZQ7vOHQbjfTMqkgFxmVXtpBYb5OAk3tD4g9MvCXil2fwaFv+grKBr5gKsGXVFCA Pxs343/8JTu5VQfxnu/dsviok73a28o= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=mtrI97Fs; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf20.hostedemail.com: domain of urezki@gmail.com designates 209.85.208.171 as permitted sender) smtp.mailfrom=urezki@gmail.com Received: by mail-lj1-f171.google.com with SMTP id 38308e7fff4ca-32b43c5c04fso9487841fa.0 for ; Wed, 09 Jul 2025 06:45:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752068722; x=1752673522; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:date:from:from:to:cc:subject:date:message-id:reply-to; bh=rl2Ay51sErJT4ZpyfX8LEyFp1MHSjMvW15ejxcEW1Sw=; b=mtrI97Fs8COt9f41Kk/5xskn1S5kRTXoBOcQ1PAZELiW1aplYM7HxtFb2KEcp5whrZ EZu8RQGm+opBh462pAuYVhSD9GliBXvnnbxTyIID0Hk1pWUGt+kXQv6bYAu5rm5u/TWE W1QbtsA97OSQFiuX1TbaiiGafTKj75++s/7AleB4/hwLLvJR2wqG9eBM6vljp8YNiAEm lk0LnFkv+tXVCxkNxZBbp+gEDG3+Ly+S4fuHa4RZyvkjv6mpXWmdq9EGgID58SYuNo/M +HP7tAakU2mxQqFeCg060u5oABXxOCL9HKRRQPNkWpIVzV8Lqh0Ukrm1XgeoSx9qlaFs F8YA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752068722; x=1752673522; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:date:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=rl2Ay51sErJT4ZpyfX8LEyFp1MHSjMvW15ejxcEW1Sw=; b=KWGtRpcbpV5I1wm8hq8FHFwXuNA+UT9YS8KAyAwqXMty31SmoDcMAfIPIXZtUxq3yx B/Qa+peCiEgyPqz3Cl5L4Gl+c2V7mtv54Q13X7ZajAv/hnxwOHU/uY2eFvRKT4TIaY8r bqEYgKICZa7fJPQjbxfLjqjkmeZyqMea78nz5DUJhDD+pU3GWOD4pMK78lXerFUu12zg tLkfzCmKCdEA/r2ZMTN5AhQUc4tW0MbZ4nI49iU1nmFCzyLEBU1vlbFwWoy0PSsAzAeN nnps+CVebTx6FQlRT9afWmNBsEvEFM5Qpz4Tnj/n+gDRzsHRN0j1obNC+HIMiueBTGSn g3tg== X-Forwarded-Encrypted: i=1; AJvYcCXk42i663GngrsQbWfV1/pUVumC9+BB5dXdu8Xk7kRFK++am1Hslfuj4i5rxw8HTWomYjYNeMIcYA==@kvack.org X-Gm-Message-State: AOJu0YzV+vzASi/iqW9+507B3LEoGuwe4MkCx5ImptBjFjVnzhGjyODH AGPU4fMF7j05PdiQWV7jh+4Xeo5IKyc5Eu8rB/mO4bbdNfkIA+vM5Q1W X-Gm-Gg: ASbGnctx2p6yzMi8EowBIp5oanxerg/T8/9jXenBbeEuCv9QlunxwOZgxiKxKdLt+Uk 8NOhgHLowSidGLs2eqb9l4VbCM0WZp88GV26DBj3bWdGWBCE7lJCwpRoB+hY76tpIuRPO6+p8bN GOzTqsqaKp3TpZ9CM6kJBJKVuHfH4QZzPfwsg/7ywZXaSwK+Q5JCLmAjDpqFdkdb9iE7kGbCLmZ QGDIsBqSC3+KHtxglTHqLpQkGrouojQAD4hZugCgm1JPzXw2a4Lq5BlHb1KDa59MTstbXUfJA7P 5Qi7nKkFKirLhqSmaaZB5QzkR5ZgWShT8O8aS9lgJ00DI8uZoXKXfQf27XJE0i+4gndrusYhtwr ZYHnVIOcnBgDbCNB1 X-Google-Smtp-Source: AGHT+IGi8++TCHA5FSSqpuYGQ5AI5OdHypdoHyXDrOFUg/kqI9oVUxommkDuHDOtIoAgTA2XsB6WcA== X-Received: by 2002:a05:6512:20d0:b0:553:2438:8d16 with SMTP id 2adb3069b0e04-558fb4442femr680882e87.20.1752068722011; Wed, 09 Jul 2025 06:45:22 -0700 (PDT) Received: from pc636 (host-90-233-203-171.mobileonline.telia.com. [90.233.203.171]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-556384c4785sm2005046e87.231.2025.07.09.06.45.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Jul 2025 06:45:21 -0700 (PDT) From: Uladzislau Rezki X-Google-Original-From: Uladzislau Rezki Date: Wed, 9 Jul 2025 15:45:19 +0200 To: Michal Hocko Cc: "Uladzislau Rezki (Sony)" , linux-mm@kvack.org, Andrew Morton , LKML , Baoquan He Subject: Re: [RFC 6/7] mm/vmalloc: Support non-blocking GFP flags in __vmalloc_area_node() Message-ID: References: <20250704152537.55724-1-urezki@gmail.com> <20250704152537.55724-7-urezki@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Rspamd-Queue-Id: 72A2B1C001D X-Stat-Signature: xnw1j1i8s61phnds8jhodxnewj4qt8ia X-Rspam-User: X-Rspamd-Server: rspam06 X-HE-Tag: 1752068724-573031 X-HE-Meta: U2FsdGVkX19gVlvtE6ghgQ4kd6blEHeMclwipAiFc5Wy7e60UU/bvDFl3taxa78PQVGj8M9Kf/OdWHmw9hmJHjwD4bhAljamzAgzEuM870kH6KcgMUQTqp90XjamHWtz4cS7LGcxRB74DDLhXORQTXcdEvvV3TE9+WIBASwiUuIADMxt3vLKYXSNPK52pK/llNfJi7usgY/WBRdo/OEqFMWu+RkhDVcHrt1OcJDa2BludKBP45LdWG2e0tJQtLWYeBiseJvqXjLTMVxLDW36aRKocL51UDxeDOmky7aDq9H47B9QxFrdqSDMy1puxfMa4NQXsh2eea4GK92gDkRYIgyDk/Z2yhOiBLvOJ/ARfnIE+ADsu5kP7OuFYQBYEUJqXQZ5fR+i5I66L/0nK5MaRmgmroq6swWb4kLG0m2VD47/sv2e+Vk59D7mFmdyebpW25k1QWDQbY/Oo5U4fhBZyukYxF91W1OvL4aumjkKGRRW8E/hpD04pMnqRkhKnWahSxQCj03gtyMsiMoo5hDIAKcRjQI2UvWR5AWwNZxGwGSm7kiCPtavESHMeCFUqNuVG/eEgANEpGGQqJ1ZesfB2agGZYByeuW7ScI42QTVlcjWxEQfHd5T/SzWOhSPdXeHA5RzydsTgVC+yjYp9VA8YyUSD0BokPT3wsQ74VRp946XP7/0czFFDMs0L4DcBquAtFMyAeLPXiHEPA7j6c2RjBRUtoCSPRHRAYL71Zia7AwlcRmux0cjP4xzw3V/q2sUFka2uRwYtbNk4fKBkqd2yjEjBfBVGMSoQOAGQeaa7wSkeNQUwW0kUwb3QJFjVMQiH93dxZoqNHxUzSWwTaLOPwsv6X330RDAthhuN6S5z+aEABQsE5dg+iJJ67Kx/bRrVrjn1Qiq+wYkkEnsOqLpLXClspaj7zBG+jsDPoXiceG2+m1JLxMDjoWEHHaHxgRbyWQEqRM7QAz0VtO1EqR I0AYRGVO yxDSDhng1wTL5g7oGDkRmkeLO9/EZVyrkVetxyrfEDn5sDsuz3BGvuzMK8kV0/LV9MPEvgZHU0/r1vDpZFWSbUnWpwtJMl8O2Fb40lJr1Z5tdQ8UiWPeZHL8NCYtDnXr5y+rl8BbkDDJV7E7+CRFRlxsQSGTtkGWY6QCYO5e9wQWz/ew5W9FrJSrO5J+GrtlwKgPUDRiBLKTySoLja3FAkFDStnndhNlW4fRIHN1VbLfQf4vDWNDK3Wq+lHObjX8MnsnBu2F18Pt+AXCXYQrqObWpe1oeT/poJVlltLj9C4DNj0fhcksTFSV31ou27dmFrl/+YkKmiBbIVmeBbwRJ8Gi/63Uw1wGuNxwYoH96aQYV9PDGdYAwokZyxnmdvNjR3UujI3+pxKqgWUOaIemvKMACFWCPHzVN8+ktBM4kvUufGrElgQBe/z2yEcLuSfBQ5HCA5OH8bcZJqjOXeQutglPE5lMl7ycoxDq4w9/9ItchZogMtQeFrO2YEsUx3VDM/WOSaxLkZoBVDAHOxIHjHY9BBg== 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: On Tue, Jul 08, 2025 at 05:47:21PM +0200, Michal Hocko wrote: > On Fri 04-07-25 17:25:36, Uladzislau Rezki wrote: > > 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 *area, gfp_t gfp_mask, > > pgprot_t prot, unsigned int page_shift, > > int node) > > { > > - const gfp_t nested_gfp = (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO; > > + gfp_t nested_gfp = (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO; > > bool nofail = gfp_mask & __GFP_NOFAIL; > > unsigned long addr = (unsigned long)area->addr; > > unsigned long size = 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 = size >> PAGE_SHIFT; > > unsigned int page_order; > > unsigned int flags; > > + bool noblock; > > int ret; > > > > array_size = (unsigned long)nr_small_pages * sizeof(struct page *); > > + noblock = !gfpflags_allow_blocking(gfp_mask); > > > > - if (!(gfp_mask & (GFP_DMA | GFP_DMA32))) > > - gfp_mask |= __GFP_HIGHMEM; > > + if (noblock) { > > + /* __GFP_NOFAIL is incompatible with non-blocking contexts. */ > > + WARN_ON_ONCE(gfp_mask & __GFP_NOFAIL); > > + gfp_mask &= ~__GFP_NOFAIL; > > Btw. we already ignore GFP_NOFAIL for atomic allocations and warn about > that at the page allocator level (__alloc_pages_slowpath) > Thank you. I will comment this! > > What we can do though is to add a pr_warn + dump_stack for request with > size that would require (in the worst case) page tables allocation > larger than a portion of min_free_kbytes (to scale with different memory > sizes). That should be plenty for any reasonable non blocking vmalloc. > We would have means to catch abusers in that way. > OK, i will add it. I assume you mean: unsigned long pages_min = min_free_kbytes >> (PAGE_SHIFT - 10); if (request_pages > pages_min) dump(); -- Uladzislau Rezki