[LTP] [PATCH v1] Correctly check setitimer params in setitimer01
Andrea Cervesato
andrea.cervesato@suse.com
Thu Nov 3 14:35:03 CET 2022
Hi,
On 11/2/22 16:39, Martin Doucha wrote:
> Hi,
> one small nit below, otherwise:
>
> Reviewed-by: Martin Doucha <mdoucha@suse.cz>
>
> On 02. 11. 22 15:59, Andrea Cervesato via ltp wrote:
>> Last test rewrite didn't consider the right expected boundaries when
>> setitimer syscall was tested. We also introduced counter times as
>> multiple of clock resolution, to avoid kernel rounding during setitimer
>> counter increase.
>>
>> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
>> ---
>> .../kernel/syscalls/setitimer/setitimer01.c | 42 ++++++++++++++-----
>> 1 file changed, 32 insertions(+), 10 deletions(-)
>>
>> diff --git a/testcases/kernel/syscalls/setitimer/setitimer01.c
>> b/testcases/kernel/syscalls/setitimer/setitimer01.c
>> index f04cb5a69..3fb9250e2 100644
>> --- a/testcases/kernel/syscalls/setitimer/setitimer01.c
>> +++ b/testcases/kernel/syscalls/setitimer/setitimer01.c
>> @@ -8,20 +8,21 @@
>> /*\
>> * [Description]
>> *
>> - * Check that a setitimer() call pass with timer seting.
>> - * Check if signal is generated correctly when timer expiration.
>> + * Spaw a child and verify that setitimer() syscall passes and it
>> ends up
>> + * counting inside expected boundaries. Then verify from parent that
>> our syscall
>> + * sent the correct signal to the child.
>> */
>> +#include <time.h>
>> #include <errno.h>
>> #include <sys/time.h>
>> #include <stdlib.h>
>> #include "tst_test.h"
>> #include "lapi/syscalls.h"
>> -
>> -#define USEC1 10000
>> -#define USEC2 20000
>> +#include "tst_safe_clocks.h"
>> static struct itimerval *value, *ovalue;
>> +static unsigned long time_step;
>> static struct tcase {
>> int which;
>> @@ -55,6 +56,7 @@ static void verify_setitimer(unsigned int i)
>> {
>> pid_t pid;
>> int status;
>> + int usec = 3 * time_step;
>> struct tcase *tc = &tcases[i];
>> pid = SAFE_FORK();
>> @@ -64,14 +66,18 @@ static void verify_setitimer(unsigned int i)
>> tst_no_corefile(0);
>> - set_setitimer_value(USEC1, 0);
>> - TST_EXP_PASS(sys_setitimer(tc->which, value, NULL));
>> + set_setitimer_value(usec, 0);
>> + TST_EXP_PASS(sys_setitimer(tc->which, value, 0));
>
> Why change the third argument from NULL to 0?
>
It's a mistake. I sent patch with 0 because I was tweaking with values
during tests.
>> - set_setitimer_value(USEC2, USEC2);
>> + set_setitimer_value(5 * time_step, 7 * time_step);
>> TST_EXP_PASS(sys_setitimer(tc->which, value, ovalue));
>> - if (ovalue->it_value.tv_sec != 0 ||
>> ovalue->it_value.tv_usec >= USEC2)
>> - tst_brk(TFAIL, "old timer value is not within the
>> expected range");
>> + tst_res(TINFO, "tv_sec=%ld, tv_usec=%ld",
>> + ovalue->it_value.tv_sec,
>> + ovalue->it_value.tv_usec);
>> +
>> + if (ovalue->it_value.tv_sec != 0 || ovalue->it_value.tv_usec
>> > usec)
>> + tst_res(TFAIL, "Ending counters are out of range");
>> for (;;)
>> ;
>> @@ -85,10 +91,26 @@ static void verify_setitimer(unsigned int i)
>> tst_res(TFAIL, "Child: %s", tst_strstatus(status));
>> }
>> +static void setup(void)
>> +{
>> + struct timespec res;
>> +
>> + SAFE_CLOCK_GETRES(CLOCK_MONOTONIC, &res);
>> +
>> + time_step = res.tv_nsec / 1000;
>> + if (time_step < 10000)
>> + time_step = 10000;
>> +
>> + tst_res(TINFO, "clock resolution: %luns, time step: %luus",
>> + res.tv_nsec,
>> + time_step);
>> +}
>> +
>> static struct tst_test test = {
>> .tcnt = ARRAY_SIZE(tcases),
>> .forks_child = 1,
>> .test = verify_setitimer,
>> + .setup = setup,
>> .bufs = (struct tst_buffers[]) {
>> {&value, .size = sizeof(struct itimerval)},
>> {&ovalue, .size = sizeof(struct itimerval)},
>
Andrea
More information about the ltp
mailing list