[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