From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2D7C3383C8C; Mon, 6 Apr 2026 14:22:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485344; cv=none; b=WSDvXnxHX1awV8BzaUOGVH1KMx9EN7K30NI0X/1DT9d5otbCfHz/2uDjG/VnUZxS4xnk3AB2/3XwyjNKE3dAkIFrqPNnXtCLrjEq6kEX1KQ/q0ZxG2jryuuMBIbflGY5VeR1M7YTdVrjIaQ1bJ13GzrozaslxRTKahvkKpAKwcs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775485344; c=relaxed/simple; bh=C8Qz87BGrLBhc4P4E9wehTmUZkE5iKzjerVbkLBntAU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=moGA6URdYvtykctsCb5o7fUoJXsZY/YjtnarZ/i1+ObZMrMSOWh70h/23D2NIQuB6cTxi33qJtBzqBslfyIi6s9yxV7c2Bd9C8AtPo8PgYgPHgW1WhcPL2gEGqE08868qZ0u2A6l0tiakpRV1KnYT6VtdfwzDqfRq5sxQ3DsTB8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=R+f2wWK1; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="R+f2wWK1" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BC790C4CEF7; Mon, 6 Apr 2026 14:22:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775485344; bh=C8Qz87BGrLBhc4P4E9wehTmUZkE5iKzjerVbkLBntAU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=R+f2wWK11uSqkm9w/gfOoe4ZmrpHmrkIcM1nMH2cBjS9dSHUYp+bLIQJ/Tbl8vS4q I5EwAxRWOxcIYqXLtvkMw5zFRiDiugCF9S5eFV7eqRGcMfuBBk4qTA4scRyNVDtZdV otJ46/4U20iAcoCWzjRkv97RyFLYbyqJkRglCuI2PUO9BckpRA4QBpFMUG40/670VB xWlvyefHf3tLItwxLBIz8oTgKU7jNhkwHB0GYNyxnC+ZCkIez7SI+KnHiclZBFrKMt +9Gd/J8NUtQeORxVoxKNj1yD5PKwV0d3JP7w8xDE3v9mRqUyu7gLb1t0IWDuzuQGHT jPMFiLjWpYReA== From: Mike Rapoport To: Andrew Morton , David Hildenbrand Cc: Baolin Wang , Barry Song , Dev Jain , Jason Gunthorpe , John Hubbard , "Liam R. Howlett" , Lance Yang , Leon Romanovsky , Lorenzo Stoakes , Mark Brown , Michal Hocko , Mike Rapoport , Nico Pache , Peter Xu , Ryan Roberts , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , Zi Yan , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 48/53] selftests/mm: uffd-unit-tests: add setup of HugeTLB pages Date: Mon, 6 Apr 2026 17:17:30 +0300 Message-ID: <20260406141735.2179309-49-rppt@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.2179309-1-rppt@kernel.org> References: <20260406141735.2179309-1-rppt@kernel.org> Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: "Mike Rapoport (Microsoft)" uffd-unit-tests skips HugeTLB tests if there are no free huge pages prepared by a wrapper script. Add setup of HugeTLB pages to the test and make sure that the original settings are restored on the test exit. Replace exit() calls with _exit() to avoid restoring HugeTLB settings in the middle of test. Signed-off-by: Mike Rapoport (Microsoft) --- tools/testing/selftests/mm/uffd-unit-tests.c | 31 +++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/mm/uffd-unit-tests.c b/tools/testing/selftests/mm/uffd-unit-tests.c index 1a33db281f8a..20e1829db91f 100644 --- a/tools/testing/selftests/mm/uffd-unit-tests.c +++ b/tools/testing/selftests/mm/uffd-unit-tests.c @@ -305,7 +305,7 @@ static int pagemap_test_fork(uffd_global_test_opts_t *gopts, bool with_event, bo if (test_pin) unpin_pages(&args); /* Succeed */ - exit(0); + _exit(0); } waitpid(child, &result, 0); @@ -773,7 +773,7 @@ static void uffd_sigbus_test_common(uffd_global_test_opts_t *gopts, bool wp) err("fork"); if (!pid) - exit(faulting_process(gopts, 2, wp)); + _exit(faulting_process(gopts, 2, wp)); waitpid(pid, &err, 0); if (err) @@ -827,7 +827,7 @@ static void uffd_events_test_common(uffd_global_test_opts_t *gopts, bool wp) err("fork"); if (!pid) - exit(faulting_process(gopts, 0, wp)); + _exit(faulting_process(gopts, 0, wp)); waitpid(pid, &err, 0); if (err) @@ -1706,11 +1706,32 @@ static int uffd_count_tests(int n_tests, int n_mems, const char *test_filter) return count; } +static unsigned long uffd_setup_hugetlb(void) +{ + unsigned long nr_hugepages, hp_size; + + hugetlb_save_settings(); + hp_size = default_huge_page_size(); + + if (!hp_size) + return 0; + + /* need twice UFFD_TEST_MEM_SIZE, one for src area and one for dst */ + nr_hugepages = 2 * MAX(UFFD_TEST_MEM_SIZE, hp_size * 2) / hp_size; + hugetlb_set_nr_default_pages(nr_hugepages); + + if (hugetlb_free_default_pages() < nr_hugepages) + return 0; + + return hp_size; +} + int main(int argc, char *argv[]) { int n_tests = sizeof(uffd_tests) / sizeof(uffd_test_case_t); int n_mems = sizeof(mem_types) / sizeof(mem_type_t); const char *test_filter = NULL; + unsigned long hugepage_size; bool list_only = false; uffd_test_case_t *test; mem_type_t *mem_type; @@ -1745,6 +1766,8 @@ int main(int argc, char *argv[]) return KSFT_PASS; } + hugepage_size = uffd_setup_hugetlb(); + ksft_print_header(); ksft_set_plan(uffd_count_tests(n_tests, n_mems, test_filter)); @@ -1771,7 +1794,7 @@ int main(int argc, char *argv[]) uffd_test_case_ops = test->test_case_ops; if (mem_type->mem_flag & (MEM_HUGETLB_PRIVATE | MEM_HUGETLB)) { - gopts.page_size = default_huge_page_size(); + gopts.page_size = hugepage_size; if (gopts.page_size == 0) { uffd_test_skip("huge page size is 0, feature missing?"); continue; -- 2.53.0