[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250825145719.29455-13-linyongting@bytedance.com>
Date: Mon, 25 Aug 2025 22:57:15 +0800
From: Yongting Lin <linyongting@...edance.com>
To: anthony.yznaga@...cle.com,
khalid@...nel.org,
shuah@...nel.org,
linyongting@...edance.com
Cc: linux-kernel@...r.kernel.org,
linux-kselftest@...r.kernel.org,
akpm@...ux-foundation.org,
linux-mm@...ck.org
Subject: [PATCH 4/8] mshare: selftests: Add test case shared memory
This test case aims to verify the basic functionalities of mshare.
Create a mshare file and use ioctl to create mapping for host mm
with supportive flags, then create two processes to map mshare file
to their memory spaces, and eventually verify the correctiness
of sharing memory.
Signed-off-by: Yongting Lin <linyongting@...edance.com>
---
tools/testing/selftests/mshare/basic.c | 81 +++++++++++++++++++++++++-
1 file changed, 79 insertions(+), 2 deletions(-)
diff --git a/tools/testing/selftests/mshare/basic.c b/tools/testing/selftests/mshare/basic.c
index 35739b1133f7..2347d30adfee 100644
--- a/tools/testing/selftests/mshare/basic.c
+++ b/tools/testing/selftests/mshare/basic.c
@@ -3,9 +3,86 @@
#include "../kselftest_harness.h"
#include "util.c"
-TEST(basic)
+#define STRING "I am Msharefs"
+
+FIXTURE(basic)
+{
+ char filename[128];
+ size_t align_size;
+ size_t allocate_size;
+};
+
+FIXTURE_VARIANT(basic) {
+ /* decide the time of real mapping size besed on align_size */
+ size_t map_size_time;
+ /* flags for ioctl */
+ int map_flags;
+};
+
+FIXTURE_VARIANT_ADD(basic, ANON_512G) {
+ .map_size_time = 1,
+ .map_flags = MAP_ANONYMOUS | MAP_SHARED | MAP_FIXED,
+};
+
+FIXTURE_VARIANT_ADD(basic, HUGETLB_512G) {
+ .map_size_time = 1,
+ .map_flags = MAP_ANONYMOUS | MAP_HUGETLB | MAP_SHARED | MAP_FIXED,
+};
+
+FIXTURE_VARIANT_ADD(basic, ANON_1T) {
+ .map_size_time = 2,
+ .map_flags = MAP_ANONYMOUS | MAP_SHARED | MAP_FIXED,
+};
+
+FIXTURE_VARIANT_ADD(basic, HUGETLB_1T) {
+ .map_size_time = 2,
+ .map_flags = MAP_ANONYMOUS | MAP_HUGETLB | MAP_SHARED | MAP_FIXED,
+};
+
+FIXTURE_SETUP(basic)
{
- printf("Hello mshare\n");
+ int fd;
+
+ self->align_size = mshare_get_info();
+ self->allocate_size = self->align_size * variant->map_size_time;
+
+ fd = create_mshare_file(self->filename, sizeof(self->filename));
+ ftruncate(fd, self->allocate_size);
+
+ ASSERT_EQ(mshare_ioctl_mapping(fd, self->allocate_size, variant->map_flags), 0);
+ close(fd);
+}
+
+FIXTURE_TEARDOWN(basic)
+{
+ ASSERT_EQ(unlink(self->filename), 0);
+}
+
+TEST_F(basic, shared_mem)
+{
+ int fd;
+ void *addr;
+ pid_t pid = fork();
+
+ ASSERT_NE(pid, -1);
+
+ fd = open(self->filename, O_RDWR, 0600);
+ ASSERT_NE(fd, -1);
+
+ addr = mmap(NULL, self->allocate_size, PROT_READ | PROT_WRITE,
+ MAP_SHARED, fd, 0);
+ ASSERT_NE(addr, MAP_FAILED);
+
+ if (pid == 0) {
+ /* Child process write date the shared memory */
+ memcpy(addr, STRING, sizeof(STRING));
+ exit(0);
+ }
+
+ ASSERT_NE(waitpid(pid, NULL, 0), -1);
+
+ /* Parent process should retrieve the data from the shared memory */
+ ASSERT_EQ(memcmp(addr, STRING, sizeof(STRING)), 0);
}
TEST_HARNESS_MAIN
--
2.20.1
Powered by blists - more mailing lists