From nobody Thu Dec 18 12:51:08 2025 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 862EF20B800; Wed, 7 May 2025 09:58:22 +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=1746611904; cv=none; b=M+hz5A0kNy+R+X6u6wg7H67owiZzAybVSXDPdgQhtSoZr+yNTx6Jb7VSYHeJHXbEfPyp6DJtqow6OyAboJ5UKTkatQ6rmunky6i18EV4C4b1NZgRaZPc+rUEXaS+nlbhl/0QLXgBXGQ8BTTKJWEBnYKV0+8jXEPUze3DwykmsAg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746611904; c=relaxed/simple; bh=TWFzodArfUb56G2s5s6j00RgWcg438jjSrUiM05c4wU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=GrspzLVe3CE0cftM4Lkpx/BVwUZNpTQsE0PpJ/sxeBDfC+Ebn7nRlIFfnLBsCEDrONczb1voFUzGjDoFu3ZAJ0aXKiXjxWwewwvVd4Cg+QwwZSrmZvWAxzHfNNs3HFswxfoTQ+VESMvvpn6R/p4l7J1Ugng/xEtNb8USRCiNI+w= 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; 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 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 CA7D9339; Wed, 7 May 2025 02:58:11 -0700 (PDT) Received: from e129823.cambridge.arm.com (e129823.arm.com [10.1.197.6]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id E9EC83F5A1; Wed, 7 May 2025 02:58:18 -0700 (PDT) From: Yeoreum Yun To: catalin.marinas@arm.com, pcc@google.com, will@kernel.org, broonie@kernel.org, anshuman.khandual@arm.com, joey.gouly@arm.com, yury.khrustalev@arm.com, maz@kernel.org, oliver.upton@linux.dev, frederic@kernel.org, shmeerali.kolothum.thodi@huawei.com, james.morse@arm.com, mark.rutland@arm.com, huangxiaojia2@huawei.com, akpm@linux-foundation.org, surenb@google.com, robin.murphy@arm.com Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, Yeoreum Yun Subject: [PATCH v4 5/6] kselftest/arm64/mte: refactor check_mmap_option test Date: Wed, 7 May 2025 10:57:56 +0100 Message-Id: <20250507095757.1663684-6-yeoreum.yun@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250507095757.1663684-1-yeoreum.yun@arm.com> References: <20250507095757.1663684-1-yeoreum.yun@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: quoted-printable Content-Type: text/plain; charset="utf-8" Before add mtefar testcase on check_mmap_option.c, refactor check_mmap_option. Signed-off-by: Yeoreum Yun --- .../selftests/arm64/mte/check_mmap_options.c | 158 +++++++++++++----- 1 file changed, 118 insertions(+), 40 deletions(-) diff --git a/tools/testing/selftests/arm64/mte/check_mmap_options.c b/tools= /testing/selftests/arm64/mte/check_mmap_options.c index b37bf481c9f9..a784b3a31d4f 100644 --- a/tools/testing/selftests/arm64/mte/check_mmap_options.c +++ b/tools/testing/selftests/arm64/mte/check_mmap_options.c @@ -3,6 +3,7 @@ =20 #define _GNU_SOURCE =20 +#include #include #include #include @@ -24,6 +25,12 @@ #define TAG_CHECK_ON 0 #define TAG_CHECK_OFF 1 =20 +#define TEST_NAME_MAX 256 + +#define CHECK_ANON_MEM 0 +#define CHECK_FILE_MEM 1 +#define CHECK_CLEAR_PROT_MTE 2 + static size_t page_size; static int sizes[] =3D { 1, 537, 989, 1269, MT_GRANULE_SIZE - 1, MT_GRANULE_SIZE, @@ -183,10 +190,98 @@ static int check_clear_prot_mte_flag(int mem_type, in= t mode, int mapping) return KSFT_PASS; } =20 +const char *format_test_name(int check_type, int mem_type, int sync, + int mapping, int tag_check) +{ + static char test_name[TEST_NAME_MAX]; + const char* check_type_str; + const char* mem_type_str; + const char* sync_str; + const char* mapping_str; + const char* tag_check_str; + + switch (check_type) { + case CHECK_ANON_MEM: + check_type_str =3D "anonymous memory"; + break; + case CHECK_FILE_MEM: + check_type_str =3D "file memory"; + break; + case CHECK_CLEAR_PROT_MTE: + check_type_str =3D "clear PROT_MTE flags"; + break; + default: + assert(0); + break; + } + + switch (mem_type) { + case USE_MMAP: + mem_type_str =3D "mmap"; + break; + case USE_MPROTECT: + mem_type_str =3D "mmap/mprotect"; + break; + default: + assert(0); + break; + } + + switch (sync) { + case MTE_NONE_ERR: + sync_str =3D "no error"; + break; + case MTE_SYNC_ERR: + sync_str =3D "sync error"; + break; + case MTE_ASYNC_ERR: + sync_str =3D "async error"; + break; + default: + assert(0); + break; + } + + switch (mapping) { + case MAP_SHARED: + mapping_str =3D "shared"; + break; + case MAP_PRIVATE: + mapping_str =3D "private"; + break; + default: + assert(0); + break; + } + + switch (tag_check) { + case TAG_CHECK_ON: + tag_check_str =3D "tag check on"; + break; + case TAG_CHECK_OFF: + tag_check_str =3D "tag check off"; + break; + default: + assert(0); + break; + } + + snprintf(test_name, TEST_NAME_MAX, + "Check %s with %s mapping, %s mode, %s memory and %s\n", + check_type_str, mapping_str, sync_str, mem_type_str, tag_check_s= tr); + + return test_name; +} + int main(int argc, char *argv[]) { int err; int item =3D ARRAY_SIZE(sizes); + int check_type[] =3D { CHECK_ANON_MEM, CHECK_FILE_MEM }; + int mem_type[] =3D { USE_MMAP, USE_MPROTECT }; + int mte_sync[] =3D { MTE_SYNC_ERR, MTE_ASYNC_ERR }; + int mapping[] =3D { MAP_PRIVATE, MAP_SHARED }; + int c, mt, s, m; =20 err =3D mte_default_setup(); if (err) @@ -210,54 +305,37 @@ int main(int argc, char *argv[]) mte_enable_pstate_tco(); =20 evaluate_test(check_anonymous_memory_mapping(USE_MMAP, MTE_SYNC_ERR, MAP_= PRIVATE, TAG_CHECK_OFF), - "Check anonymous memory with private mapping, sync error mode, mmap memor= y and tag check off\n"); + format_test_name(CHECK_ANON_MEM, USE_MMAP, MTE_SYNC_ERR, MAP_PRIVA= TE, TAG_CHECK_OFF)); + evaluate_test(check_file_memory_mapping(USE_MPROTECT, MTE_SYNC_ERR, MAP_P= RIVATE, TAG_CHECK_OFF), - "Check file memory with private mapping, sync error mode, mmap/mprotect m= emory and tag check off\n"); + format_test_name(CHECK_FILE_MEM, USE_MPROTECT, MTE_SYNC_ERR, MAP_P= RIVATE, TAG_CHECK_OFF)); =20 mte_disable_pstate_tco(); + evaluate_test(check_anonymous_memory_mapping(USE_MMAP, MTE_NONE_ERR, MAP_= PRIVATE, TAG_CHECK_OFF), - "Check anonymous memory with private mapping, no error mode, mmap memory = and tag check off\n"); + format_test_name(CHECK_ANON_MEM, USE_MMAP, MTE_NONE_ERR, MAP_PRIVA= TE, TAG_CHECK_OFF)); evaluate_test(check_file_memory_mapping(USE_MPROTECT, MTE_NONE_ERR, MAP_P= RIVATE, TAG_CHECK_OFF), - "Check file memory with private mapping, no error mode, mmap/mprotect mem= ory and tag check off\n"); - - evaluate_test(check_anonymous_memory_mapping(USE_MMAP, MTE_SYNC_ERR, MAP_= PRIVATE, TAG_CHECK_ON), - "Check anonymous memory with private mapping, sync error mode, mmap memor= y and tag check on\n"); - evaluate_test(check_anonymous_memory_mapping(USE_MPROTECT, MTE_SYNC_ERR, = MAP_PRIVATE, TAG_CHECK_ON), - "Check anonymous memory with private mapping, sync error mode, mmap/mprot= ect memory and tag check on\n"); - evaluate_test(check_anonymous_memory_mapping(USE_MMAP, MTE_SYNC_ERR, MAP_= SHARED, TAG_CHECK_ON), - "Check anonymous memory with shared mapping, sync error mode, mmap memory= and tag check on\n"); - evaluate_test(check_anonymous_memory_mapping(USE_MPROTECT, MTE_SYNC_ERR, = MAP_SHARED, TAG_CHECK_ON), - "Check anonymous memory with shared mapping, sync error mode, mmap/mprote= ct memory and tag check on\n"); - evaluate_test(check_anonymous_memory_mapping(USE_MMAP, MTE_ASYNC_ERR, MAP= _PRIVATE, TAG_CHECK_ON), - "Check anonymous memory with private mapping, async error mode, mmap memo= ry and tag check on\n"); - evaluate_test(check_anonymous_memory_mapping(USE_MPROTECT, MTE_ASYNC_ERR,= MAP_PRIVATE, TAG_CHECK_ON), - "Check anonymous memory with private mapping, async error mode, mmap/mpro= tect memory and tag check on\n"); - evaluate_test(check_anonymous_memory_mapping(USE_MMAP, MTE_ASYNC_ERR, MAP= _SHARED, TAG_CHECK_ON), - "Check anonymous memory with shared mapping, async error mode, mmap memor= y and tag check on\n"); - evaluate_test(check_anonymous_memory_mapping(USE_MPROTECT, MTE_ASYNC_ERR,= MAP_SHARED, TAG_CHECK_ON), - "Check anonymous memory with shared mapping, async error mode, mmap/mprot= ect memory and tag check on\n"); - - evaluate_test(check_file_memory_mapping(USE_MMAP, MTE_SYNC_ERR, MAP_PRIVA= TE, TAG_CHECK_ON), - "Check file memory with private mapping, sync error mode, mmap memory and= tag check on\n"); - evaluate_test(check_file_memory_mapping(USE_MPROTECT, MTE_SYNC_ERR, MAP_P= RIVATE, TAG_CHECK_ON), - "Check file memory with private mapping, sync error mode, mmap/mprotect m= emory and tag check on\n"); - evaluate_test(check_file_memory_mapping(USE_MMAP, MTE_SYNC_ERR, MAP_SHARE= D, TAG_CHECK_ON), - "Check file memory with shared mapping, sync error mode, mmap memory and = tag check on\n"); - evaluate_test(check_file_memory_mapping(USE_MPROTECT, MTE_SYNC_ERR, MAP_S= HARED, TAG_CHECK_ON), - "Check file memory with shared mapping, sync error mode, mmap/mprotect me= mory and tag check on\n"); - evaluate_test(check_file_memory_mapping(USE_MMAP, MTE_ASYNC_ERR, MAP_PRIV= ATE, TAG_CHECK_ON), - "Check file memory with private mapping, async error mode, mmap memory an= d tag check on\n"); - evaluate_test(check_file_memory_mapping(USE_MPROTECT, MTE_ASYNC_ERR, MAP_= PRIVATE, TAG_CHECK_ON), - "Check file memory with private mapping, async error mode, mmap/mprotect = memory and tag check on\n"); - evaluate_test(check_file_memory_mapping(USE_MMAP, MTE_ASYNC_ERR, MAP_SHAR= ED, TAG_CHECK_ON), - "Check file memory with shared mapping, async error mode, mmap memory and= tag check on\n"); - evaluate_test(check_file_memory_mapping(USE_MPROTECT, MTE_ASYNC_ERR, MAP_= SHARED, TAG_CHECK_ON), - "Check file memory with shared mapping, async error mode, mmap/mprotect m= emory and tag check on\n"); + format_test_name(CHECK_FILE_MEM, USE_MPROTECT, MTE_NONE_ERR, MAP_P= RIVATE, TAG_CHECK_OFF)); + + for (c =3D 0 ; c < ARRAY_SIZE(check_type); c++) { + for (s =3D 0; s < ARRAY_SIZE(mte_sync); s++) { + for (m =3D 0; m < ARRAY_SIZE(mapping); m++) { + for (mt =3D 0; mt < ARRAY_SIZE(mem_type); mt++) { + if (check_type[c] =3D=3D CHECK_ANON_MEM) + evaluate_test(check_anonymous_memory_mapping(mem_type[mt], mte_sync[= s], mapping[m], TAG_CHECK_ON), + format_test_name(CHECK_ANON_MEM, mem_type[mt], mte_sync[s], mapping= [m], TAG_CHECK_ON)); + else + evaluate_test(check_file_memory_mapping(mem_type[mt], mte_sync[s], m= apping[m], TAG_CHECK_ON), + format_test_name(CHECK_FILE_MEM, mem_type[mt], mte_sync[s], mapping= [m], TAG_CHECK_ON)); + } + } + } + } =20 evaluate_test(check_clear_prot_mte_flag(USE_MMAP, MTE_SYNC_ERR, MAP_PRIVA= TE), - "Check clear PROT_MTE flags with private mapping, sync error mode and mma= p memory\n"); + format_test_name(CHECK_CLEAR_PROT_MTE, USE_MMAP, MTE_SYNC_ERR, MAP= _PRIVATE, TAG_CHECK_ON)); evaluate_test(check_clear_prot_mte_flag(USE_MPROTECT, MTE_SYNC_ERR, MAP_P= RIVATE), - "Check clear PROT_MTE flags with private mapping and sync error mode and = mmap/mprotect memory\n"); + format_test_name(CHECK_CLEAR_PROT_MTE, USE_MPROTECT, MTE_SYNC_ERR,= MAP_PRIVATE, TAG_CHECK_ON)); =20 mte_restore_setup(); ksft_print_cnts(); --=20 LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7}