From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id AD52838A29A; Thu, 24 Sep 2026 05:01:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790226066; cv=none; b=EJzyLjYsl/zjdqhkeldW2El/DE9g/Dd5ZygluGfdgn4xu5VZPdZQUSK6fVFGB9OMecoglfaJKV9gDm4n7P4jy2COqL6RqNuAlzSBCvAiu6gofn1V9NMkpVeNmTQxGPFfIZCeHjQI63IgrkVPe5mBYnSZoVDagzJVRpsbA9LsDlU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790226066; c=relaxed/simple; bh=HzYZit0ASTHY27nDidq+FbliWDAzksUkPY3TJYFzc8o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VJf8jpzMciA7Tz4QVzc8CvORdEf6qBmAAS9LZ/tvL6ohlYaUc2LBMuOh6hk92LlnnQ2jlqrYAsVedTDS9MY2xLyTpxQ7H0N7SwT8IyiLhRXTstpI+fIriFbfldxyWB/HO/+Qssmoip7s2YNcgUy3ro5W6rxnn9Ok40ihUDXm0D4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=CG74ej4k; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="CG74ej4k" Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 770BB1682; Wed, 23 Sep 2026 22:00:59 -0700 (PDT) Received: from a081061.blr.arm.com (a081061.arm.com [10.164.19.84]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 59C403F86C; Wed, 23 Sep 2026 22:00:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1790226062; bh=HzYZit0ASTHY27nDidq+FbliWDAzksUkPY3TJYFzc8o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CG74ej4kY84i60SFaf5y1GlGswZwFBPBJ6SmoImPZtM5mqWvD6CJmlCVei9haE7UD jG3rMEx8kz7HrwGVGb0dTEjgqVJXAr7MBe29ush6E75/G6JuZjUTThaHW82VeqHMPC b8T5boDrJGPpzMEt6AR2vdxbtixl4knR7ho4+Wjc= From: Sarthak Sharma To: Andrew Morton , David Hildenbrand Cc: Lorenzo Stoakes , "Liam R . Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Shuah Khan , John Hubbard , Kalesh Singh , Anshuman Khandual , Park Tae-sun , linux-mm@kvack.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Sarthak Sharma Subject: [PATCH RESEND 8/9] selftests/mm: mremap_test: remove validation threshold Date: Thu, 24 Sep 2026 10:30:08 +0530 Message-ID: <20260924050009.19974-9-sarthak.sharma@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260924050009.19974-1-sarthak.sharma@arm.com> References: <20260924050009.19974-1-sarthak.sharma@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit mremap_test validates only the first 4MB of large mappings by default. The amount of data validated can be changed using the -t command line option, with zero selecting the complete region. Remove the validation threshold and its command line option. Always initialize and validate the complete remapped region. Suggested-by: David Hildenbrand (Arm) Signed-off-by: Sarthak Sharma --- tools/testing/selftests/mm/mremap_test.c | 84 +++--------------------- 1 file changed, 8 insertions(+), 76 deletions(-) diff --git a/tools/testing/selftests/mm/mremap_test.c b/tools/testing/selftests/mm/mremap_test.c index 04ea072f8cd1..77e952556be1 100644 --- a/tools/testing/selftests/mm/mremap_test.c +++ b/tools/testing/selftests/mm/mremap_test.c @@ -22,13 +22,6 @@ #define EXPECT_FAILURE 1 #define NON_OVERLAPPING 0 #define OVERLAPPING 1 -#define VALIDATION_DEFAULT_THRESHOLD 4 /* 4MB */ -#define VALIDATION_NO_THRESHOLD 0 /* Verify the entire region */ - -#ifndef MIN -#define MIN(X, Y) ((X) < (Y) ? (X) : (Y)) -#define MAX(X, Y) ((X) > (Y) ? (X) : (Y)) -#endif #define SIZE_MB(m) ((size_t)m * (1024 * 1024)) #define SIZE_KB(k) ((size_t)k * 1024) @@ -61,7 +54,7 @@ enum { }; static uint32_t *pattern; -static size_t pattern_size; +static const size_t pattern_size = _2GB; #define PTE page_size @@ -895,19 +888,13 @@ static void mremap_move_multi_invalid_vmas(FILE *maps_fp, unsigned long page_siz } #endif /* __NR_userfaultfd */ -static int remap_region(struct config c, unsigned int threshold_mb) +static int remap_region(struct config c) { void *addr, *tmp_addr, *src_addr, *dest_addr, *dest_preamble_addr = NULL; long long align_mask, offset; int ret = 0; - unsigned long long threshold; char *preamble_pattern; - if (threshold_mb == VALIDATION_NO_THRESHOLD) - threshold = c.region_size; - else - threshold = MIN(threshold_mb * _1MB, c.region_size); - src_addr = get_source_mapping(c); if (!src_addr) { ret = -1; @@ -915,7 +902,7 @@ static int remap_region(struct config c, unsigned int threshold_mb) } /* Set byte pattern for source block. */ - memcpy(src_addr, pattern, threshold); + memcpy(src_addr, pattern, c.region_size); /* Mask to zero out lower bits of address for alignment */ align_mask = ~(c.dest_alignment - 1); @@ -970,7 +957,7 @@ static int remap_region(struct config c, unsigned int threshold_mb) } /* Verify byte pattern after remapping */ - if (memcmp(dest_addr, pattern, threshold)) { + if (memcmp(dest_addr, pattern, c.region_size)) { ksft_print_msg("Data after remap doesn't match\n"); ret = -1; goto clean_up_dest; @@ -1059,10 +1046,9 @@ static void mremap_move_1mb_from_start(void) ksft_test_result(success, "%s\n", test_name); } -static void run_mremap_test_case(struct test test_case, - unsigned int threshold_mb) +static void run_mremap_test_case(struct test test_case) { - int ret = remap_region(test_case.config, threshold_mb); + int ret = remap_region(test_case.config); if (ret < 0) { if (test_case.expect_failure) @@ -1079,38 +1065,6 @@ static void run_mremap_test_case(struct test test_case, } } -static void usage(const char *cmd) -{ - ksft_print_msg("Usage: %s [-t ]\n", cmd); - ksft_print_msg("-t\t only validate threshold_mb of the remapped region\n"); - ksft_print_msg(" \t if 0 is supplied no threshold is used; all tests\n"); - ksft_print_msg(" \t are run and remapped regions validated fully.\n"); - ksft_print_msg(" \t The default threshold used is 4MB.\n"); -} - -static int parse_args(int argc, char **argv, unsigned int *threshold_mb) -{ - int opt; - - while ((opt = getopt(argc, argv, "t:")) != -1) { - switch (opt) { - case 't': - *threshold_mb = atoi(optarg); - break; - default: - usage(argv[0]); - return -1; - } - } - - if (optind < argc) { - usage(argv[0]); - return -1; - } - - return 0; -} - static void fill_pattern(uint32_t *pattern, size_t pattern_size, size_t page_size) { size_t nr_pages = pattern_size / page_size; @@ -1127,16 +1081,9 @@ static void fill_pattern(uint32_t *pattern, size_t pattern_size, size_t page_siz } #define MAX_TEST 15 -int main(int argc, char **argv) +int main(void) { unsigned int i; - unsigned int threshold_mb = VALIDATION_DEFAULT_THRESHOLD; - - /* hard-coded test configs */ - size_t max_test_variable_region_size = _2GB; - size_t max_test_constant_region_size = _2MB; - size_t dest_preamble_size = 10 * _4MB; - int num_expand_tests = 2; int num_misc_tests = 9; struct test test_cases[MAX_TEST] = {}; @@ -1147,24 +1094,9 @@ int main(int argc, char **argv) get_mmap_min_addr(); - if (parse_args(argc, argv, &threshold_mb) < 0) - ksft_exit_fail_msg("Invalid arguments\n"); - - ksft_print_msg("Test configs:\n"); - ksft_print_msg("threshold_mb=%u\n", threshold_mb); - /* * Set a preallocated array where page[i] contains i+1 */ - if (!threshold_mb) - pattern_size = MAX(max_test_variable_region_size, - max_test_constant_region_size); - else - pattern_size = MAX(MIN(threshold_mb * _1MB, - max_test_variable_region_size), - max_test_constant_region_size); - pattern_size = MAX(dest_preamble_size, pattern_size); - pattern = mmap(NULL, pattern_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); if (pattern == MAP_FAILED) { @@ -1229,7 +1161,7 @@ int main(int argc, char **argv) ksft_set_plan(ARRAY_SIZE(test_cases) + num_expand_tests + num_misc_tests); for (i = 0; i < ARRAY_SIZE(test_cases); i++) - run_mremap_test_case(test_cases[i], threshold_mb); + run_mremap_test_case(test_cases[i]); maps_fp = fopen("/proc/self/maps", "r"); -- 2.53.0