Message ID | 20240515092456.3180-1-sachinpb@linux.ibm.com |
---|---|
State | Changes Requested |
Headers | show |
Series | [v4] Migrating the libhugetlbfs/testcases/shm-gettest.c test | expand |
Hi! > Test Description: This testcase creates shared memory segments > backed by hugepages, writes specific patterns to each segment, > verifies pattern and detaches a shared memory segments in a loop. > > This looping test was added to verify the functionality of > large page backed shared memory segments. A segment is created, > written, verified, and detached for specified number of times. > > -Updated 'kernel/mem/.gitignore' > -Updated 'runtest/hugetlb' for number of iterations with -i 10 > > Signed-off-by: Sachin P Bappalige <sachinpb@linux.ibm.com> > --- > runtest/hugetlb | 1 + > testcases/kernel/mem/.gitignore | 1 + > .../mem/hugetlb/hugeshmget/hugeshmget06.c | 78 +++++++++++++++++++ > 3 files changed, 80 insertions(+) > create mode 100644 testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget06.c > > diff --git a/runtest/hugetlb b/runtest/hugetlb > index 299c07ac9..f294e9aaa 100644 > --- a/runtest/hugetlb > +++ b/runtest/hugetlb > @@ -55,3 +55,4 @@ hugeshmget01 hugeshmget01 -i 10 > hugeshmget02 hugeshmget02 -i 10 > hugeshmget03 hugeshmget03 -i 10 > hugeshmget05 hugeshmget05 -i 10 > +hugeshmget06 hugeshmget06 -i 10 > diff --git a/testcases/kernel/mem/.gitignore b/testcases/kernel/mem/.gitignore > index c96fe8bfc..d88484fa1 100644 > --- a/testcases/kernel/mem/.gitignore > +++ b/testcases/kernel/mem/.gitignore > @@ -47,6 +47,7 @@ > /hugetlb/hugeshmget/hugeshmget02 > /hugetlb/hugeshmget/hugeshmget03 > /hugetlb/hugeshmget/hugeshmget05 > +/hugetlb/hugeshmget/hugeshmget06 > /ksm/ksm01 > /ksm/ksm02 > /ksm/ksm03 > diff --git a/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget06.c b/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget06.c > new file mode 100644 > index 000000000..85a731113 > --- /dev/null > +++ b/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget06.c > @@ -0,0 +1,78 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later > +/* > + * Copyright (C) 2005-2006, IBM Corporation. > + * Author: David Gibson & Adam Litke > + */ > + > +/*\ > + * [Description] > + * This testcase creates shared memory segments backed by hugepages, > + * writes specific patterns to each segment, verifies pattern, > + * and detaches a shared memory segments in a loop. > + * It ensures that the hugepage backed shared memory functionalities > + * works correctly by validating the data written to segment. > + */ > + > +#include "hugetlb.h" > +#include "tst_safe_sysv_ipc.h" > + > +#define MNTPOINT "hugetlbfs/" > +#define NR_HUGEPAGES 4 > + > +static long hpage_size; > +static int shmid = -1, key = -1; > + > +static void run_test(void) > +{ > + size_t i, j; > + char pattern; > + char *shmaddr; > + > + shmaddr = SAFE_SHMAT(shmid, 0, SHM_RND); > + tst_res(TINFO, "shmaddr: %p", shmaddr); > + > + for (i = 0; i < NR_HUGEPAGES; i++) { > + pattern = 65 + (i % 26); > + tst_res(TINFO, "Touching %p with %c", > + shmaddr + (i * hpage_size), pattern); > + memset(shmaddr + (i * hpage_size), pattern, hpage_size); > + } > + > + for (i = 0; i < NR_HUGEPAGES; i++) { > + pattern = 65 + (i % 26); > + tst_res(TINFO, "Verifying %p", (shmaddr + (i * hpage_size))); > + for (j = 0; j < (size_t)hpage_size; j++) > + if (*(shmaddr + (i * hpage_size) + j) != pattern) { > + tst_res(TFAIL, "Got wrong byte 0x%02x expected 0x%02x", > + *(shmaddr + (i * hpage_size) + j), > + pattern); > + return; > + } > + } > + SAFE_SHMDT((const void *)shmaddr); > + tst_res(TPASS, "shm hugepages works correctly"); > +} > + > +static void setup(void) > +{ > + hpage_size = tst_get_hugepage_size(); > + tst_res(TINFO, "hugepage size is %ld", hpage_size); > + shmid = SAFE_SHMGET(key, NR_HUGEPAGES * hpage_size, SHM_HUGETLB|IPC_CREAT|SHM_R|SHM_W); This uses hardcoded key (-1). Why can't we use IPC_PRIVATE here instead? > + tst_res(TINFO, "shmid: 0x%x", shmid); > +} > + > +static void cleanup(void) > +{ > + if (shmid >= 0) > + SAFE_SHMCTL(shmid, IPC_RMID, NULL); > +} > + > +static struct tst_test test = { > + .needs_root = 1, > + .mntpoint = MNTPOINT, > + .needs_hugetlbfs = 0, If you do not need it, just do not list it here. Uninitialized variables are set to zero automatically. > + .setup = setup, > + .cleanup = cleanup, > + .test_all = run_test, > + .hugepages = {NR_HUGEPAGES, TST_NEEDS}, > +}; > -- > 2.43.0 >
diff --git a/runtest/hugetlb b/runtest/hugetlb index 299c07ac9..f294e9aaa 100644 --- a/runtest/hugetlb +++ b/runtest/hugetlb @@ -55,3 +55,4 @@ hugeshmget01 hugeshmget01 -i 10 hugeshmget02 hugeshmget02 -i 10 hugeshmget03 hugeshmget03 -i 10 hugeshmget05 hugeshmget05 -i 10 +hugeshmget06 hugeshmget06 -i 10 diff --git a/testcases/kernel/mem/.gitignore b/testcases/kernel/mem/.gitignore index c96fe8bfc..d88484fa1 100644 --- a/testcases/kernel/mem/.gitignore +++ b/testcases/kernel/mem/.gitignore @@ -47,6 +47,7 @@ /hugetlb/hugeshmget/hugeshmget02 /hugetlb/hugeshmget/hugeshmget03 /hugetlb/hugeshmget/hugeshmget05 +/hugetlb/hugeshmget/hugeshmget06 /ksm/ksm01 /ksm/ksm02 /ksm/ksm03 diff --git a/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget06.c b/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget06.c new file mode 100644 index 000000000..85a731113 --- /dev/null +++ b/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget06.c @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright (C) 2005-2006, IBM Corporation. + * Author: David Gibson & Adam Litke + */ + +/*\ + * [Description] + * This testcase creates shared memory segments backed by hugepages, + * writes specific patterns to each segment, verifies pattern, + * and detaches a shared memory segments in a loop. + * It ensures that the hugepage backed shared memory functionalities + * works correctly by validating the data written to segment. + */ + +#include "hugetlb.h" +#include "tst_safe_sysv_ipc.h" + +#define MNTPOINT "hugetlbfs/" +#define NR_HUGEPAGES 4 + +static long hpage_size; +static int shmid = -1, key = -1; + +static void run_test(void) +{ + size_t i, j; + char pattern; + char *shmaddr; + + shmaddr = SAFE_SHMAT(shmid, 0, SHM_RND); + tst_res(TINFO, "shmaddr: %p", shmaddr); + + for (i = 0; i < NR_HUGEPAGES; i++) { + pattern = 65 + (i % 26); + tst_res(TINFO, "Touching %p with %c", + shmaddr + (i * hpage_size), pattern); + memset(shmaddr + (i * hpage_size), pattern, hpage_size); + } + + for (i = 0; i < NR_HUGEPAGES; i++) { + pattern = 65 + (i % 26); + tst_res(TINFO, "Verifying %p", (shmaddr + (i * hpage_size))); + for (j = 0; j < (size_t)hpage_size; j++) + if (*(shmaddr + (i * hpage_size) + j) != pattern) { + tst_res(TFAIL, "Got wrong byte 0x%02x expected 0x%02x", + *(shmaddr + (i * hpage_size) + j), + pattern); + return; + } + } + SAFE_SHMDT((const void *)shmaddr); + tst_res(TPASS, "shm hugepages works correctly"); +} + +static void setup(void) +{ + hpage_size = tst_get_hugepage_size(); + tst_res(TINFO, "hugepage size is %ld", hpage_size); + shmid = SAFE_SHMGET(key, NR_HUGEPAGES * hpage_size, SHM_HUGETLB|IPC_CREAT|SHM_R|SHM_W); + tst_res(TINFO, "shmid: 0x%x", shmid); +} + +static void cleanup(void) +{ + if (shmid >= 0) + SAFE_SHMCTL(shmid, IPC_RMID, NULL); +} + +static struct tst_test test = { + .needs_root = 1, + .mntpoint = MNTPOINT, + .needs_hugetlbfs = 0, + .setup = setup, + .cleanup = cleanup, + .test_all = run_test, + .hugepages = {NR_HUGEPAGES, TST_NEEDS}, +};
Test Description: This testcase creates shared memory segments backed by hugepages, writes specific patterns to each segment, verifies pattern and detaches a shared memory segments in a loop. This looping test was added to verify the functionality of large page backed shared memory segments. A segment is created, written, verified, and detached for specified number of times. -Updated 'kernel/mem/.gitignore' -Updated 'runtest/hugetlb' for number of iterations with -i 10 Signed-off-by: Sachin P Bappalige <sachinpb@linux.ibm.com> --- runtest/hugetlb | 1 + testcases/kernel/mem/.gitignore | 1 + .../mem/hugetlb/hugeshmget/hugeshmget06.c | 78 +++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget06.c