diff options
author | Mina Chou <minachou@andestech.com> | 2024-03-28 16:33:44 +0800 |
---|---|---|
committer | Petr Vorel <petr.vorel@gmail.com> | 2024-05-15 08:55:47 +0200 |
commit | 76c8c04b5d856829e990698aaf8a293091827b74 (patch) | |
tree | 0c5d60fb10b4ada498e989b82c8f928053e57a07 | |
parent | 7fd200fc3633e80ff4c9d0f2d05081d32a38fc63 (diff) | |
download | ltp-76c8c04b5d856829e990698aaf8a293091827b74.tar.gz |
setitimer: Pass the kernel-defined struct __kernel_old_itimerval to sys_setitimer()
The setitimer01 tests fail on RV32 due to incompatible parameter
definitions. 'value' and 'ovalue' are defined by glibc as itimerval
(64-bit time_t on RV32), while the kernel expects __kernel_old_itimerval
(32-bit time_t on RV32) for the setitimer syscall[1]. This discrepancy
leads to incorrect 'ovalue' and test failures. Thus, the kernel-defined
__kernel_old_itimerval should be used.
[1] https://sourceware.org/git/?p=glibc.git;a=commit;h=a51e03588937ad804a9f583ea3d0fc0a4d088c33
Link: https://lore.kernel.org/ltp/20240328083344.277502-1-minachou@andestech.com/
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Reviewed-by: Cyril Hrubis <chrubis@suse.cz>
Signed-off-by: Hui Min Mina Chou <minachou@andestech.com>
-rw-r--r-- | configure.ac | 3 | ||||
-rw-r--r-- | include/tst_timer.h | 12 | ||||
-rw-r--r-- | testcases/kernel/syscalls/setitimer/setitimer01.c | 8 | ||||
-rw-r--r-- | testcases/kernel/syscalls/setitimer/setitimer02.c | 12 |
4 files changed, 20 insertions, 15 deletions
diff --git a/configure.ac b/configure.ac index 6d7009763..85c5739c4 100644 --- a/configure.ac +++ b/configure.ac @@ -221,7 +221,8 @@ AC_CHECK_TYPES([struct xt_entry_match, struct xt_entry_target],,,[ ]) AC_CHECK_TYPES([struct __kernel_old_timeval, struct __kernel_old_timespec, struct __kernel_timespec, - struct __kernel_old_itimerspec, struct __kernel_itimerspec],,,[#include <sys/socket.h>]) + struct __kernel_old_itimerspec, struct __kernel_itimerspec, + struct __kernel_old_itimerval],,,[#include <sys/socket.h>]) AC_CHECK_TYPES([struct futex_waitv],,,[#include <linux/futex.h>]) AC_CHECK_TYPES([struct mount_attr],,,[ diff --git a/include/tst_timer.h b/include/tst_timer.h index 703f03294..6fb940020 100644 --- a/include/tst_timer.h +++ b/include/tst_timer.h @@ -135,6 +135,13 @@ struct __kernel_itimerspec { struct __kernel_timespec it_value; /* timer expiration */ }; #endif + +#ifndef HAVE_STRUCT___KERNEL_OLD_ITIMERVAL +struct __kernel_old_itimerval { + struct __kernel_old_timeval it_interval; /* timer interval */ + struct __kernel_old_timeval it_value; /* current value */ +}; +#endif #endif enum tst_ts_type { @@ -370,6 +377,11 @@ static inline int sys_timerfd_settime64(int fd, int flags, void *its, return tst_syscall(__NR_timerfd_settime64, fd, flags, its, old_its); } +static inline int sys_setitimer(int which, void *new_value, void *old_value) +{ + return tst_syscall(__NR_setitimer, which, new_value, old_value); +} + /* * Returns tst_ts seconds. */ diff --git a/testcases/kernel/syscalls/setitimer/setitimer01.c b/testcases/kernel/syscalls/setitimer/setitimer01.c index d12abe904..94ee51c6a 100644 --- a/testcases/kernel/syscalls/setitimer/setitimer01.c +++ b/testcases/kernel/syscalls/setitimer/setitimer01.c @@ -20,9 +20,10 @@ #include "tst_test.h" #include "lapi/syscalls.h" #include "tst_safe_clocks.h" +#include "tst_timer.h" static struct timeval tv; -static struct itimerval *value, *ovalue; +static struct __kernel_old_itimerval *value, *ovalue; static volatile unsigned long sigcnt; static long time_step; static long time_sec; @@ -38,11 +39,6 @@ static struct tcase { {ITIMER_PROF, "ITIMER_PROF", SIGPROF}, }; -static int sys_setitimer(int which, void *new_value, void *old_value) -{ - return tst_syscall(__NR_setitimer, which, new_value, old_value); -} - static void sig_routine(int signo LTP_ATTRIBUTE_UNUSED) { sigcnt++; diff --git a/testcases/kernel/syscalls/setitimer/setitimer02.c b/testcases/kernel/syscalls/setitimer/setitimer02.c index b012d71fa..c545f6288 100644 --- a/testcases/kernel/syscalls/setitimer/setitimer02.c +++ b/testcases/kernel/syscalls/setitimer/setitimer02.c @@ -19,13 +19,9 @@ #include <stdlib.h> #include "tst_test.h" #include "lapi/syscalls.h" +#include "tst_timer.h" -static struct itimerval *value, *ovalue; - -static int sys_setitimer(int which, void *new_value, void *old_value) -{ - return tst_syscall(__NR_setitimer, which, new_value, old_value); -} +static struct __kernel_old_itimerval *value, *ovalue; static void verify_setitimer(unsigned int i) { @@ -55,8 +51,8 @@ static struct tst_test test = { .test = verify_setitimer, .setup = setup, .bufs = (struct tst_buffers[]) { - {&value, .size = sizeof(struct itimerval)}, - {&ovalue, .size = sizeof(struct itimerval)}, + {&value, .size = sizeof(struct __kernel_old_itimerval)}, + {&ovalue, .size = sizeof(struct __kernel_old_itimerval)}, {} } }; |