[LTP] [PATCH v2] getrlimit/getrlimit03: Skip test if __NR_getrlimit_ulong not implemented
Li Wang
liwang@redhat.com
Tue Jul 8 15:10:03 CEST 2025
On Tue, Jul 8, 2025 at 7:28 PM Tiezhu Yang <yangtiezhu@loongson.cn> wrote:
> In the LTP code, __NR_getrlimit_ulong is defined as __NR_ugetrlimit
> or __NR_getrlimit.
>
> In the Linux kernel, LoongArch uses the generic syscall table
> which is defined in include/uapi/asm-generic/unistd.h. We can
> see that __NR_ugetrlimit is not defined in the generic header,
> and also there is no __ARCH_WANT_SET_GET_RLIMIT definition in
> the arch specific header arch/loongarch/include/asm/unistd.h,
> so both __NR_ugetrlimit and __NR_getrlimit are not implemented
> on LoongArch.
>
> That is to say, no need to compare the return value and errno
> about the syscall numbers __NR_prlimit64 and __NR_{u}getrlimit,
> just check this case and then skip the test.
>
> While at it, modify the value of test.tcnt as 1 to skip only
> once if the errno of getrlimit_ulong() or getrlimit_long() is
> ENOSYS.
>
> Without this patch:
>
> $ /opt/ltp/testcases/bin/getrlimit03
> ...
> getrlimit03.c:102: TFAIL: __NR_prlimit64(0) returned 0 (SUCCESS) but
> __NR_getrlimit(0) returned -1 (ENOSYS)
> getrlimit03.c:102: TFAIL: __NR_prlimit64(1) returned 0 (SUCCESS) but
> __NR_getrlimit(1) returned -1 (ENOSYS)
> getrlimit03.c:102: TFAIL: __NR_prlimit64(2) returned 0 (SUCCESS) but
> __NR_getrlimit(2) returned -1 (ENOSYS)
> getrlimit03.c:102: TFAIL: __NR_prlimit64(3) returned 0 (SUCCESS) but
> __NR_getrlimit(3) returned -1 (ENOSYS)
> getrlimit03.c:102: TFAIL: __NR_prlimit64(4) returned 0 (SUCCESS) but
> __NR_getrlimit(4) returned -1 (ENOSYS)
> getrlimit03.c:102: TFAIL: __NR_prlimit64(5) returned 0 (SUCCESS) but
> __NR_getrlimit(5) returned -1 (ENOSYS)
> getrlimit03.c:102: TFAIL: __NR_prlimit64(6) returned 0 (SUCCESS) but
> __NR_getrlimit(6) returned -1 (ENOSYS)
> getrlimit03.c:102: TFAIL: __NR_prlimit64(7) returned 0 (SUCCESS) but
> __NR_getrlimit(7) returned -1 (ENOSYS)
> getrlimit03.c:102: TFAIL: __NR_prlimit64(8) returned 0 (SUCCESS) but
> __NR_getrlimit(8) returned -1 (ENOSYS)
> getrlimit03.c:102: TFAIL: __NR_prlimit64(9) returned 0 (SUCCESS) but
> __NR_getrlimit(9) returned -1 (ENOSYS)
> getrlimit03.c:102: TFAIL: __NR_prlimit64(10) returned 0 (SUCCESS) but
> __NR_getrlimit(10) returned -1 (ENOSYS)
> getrlimit03.c:102: TFAIL: __NR_prlimit64(11) returned 0 (SUCCESS) but
> __NR_getrlimit(11) returned -1 (ENOSYS)
> getrlimit03.c:102: TFAIL: __NR_prlimit64(12) returned 0 (SUCCESS) but
> __NR_getrlimit(12) returned -1 (ENOSYS)
> getrlimit03.c:102: TFAIL: __NR_prlimit64(13) returned 0 (SUCCESS) but
> __NR_getrlimit(13) returned -1 (ENOSYS)
> getrlimit03.c:102: TFAIL: __NR_prlimit64(14) returned 0 (SUCCESS) but
> __NR_getrlimit(14) returned -1 (ENOSYS)
> getrlimit03.c:102: TFAIL: __NR_prlimit64(15) returned 0 (SUCCESS) but
> __NR_getrlimit(15) returned -1 (ENOSYS)
>
> Summary:
> passed 0
> failed 16
> broken 0
> skipped 0
> warnings 0
>
> With this patch:
>
> $ /opt/ltp/testcases/bin/getrlimit03
> ...
> getrlimit03.c:166: TCONF: __NR_getrlimit not implemented: ENOSYS (38)
>
> Summary:
> passed 0
> failed 0
> broken 0
> skipped 1
> warnings 0
>
> How to reproduce:
>
> git clone https://github.com/linux-test-project/ltp.git
> cd ltp
> make autotools
> ./configure
> make all
> sudo make install
> /opt/ltp/testcases/bin/getrlimit03
>
> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
> Reviewed-by: Li Wang <liwang@redhat.com>
> ---
> testcases/kernel/syscalls/getrlimit/getrlimit03.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/testcases/kernel/syscalls/getrlimit/getrlimit03.c
> b/testcases/kernel/syscalls/getrlimit/getrlimit03.c
> index 604082ccf..bb6160c2b 100644
> --- a/testcases/kernel/syscalls/getrlimit/getrlimit03.c
> +++ b/testcases/kernel/syscalls/getrlimit/getrlimit03.c
> @@ -162,6 +162,12 @@ static void run(unsigned int resource)
> errno = 0;
> ret_ul = getrlimit_ulong(resource, &rlim_ul);
> errno_ul = errno;
> + if (errno_ul == ENOSYS) {
> + tst_res(TCONF | TERRNO,
> + "%s not implemented", __NR_getrlimit_ulong_str);
> + test.tcnt = 1;
> + return;
> + }
>
> if (compare_retval(resource, ret_u64, errno_u64, ret_ul, errno_ul,
> __NR_getrlimit_ulong_str) ||
> @@ -181,6 +187,7 @@ static void run(unsigned int resource)
> if (errno_l == ENOSYS) {
> tst_res(TCONF | TERRNO,
> "__NR_getrlimit(%d) not implemented",
> __NR_getrlimit);
>
> + test.tcnt = 1;
>
This second test.tcnt resetting is redundant, if the SIGNED_GETRLIMIT
get defined, that means both __NR_getrlimit and __NR_ugetrlimit are
detected,
and the only negative situation is getrlimit_ulong(resource, &rlim_ul);
works well, but getrlimit_long(resource, &rlim_l); return ENOSYS, to make
the
test can be interaction the second should no test.tcnt = 1.
See:
https://github.com/linux-test-project/ltp/commit/fac783b5d6631efa70d2ea3257142763d944ba32
Anyway, I modified the patch and merged!
--
Regards,
Li Wang
More information about the ltp
mailing list