From nobody Sun Oct 5 07:20:26 2025 Received: from mail-lf1-f42.google.com (mail-lf1-f42.google.com [209.85.167.42]) (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 7E74D245000 for ; Thu, 7 Aug 2025 07:58:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754553498; cv=none; b=o9mvpKjFp+XwDnDjQZtJ/bXnBUMxniAKUpd+3OzTxcVx+CSN+/p6IbLgPLAEVCZTGEMeAI2dsIzY4lDkVM0y2GJ+SioPwojx6VxuNTx04SdkOmWMdIe/5qDjEaEtz2FmTpm2dqLvLRkZSEykaeQJp4Uzad4ICbSWkX6kI2ts4as= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754553498; c=relaxed/simple; bh=uTR9bDHZ1Hd2G4zg1rYnqjGriz9dTts/Y6edsR9kBAc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Q8biNjJTeRfUTWpAZ9qCUQhbz2nZIVF/JAFZVtkI3eCKl4XjKOSLX1+tDQjC+GvVeCDrgwiV9rmuHraq+lhPi1hKlshaVB69INFeOPHM4p0IUm8K0vw1W+Sjmnppdxbr3CgJWRSvTlqcKiqbyLMAwdIjxalL2w8i+tCf7OE3EuA= 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=EMRD30gg; arc=none smtp.client-ip=209.85.167.42 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="EMRD30gg" Received: by mail-lf1-f42.google.com with SMTP id 2adb3069b0e04-55b975b459aso644966e87.3 for ; Thu, 07 Aug 2025 00:58:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754553494; x=1755158294; 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=h92qlRGpNpOttoa5peB/v55STRwn9jHtqjasT4/y+5w=; b=EMRD30ggib9gc4PD5NUMjHSKNBulkb4W53ZDImnVgNSQdlUnyQb8x8nXyLhNeQ8nco bwCacs5HoQBxvKCn8P9VGeeYMNWSiKkdqCQkjW+skRfGW1FSDx/E676C+I8qIjJ0M1sk euJ1zU5rqfH/TDgzkSp+NdvznGmavtsPAAGqS1tejR+QuVTe5zYM9pKv/QtLnFwrSy0C qCVmUWfSew7R5Sb6wuBUZFx+mBNdtTcRQPLjXa3YMcXflYOHtTyBCGGpsbYvKYyJu1em /rb7bwt5ETd0z1aqYS6eE/A2kovQ/5dqB4OTpRBhMAZHW0Yk6Ixytuu8Pi4hpYAWOSTM K8Kw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754553494; x=1755158294; 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=h92qlRGpNpOttoa5peB/v55STRwn9jHtqjasT4/y+5w=; b=uh8Yw2rSHB3PEf1FDA3AWjkcLYk4Pt3V3D27p9wKqoexZdVFIfZeeg5I+mbI8ar3g6 jJifHa3h1/aPAOovZJxUvjQAeefW7k2xyqjLgjuDTayCHQGbaqHdjg616WGBmUR5umMN e9YbqtSZEOymm8lavrRRODzoTgVgfkP0K2Kpl4Hb3beF/zCqmdjGaTBFNqw17wSaXK3G ybP1ZcPn6S2SdxRpGxf3qj/QZu92SObFYHaWv5/1tAxdMPrw0eXGo1BALgqejRBfKkWh WtldHfylfhRzj6tBdgrYX9NExiAZ9m9WPJWWVvfhOuSEqrp6oKTv/vWhNsV2sJ+CSJiG Q68g== X-Forwarded-Encrypted: i=1; AJvYcCVhTztOiqwvK+ibcwjBFbYV2IK006sL2WVRvSOASmnzaHDKOyR2BAlq/MK4Mt+PNiTy89dJ/CbrrooKhNk=@vger.kernel.org X-Gm-Message-State: AOJu0Yzp07fbXgJUINBzf4Bv++5VyIK+t8iRYOyOCDkwjNX5VvfmVAs6 b75XIhQldV7/Nc2DdBMg/DZZNTXo/dcgVqXvr1DGmH67wRaPlrggtNVz X-Gm-Gg: ASbGncv8DsgS0mvw3T6QkwE+fmhUIe+zSVjRh8I+6p3l56B06cLI6AMf9CFjsvTXkCa P8ZIPf+uq1Xzse8OZLJi88J2iavgJbP3/T0i2cOLA+yeyg05H62HBiLEwPQ3QQRKjRMSdn664cE IfnHAGPtalV0wXGcWvG84MrLxOhmXE2fyAe/nP03qo7mNlggmu47DzpXpVHr3P+368bPKtsn4z1 6LALsBaG6Gd3dXYaiDJO9mlEPhjrW6lIEtMhUEVf6g6z7VNmX4yllslnzKkQIyTDCnbVoyEi/XW TYtOoS+rFg0lK506uBZcd3BojyzPUs+q2gBVHzOwy67vEv397MImcUUB7EWo4RGHgXTDfPsNv0u mdPIkm7USGC3p1U4/hA== X-Google-Smtp-Source: AGHT+IFA0xGtyd8TAvISAHbUul+I0DeGj6jXQhulf4UCTriFlDW6HXVuVy6Cp/dIwNbD/wOAFCuoYg== X-Received: by 2002:a05:6512:3e08:b0:55b:7345:8386 with SMTP id 2adb3069b0e04-55cb674cc53mr612797e87.17.1754553493585; Thu, 07 Aug 2025 00:58:13 -0700 (PDT) Received: from pc638.lan ([2001:9b1:d5a0:a500:2d8:61ff:fec9:d743]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-55b88c9b1fesm2501995e87.96.2025.08.07.00.58.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Aug 2025 00:58:13 -0700 (PDT) From: "Uladzislau Rezki (Sony)" To: linux-mm@kvack.org, Andrew Morton Cc: Vlastimil Babka , Michal Hocko , Baoquan He , LKML , Uladzislau Rezki Subject: [PATCH 1/8] lib/test_vmalloc: add no_block_alloc_test case Date: Thu, 7 Aug 2025 09:58:03 +0200 Message-Id: <20250807075810.358714-2-urezki@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250807075810.358714-1-urezki@gmail.com> References: <20250807075810.358714-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" Introduce a new test case "no_block_alloc_test" that verifies non-blocking allocations using __vmalloc() with GFP_ATOMIC and GFP_NOWAIT flags. It is recommended to build kernel with CONFIG_DEBUG_ATOMIC_SLEEP enabled to help catch "sleeping while atomic" issues. This test ensures that memory allocation logic under atomic constraints does not inadvertently sleep. Signed-off-by: Uladzislau Rezki (Sony) --- lib/test_vmalloc.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/lib/test_vmalloc.c b/lib/test_vmalloc.c index 2815658ccc37..aae5f4910aff 100644 --- a/lib/test_vmalloc.c +++ b/lib/test_vmalloc.c @@ -54,6 +54,7 @@ __param(int, run_test_mask, 7, "\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,30 @@ static int fix_size_alloc_test(void) return 0; } =20 +static int no_block_alloc_test(void) +{ + void *ptr; + int i; + + for (i =3D 0; i < test_loop_count; i++) { + bool use_atomic =3D !!(get_random_u8() % 2); + gfp_t gfp =3D use_atomic ? GFP_ATOMIC : GFP_NOWAIT; + unsigned long size =3D (nr_pages > 0 ? nr_pages : 1) * PAGE_SIZE; + + preempt_disable(); + ptr =3D __vmalloc(size, gfp); + preempt_enable(); + + if (!ptr) + return -1; + + *((__u8 *)ptr) =3D 0; + vfree(ptr); + } + + return 0; +} + static int pcpu_alloc_test(void) { @@ -411,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, true }, /* Add a new test case here. */ }; =20 --=20 2.39.5 From nobody Sun Oct 5 07:20:26 2025 Received: from mail-lf1-f51.google.com (mail-lf1-f51.google.com [209.85.167.51]) (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 A4334244675 for ; Thu, 7 Aug 2025 07:58:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754553499; cv=none; b=SoHkd/CgwZVVhBeNlYHWfFgL0pWlEQmoykJ/i7mSop/0rOXIbKqdqXOYHMw53LzKmsagpTqgLcmLsD8rbMidy7jag4y7b7k+hPOWee0pxhW92H5yDPF6/NfUIbruCnQYTvf6XnH7qYczZF+wqdPIwsMszy8h4bi2XIu/a3z6IFc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754553499; c=relaxed/simple; bh=hKjTv87+Nr2Rn/nVC5Deq0ZI4g2Zr+VbZQrlCAsKSjQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=jomNy5rrHHEJiUDJt6NLXJERcDIazdDeo92aNMuVzbqii+cMaY/+yFgJ86tC81oO10C7TvXCX3hKvj3WNE4Joj+JySlmUCT4kOULcPrcQTc0LUuuG+bf1QF3dBUWgWTmfA+JAqURPbe9OJPs/MqS94zibXqPFKdCw0szbBET+V0= 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=CpeL1GzU; arc=none smtp.client-ip=209.85.167.51 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="CpeL1GzU" Received: by mail-lf1-f51.google.com with SMTP id 2adb3069b0e04-55b797ad392so799326e87.3 for ; Thu, 07 Aug 2025 00:58:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754553495; x=1755158295; 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=KDFnf8EI4upo742I8wxwbr7SIwCoz9KqQtqWzVuCI6Y=; b=CpeL1GzU3kTb8BnTiTxvX3XlsARbReSXGL98knIsMoHPlYK8pCkxXRsFKgYw5DPkSD Xt1dIi73UQInpcYKDtrLebaNbmruUZtyfFnDI/TtU53Xu+4A6VPXfBNLJCFZvA9RRtvn YlOTR/oHcIMy2Pyi2X/1ogwjrZj5nSQThkP48jGbUszuodaR3SCGnS34FUhf+N3Fc+3N GM86ykWGNPij605eGTxf8cQGp8/VjjHqj9vF/W3jOaJRC3L/KZNW4AMS3Ow3RMWKpFkB qbCWmP2k8B0ZOEU1c1rSG7sH69qE2+t7evpWvmpa1b/4ep5l4cfk6nZq/V/EfVSLEAZ8 IZ4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754553495; x=1755158295; 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=KDFnf8EI4upo742I8wxwbr7SIwCoz9KqQtqWzVuCI6Y=; b=aOnOGSO36KuX4XW5AcsJN3OHzk63e0H5vLpkkj33XfaT1ij5W9xQ0nm72PHnitqvc5 BfMVPp+V36ql10mz/KNJwCVNo9uB/XK7olErA/h64b9pcHAdTB68uMJed1+vh0k8Czte EXjFyL9fZA/5yhYu6Xs6hJ8J0Kn4yrGEaC4jbfreElV2xOX/9Vqj0JXzzdgszhew3V/d xHYvg8JhPGMDKw66oHEqPcm3fr/3YZ1pS9LJ12ZFlfIO4jiysoegAR8meJ4EBCtHUDpd nrJzPwwRoeVs31FywgdohsQGm3NH59/z7QWsbo1vYXBJKhH/YuhZbt/5bp+BKWnjLDW4 zQog== X-Forwarded-Encrypted: i=1; AJvYcCWvjP27we8Kan0ATht+zHkdgcb/ji589N721ekXOkwb0AdsZO7J8/+tbHGvLEi8bTXCtDGYGeMvu+5glW0=@vger.kernel.org X-Gm-Message-State: AOJu0YzOItv4aDP8qIZPiFGcM8umx2KAvgrLbUxfMF6WpXJwuFDQnotP hdOsjEX6NL2MaJR4oB2e7w4nEfY9GQo54DB5MISVtEFSsLjuDzH1DN1E X-Gm-Gg: ASbGnctM0y8n23ls0oeOKI2QzJ8iWvFSkBuMHAwXNCzZdTfj/IPRQvJrWH8oL1nYAAZ 9LAYtyGO3FPobodXLTd5DIAJDi5nR3vKLPV5ptv9fTVxM6qnRNEFYKoEVZVn+OoFsNbz1V5i6Yo dB280jyLYIem2pu5eBWzw2ilddAcuSJ6S6YLTn3X/TTPzd31mMu8N93kuj7gW13KKPtKCn8JpuI rOwqaYZRvh0iQyev94Mkf7yQQbaG2+x8cFrHCBFl9ybaddd9w/xn5V/WRZISxzvfgSpMSHBcUim Ggl2TZUS1b+Nq/OKlxK4wG7efQlgITszXcs3RbH0l608kB+c0iHaUMcRN0TUDtuLYJYDQBvPqby kpK3Wr3Ik/itlMit12A== X-Google-Smtp-Source: AGHT+IGLrJfn07j+Z/Q1+AZhXJEZJx78Z7HhlZXmk3MvvjRB0pkrjJdAKWHTqR2XcogNuGRLnleTog== X-Received: by 2002:a05:6512:3da2:b0:55b:8056:626 with SMTP id 2adb3069b0e04-55caf5fda96mr2199121e87.38.1754553494378; Thu, 07 Aug 2025 00:58:14 -0700 (PDT) Received: from pc638.lan ([2001:9b1:d5a0:a500:2d8:61ff:fec9:d743]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-55b88c9b1fesm2501995e87.96.2025.08.07.00.58.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Aug 2025 00:58:13 -0700 (PDT) From: "Uladzislau Rezki (Sony)" To: linux-mm@kvack.org, Andrew Morton Cc: Vlastimil Babka , Michal Hocko , Baoquan He , LKML , Uladzislau Rezki Subject: [PATCH 2/8] lib/test_vmalloc: Remove xfail condition check Date: Thu, 7 Aug 2025 09:58:04 +0200 Message-Id: <20250807075810.358714-3-urezki@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250807075810.358714-1-urezki@gmail.com> References: <20250807075810.358714-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" A test marked with "xfail =3D true" is expected to fail but that does not mean it is predetermined to fail. Remove "xfail" condition check for tests which pass successfully. Signed-off-by: Uladzislau Rezki (Sony) --- lib/test_vmalloc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/test_vmalloc.c b/lib/test_vmalloc.c index aae5f4910aff..6521c05c7816 100644 --- a/lib/test_vmalloc.c +++ b/lib/test_vmalloc.c @@ -500,7 +500,7 @@ static int test_func(void *private) for (j =3D 0; j < test_repeat_count; j++) { ret =3D test_case_array[index].test_func(); =20 - if (!ret && !test_case_array[index].xfail) + if (!ret) t->data[index].test_passed++; else if (ret && test_case_array[index].xfail) t->data[index].test_xfailed++; --=20 2.39.5 From nobody Sun Oct 5 07:20:26 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 ABB2D246BA4 for ; Thu, 7 Aug 2025 07:58:17 +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=1754553500; cv=none; b=MmcdIwKOrAO+Z7uV3Zwom4hOb8Y04z7UX+tRBa9UVJ3HE+aPWeaGDmBxQG4P1zJx68x0odbhc9Io9skX5oMEkoxw8lIW52mWAs9V+bx2P1WKoq5sJfZkEv13+ay3JeJOW3erlnGXbbW9T4dH73StSyxVtR2GhGxRPbu5yHLkJjg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754553500; c=relaxed/simple; bh=5r+RNMQi8dZuy+pKbnq+Sw7xVkYVTe33iZQ90lvhbJM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Il9DmxvH4Sg3AjJd7nzoEYkmeq1UbWTw/oKcQE115X8HBsJSXfBXYKIwkGe2YpKROHhcc+XUYl6ee6tD46QDfC4sSXpw6enUK1vEYZmBItFezwIq/tJQPWjdWJN0A2xea5iOKuk7Z7Q1+Q64MVlH6vuyFQRuUPIoBkKhyQXrktg= 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=ckIcgFRm; 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="ckIcgFRm" Received: by mail-lf1-f47.google.com with SMTP id 2adb3069b0e04-55b7e35a452so775498e87.2 for ; Thu, 07 Aug 2025 00:58:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754553496; x=1755158296; 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=kkgUcN0etkmDxWZW74kDtO38nl/qqGRKhgYS9gb7Qoc=; b=ckIcgFRmeVNoyh/8CcAGcKlgFAVW/CKtHtMUUH4X78CvTaY8/VavWw8KEymCBc3JXr 6XI3DIN2JF/vjlqtjK/fCWsQImfkEIh0dNZUvizJAFRGnumFSrpSQnk1v6Wm3r/lw52x ASrnW5nwk272x9b1+nOz+054BdbyX8UyR1Y+axYSBzJ+tqSkIMJlWAGMPMfyJ0wRm4S/ 31GkgEviMtJ603+/CwfmRocoRIv/F9OsYHVDUQAC8H4Qm4PZg4++A/uq/r8lZTdS6fna w1z2xk3Rys7j1o6ktl9zEhxTsYLCuCmBCiBsVM5rd0K/LoTfIDYVAi0QyKF1Z+ko6lR2 poXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754553496; x=1755158296; 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=kkgUcN0etkmDxWZW74kDtO38nl/qqGRKhgYS9gb7Qoc=; b=YCE+5Xpbh41RplPhAAciAuFxmDeT1W8GBv3iThlZurTWbe3rpbHFLKhEJsQFKzp1VR wMMOx827E+m+VUa3RLAbLsAj06sc6e8OytiUhQtidMOvGjBrnMrIyvserzATmJMTMc1X kXKP0T3n2o34Eh/tIopRs5Zt+8hlAar0HVhcJKGOhRageWFmIRSNVE5iLYfWHUi/pk01 GugiUgztOQcH4d1WgpRYRT4xWtlj/9pkaMeiqltuLPpy+aKuRw0AQqk2yhu8LXHcW4BT /xcizanm0L4mr76GRqsRz8vjkLOV4QXUnFrRoi13UGFYx2uF/xsL4XC3uuwnSCYEnO7X IFOQ== X-Forwarded-Encrypted: i=1; AJvYcCXtpqemJep/tXyYoQcRbjdO1VxDC/vcRSKl7+m8ZRg64ppeRoaQwzBRObTepqAs0eulrWYmP2qLn6gnxro=@vger.kernel.org X-Gm-Message-State: AOJu0YwKkQ8SRL80DHzpQxmVoNHUIqrG25X8SLNGaE3KPjuWN+4YH/zu eObqDpBhoTrRHjc/Ihu2b0fYHqLaPEWi1X1mYgE9Mdp2JnrdupCjnVtN X-Gm-Gg: ASbGnctq8AjVaLvkKZ3DDYOcXh5fL5cEOepYjutyL2RzUxE552eSpXocTguSjKD5vbo h2K608DGlBvfBzgam0Z0Q2J82W6gzLxblUP27YlNJZeuWLD8FUpuWHbT2g+/ToIopRa39/cOC8j 10phUosOn7RtbI5I3lQfMb+S3scl0jYjzgcsrdPqT2Wmmj62HvF3buTz5DgXZnk41HS8QSA3UoD lNGksifuUAN5fAOGejlbXMMK+yEAIy+SSR1dVDBy48iH+qKSKj9Em+pgQ7Au2Vip7D8GYggl9Oq JosiMebAaH4zPQVSa+Np3vX/z0X0ziZye3sXQdgXU3H/ElYsdNGv9+hwjAkLahFaxkXsGWzu9xb UQoJbdvkmUW0ymyeOtvP1OBQAt6Cg X-Google-Smtp-Source: AGHT+IGOcjP64D4GBMntjoVTHbHQlu7XVmla/+hekZ0Qvmh6kQrGAI+YoPjVAMyHSPY9JesHz+A3Jg== X-Received: by 2002:a05:6512:1591:b0:55b:8afb:e638 with SMTP id 2adb3069b0e04-55cb688b657mr632064e87.28.1754553495200; Thu, 07 Aug 2025 00:58:15 -0700 (PDT) Received: from pc638.lan ([2001:9b1:d5a0:a500:2d8:61ff:fec9:d743]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-55b88c9b1fesm2501995e87.96.2025.08.07.00.58.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Aug 2025 00:58:14 -0700 (PDT) From: "Uladzislau Rezki (Sony)" To: linux-mm@kvack.org, Andrew Morton Cc: Vlastimil Babka , Michal Hocko , Baoquan He , LKML , Uladzislau Rezki Subject: [PATCH 3/8] mm/vmalloc: Support non-blocking GFP flags in alloc_vmap_area() Date: Thu, 7 Aug 2025 09:58:05 +0200 Message-Id: <20250807075810.358714-4-urezki@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250807075810.358714-1-urezki@gmail.com> References: <20250807075810.358714-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) Acked-by: Michal Hocko Reviewed-by: Baoquan He --- mm/vmalloc.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 6dbcdceecae1..81b6d3bde719 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -2017,6 +2017,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 @@ -2026,7 +2027,8 @@ 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); + might_sleep_if(allow_block); =20 /* * If a VA is obtained from a global heap(if it fails here) @@ -2065,8 +2067,16 @@ 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)) - goto overflow; + if (IS_ERR_VALUE(addr)) { + if (allow_block) + goto overflow; + + /* + * We can not trigger any reclaim logic because + * sleeping is not allowed, thus fail an allocation. + */ + goto error; + } =20 va->va_start =3D addr; va->va_end =3D addr + size; @@ -2116,6 +2126,7 @@ static struct vmap_area *alloc_vmap_area(unsigned lon= g size, pr_warn("vmalloc_node_range for size %lu failed: Address range restricte= d to %#lx - %#lx\n", size, vstart, vend); =20 +error: kmem_cache_free(vmap_area_cachep, va); return ERR_PTR(-EBUSY); } --=20 2.39.5 From nobody Sun Oct 5 07:20:26 2025 Received: from mail-lf1-f42.google.com (mail-lf1-f42.google.com [209.85.167.42]) (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 2B254244679 for ; Thu, 7 Aug 2025 07:58:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754553501; cv=none; b=KXFUSwCIbJPoRsgI3/LjHnvC4zRecF8sYvjb8DBTlkCdheXgBbgB7PhZYDZ7bkkjFQkzJ3sbqk9zcHwidPtkspy+S3XmKQWY6RTGv6Jo7V97UxMhZ9NUzEshHKQndlpLfUzjXQCZbcKQ/EFc73S7hVuHY89tnWtHiPsVDEXAsKM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754553501; c=relaxed/simple; bh=StcpdyJ1gYyaSLGPjjN463sNq0rkXv8qZ4VH/a76lW4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=MhY29qmn9zk96pbnF7CmQRsK04hdaTROs84YyYbwgicUd+hOF7nWZOyIfzMzLPRahKyiDp+R5NXK28PGh0cDD5rYZEFTUfhg2i85NeAUAzM5QwH+z1L8TGoGqrM2pG1Jg8SumSNpd1dBUXFm0H/Vfk586Dz9Gdm0MMiyldPItSY= 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=PlQq0xq+; arc=none smtp.client-ip=209.85.167.42 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="PlQq0xq+" Received: by mail-lf1-f42.google.com with SMTP id 2adb3069b0e04-55b96b154bdso727745e87.0 for ; Thu, 07 Aug 2025 00:58:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754553496; x=1755158296; 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=KydXFGAE7W4DpoPvcZ+Z0Di5zFlR75RWumBb0izMzE4=; b=PlQq0xq+4te2m17AsPfQIamGRDCeUNCs2Ubdif8b8PlkHdNxpymWY/2GoJkUl5diw3 Q1G4qt0Emz5+9Son5l4/66q37ox2cxms2nlgrJljmKxJrFCkLlbHNsBjGkS5QvuxB+Ww 2bxe21NGuvSkWvcIqzkERerPho5aVmQYxshYJJhKiMG87S2Wszjz2KZFDl55vRfKJJa1 6j5PsP9/jiRn0m8jgG9WLDqcgSeo6DfwaRQpHyh8PPqVQmyLfLe+atnLfdlga2ZDyZiv 7sf21MM+pUA79+QK6Zx3susv2VIRGGzwit3h0Yu3uFk5V8pakE0LMCvnSo9iv6cjrY3/ KVOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754553496; x=1755158296; 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=KydXFGAE7W4DpoPvcZ+Z0Di5zFlR75RWumBb0izMzE4=; b=myjqpnx/GkSJ2mkQTpDW0TWgmLyAV3dEhHMqDffG4fH/Z8Hdm3xkWjURZ+vdSGdhQX 3rJ6k04BkFk/g/k/1tGuz6SlrVpHwKdf2Vl/csur5kmhRZwfcvLNbJgoPSpcRaEvAKeB cbInRlgqFVQbzSCZn+vgJr5VpAWvxgQCIsjP/zWQCn0UtvH/1cdmfvLjib71Z+2P9qEd e45Q0BLBk369/zuMibxduPgB2AEHO7ZuLkMp50/wwI0lSVqsKtnf0z0ud0OsXYQ3DX1c 37+QEwmnKhAbzJnxuesPn5IZWrfaWONWe9TwBgwrJTPu2+x7gUFvsaDs4ku2aUXIxaor C//A== X-Forwarded-Encrypted: i=1; AJvYcCWMkw0MYxWqW1qsUqiZUR2Qg7ErWL5mY4jHsLnq82ep7/wwEBz91eG9OavJicxqnIOowlXqmZRVWUHIfnQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzTRHCyKn02TK26oPMfQcYaKdOGlbdVD28b3byHVuJWw8f/1y7n aCNux3/SvKHbuFxUSw6giVg+HYo2wQ+/gOCiGqL/oy0O9QPdN67h8rE5 X-Gm-Gg: ASbGncv4KSUUjtVi1O6EfmeqadDSMH6VTvA0eRuit1w0D/j5vHMt+G9u+bBWjy37zwx /ALd1PC9mR3TF610TeSWPr3EofsjQEunJWp7t8iWcAyRm9sUds+bwhiKxZFFPZedlHFvLyH3khF ZueBExAoti5wIN07WWazLnsRrSRnyEXvxV4xYgruIa7b7IEZDKp3uy/6pRCQB4Ji2Vym7MMKP9f WOmGAonPGk8zUlmANd+M20asYbmi9DbxUdhRNAsnRWwTJl7+KXta6OHxTz49Ra41NVGH759eNBO N1WgaW+VllYLAvTORDd2PS3cjO3BIqm4Dbq+l/AWCLBEaXlpi4Y8dbETX7G2tlEVMjTVS8lXIGB phrrqn6wvyun3HF7HCX3HVYO6RaPw X-Google-Smtp-Source: AGHT+IF0q6rKChZ6oen9fNvbhVWsws8Z8fn91x3v64lQHUln2uy58X56NwoWxrXywEBePWrOTHfQTQ== X-Received: by 2002:a05:6512:3da8:b0:55b:81cb:9e5d with SMTP id 2adb3069b0e04-55caf3f37fcmr1726894e87.52.1754553496035; Thu, 07 Aug 2025 00:58:16 -0700 (PDT) Received: from pc638.lan ([2001:9b1:d5a0:a500:2d8:61ff:fec9:d743]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-55b88c9b1fesm2501995e87.96.2025.08.07.00.58.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Aug 2025 00:58:15 -0700 (PDT) From: "Uladzislau Rezki (Sony)" To: linux-mm@kvack.org, Andrew Morton Cc: Vlastimil Babka , Michal Hocko , Baoquan He , LKML , Uladzislau Rezki Subject: [PATCH 4/8] mm/vmalloc: Remove cond_resched() in vm_area_alloc_pages() Date: Thu, 7 Aug 2025 09:58:06 +0200 Message-Id: <20250807075810.358714-5-urezki@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250807075810.358714-1-urezki@gmail.com> References: <20250807075810.358714-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, these loops are not considered long-running under normal conditions. In non-blocking contexts, calling cond_resched() is inappropriate also. Remove these calls to ensure correctness for blocking/non-blocking contexts. This also simplifies the code path. In fact, a slow path of page allocator already includes reschedule points to mitigate latency. This patch was tested for !CONFIG_PREEMPT kernel and with large allocation chunks(~1GB), without triggering any "BUG: soft lockup" warnings. Signed-off-by: Uladzislau Rezki (Sony) Acked-by: Michal Hocko Reviewed-by: Baoquan He --- mm/vmalloc.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 81b6d3bde719..b0255e0c74b3 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -3633,7 +3633,6 @@ vm_area_alloc_pages(gfp_t gfp, int nid, pages + nr_allocated); =20 nr_allocated +=3D nr; - cond_resched(); =20 /* * If zero or pages were obtained partly, @@ -3675,7 +3674,6 @@ 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(); nr_allocated +=3D 1U << order; } =20 --=20 2.39.5 From nobody Sun Oct 5 07:20:26 2025 Received: from mail-lf1-f46.google.com (mail-lf1-f46.google.com [209.85.167.46]) (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 45615246BB7 for ; Thu, 7 Aug 2025 07:58:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754553502; cv=none; b=NH3E2CpalOTk8NNo+QnylO05jzIpeR+NxvjQr2PbTGC7ScNoFhxbETMPBsTr3741O8rldjzRljRntgWXHY4+p61kdjjJEs2XSJCC5uqZVn0gVkofREVXzcETuTmyN7hRbITqAuA7b421H2rDFKEBc3yqqrNJmUGcejwWIwpY18g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754553502; c=relaxed/simple; bh=iwzm1rWbMoRMdcFTGyRH0r5rvyQg7QrGglf0vOGkaxY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=cs491JAdtF2PUtEI1ASFMNXT4FqJMdAsDKgNnTywrEE0jezKpPpfkVXv/6cVsW10p//+yrpt2+AkoNW+IgxOyQml7yVBegR43/Qp7rFZJUnsXzI9K2aVFhyIczNiFMERa3qjmb998vYzzZMhdoif7RzGnYjXzRyT12NSQqkZL8I= 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=BSHeT49/; arc=none smtp.client-ip=209.85.167.46 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="BSHeT49/" Received: by mail-lf1-f46.google.com with SMTP id 2adb3069b0e04-55cb8ab1010so394293e87.1 for ; Thu, 07 Aug 2025 00:58:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754553497; x=1755158297; 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=nREQflrvBwfL+UFGeEdIo3dbjJ3DgqekWYe03XUGftA=; b=BSHeT49/JzvvpFbKws8WhYPND5vw19pBK6D+SN7zqnRmCmmE+G+UMvh/rqHEapNfNU 1mbqUK5nk22Td6BUVdlmtXFhnB6otMVLF7o2TptRY79m5dzIV9B3h+RmFDKs/d22xsNr QOYRmOum10LuLsvgWHk5RsGNTcqHfsjgsdvA1zg1uuzCPKoOaJKn+QpmAhsPWTwBdmvw WEcANIV49pr0A3d/DWyGzVkfLVXPRb0/wrYb39wUQbxVqW5k8Jh1oB6a1au2tMw0BPuU TkezHLlY7ucEuCIsvN+Gjki/lOsIpFcmVJk09KITjkB3nxNjpReF7AfhZJV5a8KlhAO7 iNlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754553497; x=1755158297; 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=nREQflrvBwfL+UFGeEdIo3dbjJ3DgqekWYe03XUGftA=; b=N8JIJ22xDZxRqVXAkrmf6rLbPKFc/4yFhpOtgq8H7Fj5VAEcRdbxibGBpnDbyEmfGJ +bx5/aF3l83va8s3cKHNTLcwckbU6HTn+sxHFAIsQLua9GsDa/DPASbseWZH16YMAOEb aC91rEMUjIWrP4S+2RFnLZW/BKELF7Xs6wIIpT+1NS78IZmJhEfYflo0nr3zSwqNb5Jc Sf9TthXG280KdA5Uh4C6MA9rqNIghTfyjLLYzPV8x31KdoNJfhJurOrMqFiUeIok+Jw1 qyhJRHqzCy9te2J2yhv1TOZQ1LkKcC2Wwje+9IU7al6v6Uxfb1xbmb9XJ1NXhC10CHi2 RK0Q== X-Forwarded-Encrypted: i=1; AJvYcCV7w++BMC28ES/BNchDrZakv85KKwUtVT1dLaQh4UsV2IL+/Y3P2q4Y6MfpG+H471P7X0BFh+Fr/F2u+Z8=@vger.kernel.org X-Gm-Message-State: AOJu0Yz7Y1S1Uqc21J1Xr3XS0tMZBkVEUN8yRpMYh3u0oWi5DgUUmxii aYeG4l/QJY5GqJSHGo677pwyibhxC1o+5MVpGSmGN2sxgdVzT0VDlvB6 X-Gm-Gg: ASbGncszCG8mvQi495zALP7/tWVDTtTU8mcwhISJxx8IboZyCEH7BFbme2hCu2u1CG1 KSeCQ0GjPn7UiO7VdUVicVAaPOT/wMWC9vr1ldTcdHfKhHJRlL9wJP6nGaqdi6mrXGYPHnUf0Mr MIVWx/jOgS7I4MVVePet1zHkbaYLwJioc5BOxeyfLpLGl123EwNTJbnkEC1y54QHFb3fr6SKA4z 156/xGUQ/hgoYcOkID/5gfJF6fEyP8EHOKJPrR4Ck/ksSw5oX8Ogcsjpm1JKlb0+rebMlTLZvjv 4ipPy9cNvmMfN6sWXi04sy0JVeMlc+8XK6s03qM+Tg6xIO59H9IVMHvI/GyTN9qJOqoSnk6MNSD HtZFO8NXkkxai6rHhiA== X-Google-Smtp-Source: AGHT+IEryJXst4JidWIfvCd2S+GQhQQ4EbuRxqM5PE7+ha8NOwjYhUIEtdfSHTFFaWpE24CuJ3mL4w== X-Received: by 2002:ac2:4c55:0:b0:55b:9406:17fd with SMTP id 2adb3069b0e04-55caf37acc0mr1578133e87.13.1754553496896; Thu, 07 Aug 2025 00:58:16 -0700 (PDT) Received: from pc638.lan ([2001:9b1:d5a0:a500:2d8:61ff:fec9:d743]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-55b88c9b1fesm2501995e87.96.2025.08.07.00.58.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Aug 2025 00:58:16 -0700 (PDT) From: "Uladzislau Rezki (Sony)" To: linux-mm@kvack.org, Andrew Morton Cc: Vlastimil Babka , Michal Hocko , Baoquan He , LKML , Uladzislau Rezki , Andrey Ryabinin , Alexander Potapenko Subject: [PATCH 5/8] mm/kasan, mm/vmalloc: Respect GFP flags in kasan_populate_vmalloc() Date: Thu, 7 Aug 2025 09:58:07 +0200 Message-Id: <20250807075810.358714-6-urezki@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250807075810.358714-1-urezki@gmail.com> References: <20250807075810.358714-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 b0255e0c74b3..7f48a54ec108 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -2099,7 +2099,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); @@ -4835,7 +4835,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 Sun Oct 5 07:20:26 2025 Received: from mail-lf1-f45.google.com (mail-lf1-f45.google.com [209.85.167.45]) (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 5313F25392C for ; Thu, 7 Aug 2025 07:58:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754553503; cv=none; b=ktpowefek+gKbr7QGlYzqRNHL2U5IOzvbBWOUge14yWgNalqkfPS0N/p0sCF6JTpZeVnbJ28FDTGL6YpcGGF3gNe1z1txufAObRPQqnWwEtJBoSpRup7pfaaBtklMhH167MPiRUmUBn+0fyXbw4+tM68mmoqTdRqpIuELeCIsn8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754553503; c=relaxed/simple; bh=apRRXYeiplBE93jYUg7Xf9XYU4cqTKkRaOgo6c15xfc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Oif+GGsAoweQImLJerj4OWfX4TJ6IMxxHTtZ5FtobM1ZQ+d4N/cFS3NLucLLyHIypEaliEcY1xvQSrqdyayHpVZEj6nrOLItq2SZoS+GtN1WKwkbH5WudwS33JUCSgDIQhciL40oLP1u0ZAlMmPw1JpWrHTcJlMQdK0aML43rWM= 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=YcU2P26K; arc=none smtp.client-ip=209.85.167.45 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="YcU2P26K" Received: by mail-lf1-f45.google.com with SMTP id 2adb3069b0e04-55b96b154bdso727771e87.0 for ; Thu, 07 Aug 2025 00:58:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754553498; x=1755158298; 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=92v33CSv8r4kGkVW+JHdelKw2kmK/6H34ueeVfUhm64=; b=YcU2P26K239RVthxctz3v7n6rVVWOgyzf8r2OECMPNf/zsNreNwdBDK5uClY+1xC7A QGo5SaQQrP24+pdUU8qdnIJMhuBi6XVAQcfNqY07Uhc5PKinPYYXDFhGyzXqi9TaQF77 nUlAX3ElA6V/Y7FUkPzsBImjh2loWPABkuL708eAGLEifTudplI0QM3uzhHMqwOfmsE0 k8jjj1+XxlJx0PisbKPh5gAYlBQ3X2/7NjBlAbxhL3DCI6JEDaq7czUt0YiNIlvDAiJN FkUGsHHenbCSByw2ub5n8URXEjp7ynCh8i+1rF83VtCOgqGK+7NNVqa/U3PxOkOQ+lsk T9aQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754553498; x=1755158298; 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=92v33CSv8r4kGkVW+JHdelKw2kmK/6H34ueeVfUhm64=; b=qDoATHOragy8gT7dqsMRrR7DETUekYBRodX6JDvZ5NbfRwU5NE2b+8DI8akeS2xtW5 7CdUmagV6in97wRWp71lyhRdmuKHfy/CtTRC64+HdkS6oYaaRykdrgJH17OxiJmU/BgJ XG0V5urBgrXSctU90BOLhxw+40D2ZGCXkRJSk+Eb2wGYknjBGWOw82htD9gipcBrhw0a bwFCgCGp70l+lwu4mYs/NXw6Rta0Cf9IAf6SBWACF7XegqkYoHPz5plAR+jLjeND/10x BbzveP8Cb+L5X/fKZ1DHvfHSTUme7t6EZA2aBrxyyP793DjN1q1LEZdwgsjFvI2dd1T0 ckqQ== X-Forwarded-Encrypted: i=1; AJvYcCXVWc8z8t0q4wnJWXbZIUG1Qg8hw358VbE3EsPlamSl2gVBREUGV68QsZqgB7O/Pe3ER+hVykLCzxXWl3I=@vger.kernel.org X-Gm-Message-State: AOJu0YzGPpn5GLmFoI7yRGKmQ73vKkwUpjFD+tQgzDuJWwOQiQ0UbVvl v+1FlE0zWYDCEw3a57fjHbxWdcZTXtHaoopdQdn4n55l92135UKFudgk X-Gm-Gg: ASbGncsksR8E981F1x67HoprvvKHUHd/887qQc9IQTkekmKbFnzkWsnILv4tTWS9zMy i2PmcWRihS9n/TTFdmey7nLsQ7LsAhAYbvylq/IqEjIMA2sEXpmGtZo+tKx/ryzTaHs0xivzR+P IWTbI25lCWyqEsuSiUwkYDXjhfJ9hfuoNBmGB/e7e58dWxE2vLIwzzzKdl7DO5V9VaKyz7F21Aw PlA2L1p5mEXQ82hRfxgh1jqjKRGxOz8cixpWShxWeEswz5HVMSu2VcCuc/fCCfM9SomLTDqyuBR pi0Df5g1eXVV4+B+VyhYT87D+FaDYPtuDYPdft1Xn/bT0h9/hfAdPb4gY/QzSmMupuuglGWcYqn xYV7sXPfKNINUepRoq35/6MjOJH1P X-Google-Smtp-Source: AGHT+IHUJ3cTDOCPrqigsEQiSm6trPQffBeNpREX4rEWPP15KbdVteh5zNUFssZk/aYam+sMxXY/jw== X-Received: by 2002:a05:6512:2306:b0:55b:75f0:1b78 with SMTP id 2adb3069b0e04-55caf3dfce9mr1937761e87.41.1754553497729; Thu, 07 Aug 2025 00:58:17 -0700 (PDT) Received: from pc638.lan ([2001:9b1:d5a0:a500:2d8:61ff:fec9:d743]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-55b88c9b1fesm2501995e87.96.2025.08.07.00.58.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Aug 2025 00:58:17 -0700 (PDT) From: "Uladzislau Rezki (Sony)" To: linux-mm@kvack.org, Andrew Morton Cc: Vlastimil Babka , Michal Hocko , Baoquan He , LKML , Uladzislau Rezki Subject: [PATCH 6/8] mm/vmalloc: Defer freeing partly initialized vm_struct Date: Thu, 7 Aug 2025 09:58:08 +0200 Message-Id: <20250807075810.358714-7-urezki@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250807075810.358714-1-urezki@gmail.com> References: <20250807075810.358714-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) Acked-by: Michal Hocko --- include/linux/vmalloc.h | 6 +++++- mm/vmalloc.c | 34 +++++++++++++++++++++++++++++++--- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h index fdc9aeb74a44..b1425fae8cbf 100644 --- a/include/linux/vmalloc.h +++ b/include/linux/vmalloc.h @@ -50,7 +50,11 @@ struct iov_iter; /* in uio.h */ #endif =20 struct vm_struct { - struct vm_struct *next; + union { + struct vm_struct *next; /* Early registration of vm_areas. */ + struct llist_node llnode; /* Asynchronous freeing on error paths. */ + }; + void *addr; unsigned long size; unsigned long flags; diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 7f48a54ec108..2424f80d524a 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -3680,6 +3680,35 @@ 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 vm_struct *area, *tmp; + struct llist_node *head; + + head =3D llist_del_all(&pending_vm_area_cleanup); + if (!head) + return; + + llist_for_each_entry_safe(area, tmp, head, llnode) { + if (!area->pages) + free_vm_area(area); + else + vfree(area->addr); + } +} + +/* + * Helper for __vmalloc_area_node() to defer cleanup + * of partially initialized vm_struct in error paths. + */ +static DECLARE_WORK(cleanup_vm_area, cleanup_vm_area_work); +static void defer_vm_area_cleanup(struct vm_struct *area) +{ + if (llist_add(&area->llnode, &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) @@ -3711,8 +3740,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); @@ -3789,7 +3817,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 Sun Oct 5 07:20:26 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 B665D23C512 for ; Thu, 7 Aug 2025 07:58:20 +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=1754553502; cv=none; b=ssf9BneaXGOWHETPCz6fX2V3Vkr4jY0oAuL3Sk8523dJvzDCChCH8Yn0evmIHTV0gtQV49b67zTjI8F+nM1+CpkxuaPAGKAplZ7bA4mP+ly5Oy0F8+6r5Us5s40aIsyHhwstkEh/MfIJWLVEPUk3d0vQ+WZcdias9R/pmSchshg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754553502; c=relaxed/simple; bh=EnCnhUOU3ozD2hOZtAn17B7WhM+7c4v3MBW0V/DSNh8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=NxZLyWy6fRudk4RVnVcCzH6pMgOFt2vm3m1Wy+OBN+uTqLpdAELxsf3y2ktpf//9z9gvYsaPOvu0G+Q5hLLBt307WGFqARu449jogQN431R1lf8XVnNtfa9mx3EUr02QdVMYd5+qsYWV+gy+Bke6jADZMWmIP10ljytYNP1opeU= 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=VfPTS2E/; 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="VfPTS2E/" Received: by mail-lf1-f52.google.com with SMTP id 2adb3069b0e04-555024588b1so808551e87.1 for ; Thu, 07 Aug 2025 00:58:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754553499; x=1755158299; 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=PB2hdcyBc78jv+lWchIG70ZsML6HrtP/MWqUFpv15TI=; b=VfPTS2E/FkgnANaQCWxGD1EJfZr8PnptztmzsGakn/TpZNkqsMF2y+CrcmAQ2vkWNU WwMkrDaZv9OqcMPcufyIq6712VOxZjU1bo0Tx8bL3TPnu2K4HM/plJoR/Hl4HYUK7sQq rM5jH8wRhs3WS1EgeLlzOv6yJ1WUqmrpRzEZLzwGXjzMdPaL2pxxVchXjQlgWzttyT4d kM7mq1etrGPG84+jq//mvSCoFKwT/ewpUCm4U9I4j75vXqvkg7u0xFsFh0JiTtKzXsA8 HX3vZVYKQGQlAvNvGIMU6Xh9GRKpY1XKTNQf7lzTrNS3nB7y3NjgbyNF6mI5xSZYQhpu y6Lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754553499; x=1755158299; 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=PB2hdcyBc78jv+lWchIG70ZsML6HrtP/MWqUFpv15TI=; b=sP+6/H3vxGTnMb1qVNSyFDR9UyhfdcAwTL4sCM2JfIbVm1dfzmeUmbWRbt/g3TNxHY CItPlE57GRT4bowooCgo53PchKT9OaPUmHoppZwWSyGtDIwebGwAz98UnrxfHJgiPN+V wJi3mzJ4bbwsHjlH28wb6O0y5ho7e/GBt/0qjk+MtMvRMSHNUa5nDW+RTk968RjDCIQb ivWv/aRCWemat2WiW1cS81Uyq0p2McK5mzvVPPXMxm249bPL24v7EnLbZrZS9Fc0QlbK TQUeiwfeSaGOLJl/ilioXsbsbG8u5MGCMi7jIYXWeIW0OkXoLeMLMMXXgManMhjgjZ4L ZZXg== X-Forwarded-Encrypted: i=1; AJvYcCXV2pkb8MdK6wCJL96Yh0EWXVBffYSwi4bEZ4QCLnj96tvT/VRggXDcWw/OBFXkSRazmxjYPv8aHmp08Pk=@vger.kernel.org X-Gm-Message-State: AOJu0YxwlHGRVE3sq0ChL58La47+LJdb8DLqn5ZgJZHrGi/qxfkgsqNd 8QtV9mEiHjG8WCNR06ByAULtAJE3Y7h3ScPYaUFABUV8UzokovLmjpMk X-Gm-Gg: ASbGncvBuWfUicA4tHS9mwt9gJVNnJOYdSB9YAPqf2GYaZuLcFDz18iGoUXL3UlS4N6 M+4H4J5mQrhHjCGnud6rHMScjRhqGWSZ9GqSr0NgQYUBS19VoX97hnFf58b5J5Prj08FVSmjA6q 9AkNNi+d1MF2QNOO3OyVnYojG3VPqDqO1BjZ7rg6NqT+DapAxXHB8Au2NrmGvSuKlTOrrUhYuoS 6buaGyZr8UW7JRnphbzk6jDLsK7FDUGnSLMVhBr9NsC2jmv3jACu877eLPFy8O+eQCeQEzedvMT YpMXKkWTEBqLgVtRqOMLtTG6cwJUAmsKTso9mGfhnaq41xrUdFnXvYlalfbwpf/Ws8k6jS9SQUn BG+4oM9aiWaHrK9iV4Q== X-Google-Smtp-Source: AGHT+IH7eNza3QdzdJI0nkjydHqHWK39WdUxuso+aZG54nOcbhurwJGo0pLdj+Omq2eD29gZqs9iEQ== X-Received: by 2002:a05:6512:3b07:b0:55b:872f:d732 with SMTP id 2adb3069b0e04-55caf5f3bc2mr1863131e87.26.1754553498550; Thu, 07 Aug 2025 00:58:18 -0700 (PDT) Received: from pc638.lan ([2001:9b1:d5a0:a500:2d8:61ff:fec9:d743]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-55b88c9b1fesm2501995e87.96.2025.08.07.00.58.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Aug 2025 00:58:18 -0700 (PDT) From: "Uladzislau Rezki (Sony)" To: linux-mm@kvack.org, Andrew Morton Cc: Vlastimil Babka , Michal Hocko , Baoquan He , LKML , Uladzislau Rezki Subject: [PATCH 7/8] mm/vmalloc: Support non-blocking GFP flags in __vmalloc_area_node() Date: Thu, 7 Aug 2025 09:58:09 +0200 Message-Id: <20250807075810.358714-8-urezki@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250807075810.358714-1-urezki@gmail.com> References: <20250807075810.358714-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: - Add a __GFP_HIGHMEM to gfp_mask only for blocking requests if there are no DMA constraints. - vmap_page_range() is wrapped by memalloc_noreclaim_save/restore() to avoid memory reclaim related operations that could sleep during page table setup 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: __pte_alloc_kernel() pte_alloc_one_kernel(&init_mm); pagetable_alloc_noprof(GFP_PGTABLE_KERNEL & ~__GFP_HIGHMEM, 0); Note: in most cases, PTE entries are established only up to the level required by current vmap space usage, meaning the page tables are typically fully populated during the mapping process. Signed-off-by: Uladzislau Rezki (Sony) Acked-by: Michal Hocko --- mm/vmalloc.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 2424f80d524a..8a7eab810561 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -3721,12 +3721,20 @@ 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 and "noblock" flags are mutually exclusive. */ + 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) { @@ -3790,7 +3798,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(); @@ -3802,7 +3812,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 Sun Oct 5 07:20:26 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 76C8C24C06A for ; Thu, 7 Aug 2025 07:58:21 +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=1754553504; cv=none; b=LqjJUfJPiUUxTgSJ/bGvzcJ4mzMJLpBunV51bsdt+mdXNTCO2Sk/mbzAH2X6MLgnK1iWRKgwvnfcpsNK1Zjx35ZhTCL+1mibSyMnM0YC7x/jVrYVEtH1xvp4k+Z/hv3r3mmSac6L0YH5R8dP1c1mWinJWefPKJfsWb6o3HHMgvo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754553504; c=relaxed/simple; bh=TvQr2RyUocSFiKxvTqKWoN2lucqADlstvP8cqkf6nBs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=snSEt33vFFQCnv9ovbhqYEJQobgOw1hkEf+m2WZqANxAemvx5ZSwOVDNQp7A2HsdRYhm+LrhRHAbalkf+7xoIFus3hqeXglGV1fndlg/TljLDA4Mjo/cmE6cHMweGtvMos+HfH8GVowVUfsf8yAIop89xpyWnQsZasYvoe/t7z8= 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=E7InA4b5; 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="E7InA4b5" Received: by mail-lf1-f50.google.com with SMTP id 2adb3069b0e04-55b8bf653dfso846234e87.0 for ; Thu, 07 Aug 2025 00:58:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754553500; x=1755158300; 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=oVukRiidJtnbsHfjBQsGQf+AgMjYijGPFu00oV3qGko=; b=E7InA4b5K0/mFEqQSXRuH71TysAGHjMEtBBtecJ/hBDVmFIc/SV6o6JpYBDtofbxxh Hzon6oYMGhRbCjjAGUuzaSjNfrgN0bRR4gau/r+oalJTqw38oWhllRnDeRH0hfjV9UCL gxizqO/R8hx+s3+XwXPMflziezHbQQ7idmGaVKTaXzyVW9jjC+pxwG2WvPsx9X8s8h4b g4l+wfnwmLax9WOufUjq+V42ALrtFJ/T6DsImJRCF92vVlr/dr6xSyB8siMQIAXGaRnv N+MVzN06t0SiE04yrf72ecPY/ZnbmeOstOn/HZ/y46FB1th4BBKRfGo8GdcGaibee6WR zIQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754553500; x=1755158300; 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=oVukRiidJtnbsHfjBQsGQf+AgMjYijGPFu00oV3qGko=; b=WViRJabm+05wdqEWFIoauHiTx9yDhOMVYgh2dFjSis7IZ06R9HX7q9+x3wYeI4KgVO pJbDPmVTsjvf9yK1o1pN3S/hrPORD2pMbhT6O3EkYo+zj5ZTWBt3qSLJYF1blsldJPZ4 hnWsxZDSyQnA3UpqYPZYA+PpiBaWSPsD3cmjyCyQr6nWGfZdx2kj9Cx+t6kb4pbSSAuN ickURjtbgDw76jzkcMMRsADTUyVK86KbQiTwsxpIdhT/8JLc84f7nd+f//B1ZGKw4yIF yG1uGrTBJjwdUppIe9rhsTa3QX7LAF3e/PqjQXGHTrjKGWa6doGOVC5zjhLLMRfz0K8Q Kf3Q== X-Forwarded-Encrypted: i=1; AJvYcCWWKLsepurmIgwAQu2oQYCyLdauqBZxWGn3+eFVVa1L6Ymlx59E7lPenW2b45gWjdAGe4V575vYzT4Y6jQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzWDd2zIog9bVKcaxP30P44aP97ORibCegIZoFAkWVqFQ4KVmB3 SonJxTp6AfgNieFrInS8HjjGTHKPFQgj154Q1cpXXbbsrYFJR/OZXalS X-Gm-Gg: ASbGnctwwHSH76z+q2ACPPaKKTo1f4T9st4KOAwRfkCS4PgyqW005Iqgwe/lULH8X18 ZxI6HW7n1bxGSUWj+wIza69SFvQpzPG22llyTkqC+KmYppfCMdhfX9g0sgiS4OpBy672gTJBetZ 9O4Fe83t6G638XGbRPSJmaL8wGudy3aTIRDPa8w73yqEF6FX3BMmoJwf1mB1dOP3SMkNsoelK+D Sh14jQQk1TkNOQ9O5F+Vz7paE2i/bxaOlIr20ukRRtH21hXP3zXjRIxMcKGwe4eZ6r/HaI4ktQS f6KJQotpI/tp5u9iWCD17A9Pgp5RzTC3qQ9BiQHdABKEQUcEU/GtptZgooCZ/vglO1tlVzZRMDB z7y5jMH0USIwJh51pqA== X-Google-Smtp-Source: AGHT+IHOkzVtTGSJTwNmbg3z+KP8NHPcTU/o7KzFNOnpCVXQwOy0R5xTlB2QHMbSZDCe++0b21e2tg== X-Received: by 2002:a05:6512:3b07:b0:55a:4c3a:b11e with SMTP id 2adb3069b0e04-55caf5d7b8amr1802321e87.30.1754553499405; Thu, 07 Aug 2025 00:58:19 -0700 (PDT) Received: from pc638.lan ([2001:9b1:d5a0:a500:2d8:61ff:fec9:d743]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-55b88c9b1fesm2501995e87.96.2025.08.07.00.58.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Aug 2025 00:58:18 -0700 (PDT) From: "Uladzislau Rezki (Sony)" To: linux-mm@kvack.org, Andrew Morton Cc: Vlastimil Babka , Michal Hocko , Baoquan He , LKML , Uladzislau Rezki Subject: [PATCH 8/8] mm: Drop __GFP_DIRECT_RECLAIM flag if PF_MEMALLOC is set Date: Thu, 7 Aug 2025 09:58:10 +0200 Message-Id: <20250807075810.358714-9-urezki@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250807075810.358714-1-urezki@gmail.com> References: <20250807075810.358714-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 2201da0afecc..8332fc09f8ac 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