[LTP] [PATCH v2] Refactor timer_getoverrun test using new LTP API
Andrea Cervesato
andrea.cervesato@suse.com
Thu Nov 16 16:13:38 CET 2023
Hi!
On 10/30/23 14:56, Cyril Hrubis wrote:
> Hi!
>> + switch (tst_variant) {
>> + case 0:
>> + SAFE_TIMER_CREATE(CLOCK_REALTIME, &ev, &timer);
>> + TST_EXP_POSITIVE(timer_getoverrun(timer));
>> +
>> + /* glibc causes SIGSEGV where timer_getoverrun() fails with EINVAL */
>> +#ifndef __GLIBC__
>> + TST_EXP_FAIL(timer_getoverrun((timer_t)-1), EINVAL);
>> +#endif
> I wonder if we should even keep it here, the most likely end result is
> that we will have to add to this ifdef once other libc implementations
> attempt to interpret the id before passing it to kernel. Maybe we should
> just remove it and save our future time.
>
>> + break;
>> + case 1:
>> + tst_syscall(__NR_timer_create, CLOCK_REALTIME, &ev, &timer);
>> + TST_EXP_POSITIVE(tst_syscall(__NR_timer_getoverrun, timer));
>> + TST_EXP_FAIL(tst_syscall(__NR_timer_getoverrun, -1), EINVAL);
> There are actually two different cases that can cause EINVAL in the
> kernel, first obvious case is that we id > INT_MAX, the second case is
> failed lookup. I suppose that the -1 gets casted to unsigned long long
> in kernel and ends up > INT_MAX.
>
> I guess to trigger the second case we can call timer_delete(timer); and
> then test it as:
> TST_EXP_FAIL(tst_syscall(__NR_timer_getoverrun, timer), EINVAL);
>
In this case we can just get rid of variant and go for timer_delete.
That will also work.
Andrea
More information about the ltp
mailing list