[LTP] [PATCH v2] Migrating the libhugetlbfs/testcases/shm-gettest.c test
Sachin Bappalige
sachinpb@linux.vnet.ibm.com
Thu Mar 7 08:00:34 CET 2024
Hi Cyril Hrubis,
Thanks for the review comments. Please check the reply in line
Also , Please check the v3 patch
On 10/30/2023 9:19 PM, Cyril Hrubis wrote:
> Hi!
>> v2:
>> -Fixed coding style errors as per 'make check'
>> -Reporting TPASS moved inside do_shmtest() function
>> -Moved testcase file from folder hugemmap to hugeshmget
>> -Renamed testcase 'hugepage35.c' to hugeshmget06.c
>> -Updated 'kernel/mem/.gitignore'
>> -Updated 'runtest/hugetlb' for number of iterations with -i 10
> This version looks much better, a few comments below.
>
>> diff --git a/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget06.c b/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget06.c
>> new file mode 100644
>> index 000000000..5b0c2ec23
>> --- /dev/null
>> +++ b/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget06.c
>> @@ -0,0 +1,93 @@
>> +// SPDX-License-Identifier: GPL-2.0-or-later
>> +/*
>> + * Copyright (C) 2005-2006, IBM Corporation.
>> + * Author: David Gibson & Adam Litke
>> + */
>> +
>> +/*\
>> + * [Description]
>> + *
>> + * Test Name: shm-gettest.c
> ^
> This is no longer true and should be removed
Sachin >> This line is removed. And the DESCRIPTION similar to matched
with other testcases in
>> + * 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 do_shmtest(size_t size)
>> +{
>> + size_t i, j;
>> + char pattern;
>> + char *shmaddr;
>> +
>> + shmid = SAFE_SHMGET(key, size, SHM_HUGETLB|IPC_CREAT|SHM_R|SHM_W);
>> + tst_res(TINFO, "shmid: 0x%x\n", shmid);
> THis should be moved into setup, since otherwise we would create one id
> per iteration (run test with -i 2) and the test will leak shm ids.
Sachin >> That's correct and moved that code to setup.
>
>> + shmaddr = SAFE_SHMAT(shmid, 0, SHM_RND);
>> + tst_res(TINFO, "shmaddr: %p\n", shmaddr);
>> +
>> + for (i = 0; i < NR_HUGEPAGES; i++) {
>> + pattern = 65 + (i % 26);
>> + tst_res(TINFO, "Touching %p with %c\n",
>> + 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\n", (shmaddr + (i * hpage_size)));
>> + for (j = 0; j < (size_t)hpage_size; j++)
>> + if (*(shmaddr + (i * hpage_size) + j) != pattern)
>> + tst_res(TFAIL, "Verifying the segment failed."
>> + "Got %c, expected %c",
>> + *(shmaddr + (i * hpage_size) + j),
>> + pattern);
> If we print fail here we will still continue and print the TPASS at the
> end of the function. Should we instead do shmdt() and return here?
Sachin >> Yes . After Failure, it should return. That part added to v3
patch
>
> Also the message can be shorter while keeping the information in there
> and there is no guarantee that the corrupted byte would be printable, so
> I would print hex instead, something as:
>
> tst_res(TFAIL, "Got wrong byte 0x%02x expected 0x%02x", ...
Sachin >> Modified as per suggestion
>
>> + }
>> + SAFE_SHMDT((const void *)shmaddr);
>> + tst_res(TPASS, "Successfully tested shared memory segment operations "
>> + "backed by hugepages");
> Can we be shorter and to the point? Something as:
>
> tst_res(TPASS, "shm hugepages works correctly");
Sachin >> Done
>
>> +}
>> +
>> +static void run_test(void)
>> +{
>> + size_t size;
>> +
>> + size = NR_HUGEPAGES * hpage_size;
>> +
>> + do_shmtest(size);
> Is there a reason why this isn't simply do_shmtest(NR_HUGEPAGES * hpage_size); ?
Sachin >> yes .I modified as per suggestion
>
>> +}
>> +
>> +static void setup(void)
>> +{
>> +
> This newline shouldn't be here.
Sachin >> Remove this line
>
>> + hpage_size = tst_get_hugepage_size();
>> + tst_res(TINFO, "hugepage size is %ld", hpage_size);
>> +}
>> +
>> +static void cleanup(void)
>> +{
>> + if (shmid >= 0)
>> + // Remove the shared memory segment
> Please do not comment the obvious.
Sachin >> Removed this comment
>
>> + SAFE_SHMCTL(shmid, IPC_RMID, NULL);
>> +}
>> +
>> +static struct tst_test test = {
>> + .needs_root = 1,
>> + .mntpoint = MNTPOINT,
>> + .needs_hugetlbfs = 1,
> Do we actually need to mount the hugetlbfs?
Sachin >> If I remove this line from code , it gives this error
tst_test.c:1294: TBROK: tst_test->mntpoint must be set!
>
>> + .setup = setup,
>> + .cleanup = cleanup,
>> + .test_all = run_test,
>> + .hugepages = {NR_HUGEPAGES, TST_NEEDS},
>> +};
>> --
>> 2.39.3
>>
>>
>> --
>> Mailing list info:https://lists.linux.it/listinfo/ltp
More information about the ltp
mailing list