<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    <div class="moz-cite-prefix">Hi!</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">On 11/10/22 08:01, Li Wang wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:CAEemH2fjCBfO3KP1Z7j1fsJde9izthzV2S-zPLiKaT8bAhhTUg@mail.gmail.com">
      
      <div dir="ltr">
        <div dir="ltr">
          <div class="gmail_default" style="font-size:small">Hi Andrea,</div>
        </div>
        <br>
        <div class="gmail_quote">
          <div dir="ltr" class="gmail_attr">On Mon, Nov 7, 2022 at 7:03
            PM Andrea Cervesato via ltp <<a href="mailto:ltp@lists.linux.it" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">ltp@lists.linux.it</a>>
            wrote:<br>
          </div>
          <blockquote class="gmail_quote" style="margin:0px 0px 0px
            0.8ex;border-left:1px solid
            rgb(204,204,204);padding-left:1ex">We use
            CLOCK_MONOTONIC_COARSE as our time resolution for checking<br>
            setitimer counter boundaries.<br>
            <br>
            Signed-off-by: Andrea Cervesato <<a href="mailto:andrea.cervesato@suse.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">andrea.cervesato@suse.com</a>><br>
            ---<br>
            Switching to CLOCK_MONOTONIC_COARSE for setitimer time
            resolution.<br>
            <br>
             .../kernel/syscalls/setitimer/setitimer01.c   | 33
            +++++++++++--------<br>
             1 file changed, 19 insertions(+), 14 deletions(-)<br>
            <br>
            diff --git
            a/testcases/kernel/syscalls/setitimer/setitimer01.c
            b/testcases/kernel/syscalls/setitimer/setitimer01.c<br>
            index eb62f02c6..5c880c6ef 100644<br>
            --- a/testcases/kernel/syscalls/setitimer/setitimer01.c<br>
            +++ b/testcases/kernel/syscalls/setitimer/setitimer01.c<br>
            @@ -8,7 +8,7 @@<br>
             /*\<br>
              * [Description]<br>
              *<br>
            - * Spawn a child and verify that setitimer() syscall
            passes, and it ends up<br>
            + * Spawn a child, verify that setitimer() syscall passes
            and it ends up<br>
              * counting inside expected boundaries. Then verify from
            the parent that our<br>
              * syscall sent the correct signal to the child.<br>
              */<br>
            @@ -22,7 +22,8 @@<br>
             #include "tst_safe_clocks.h"<br>
            <br>
             static struct itimerval *value, *ovalue;<br>
            -static unsigned long time_step;<br>
            +static long time_step;<br>
            +static long time_count;<br>
            <br>
             static struct tcase {<br>
                    int which;<br>
            @@ -56,7 +57,6 @@ static void verify_setitimer(unsigned int
            i)<br>
             {<br>
                    pid_t pid;<br>
                    int status;<br>
            -       int usec = 3 * time_step;<br>
                    struct tcase *tc = &tcases[i];<br>
            <br>
                    pid = SAFE_FORK();<br>
            @@ -66,7 +66,7 @@ static void verify_setitimer(unsigned int
            i)<br>
            <br>
                            tst_no_corefile(0);<br>
            <br>
            -               set_setitimer_value(usec, 0);<br>
            +               set_setitimer_value(time_count, 0);<br>
                            TST_EXP_PASS(sys_setitimer(tc->which,
            value, NULL));<br>
            <br>
                            set_setitimer_value(5 * time_step, 7 *
            time_step);<br>
          </blockquote>
          <div><br>
          </div>
          <div>
            <div class="gmail_default" style="font-size:small">Maybe we
              can use 'time_count' instead of 'time_step' as well.</div>
            <br>
          </div>
        </div>
      </div>
    </blockquote>
    <p>This is needed if we want to check when setitimer syscall
      overrides value/ovalue on failure. We always expect time_count to
      be set in this case.<br>
    </p>
    <blockquote type="cite" cite="mid:CAEemH2fjCBfO3KP1Z7j1fsJde9izthzV2S-zPLiKaT8bAhhTUg@mail.gmail.com">
      <div dir="ltr">
        <div class="gmail_quote">
          <div> </div>
          <blockquote class="gmail_quote" style="margin:0px 0px 0px
            0.8ex;border-left:1px solid
            rgb(204,204,204);padding-left:1ex">
            @@ -76,7 +76,7 @@ static void verify_setitimer(unsigned int
            i)<br>
                                    ovalue->it_value.tv_sec,<br>
                                    ovalue->it_value.tv_usec);<br>
            <br>
            -               if (ovalue->it_value.tv_sec != 0 ||
            ovalue->it_value.tv_usec > usec)<br>
            +               if (ovalue->it_value.tv_sec != 0 ||
            ovalue->it_value.tv_usec > time_count + time_step)<br>
          </blockquote>
          <div><br>
          </div>
          <div>
            <div class="gmail_default" style="font-size:small">This is
              not correct for 'ITIMER_REAL', kernel does _not_</div>
            <div class="gmail_default" style="font-size:small">add that
              one jiffy when using high resolution. I'd suggest</div>
            <div class="gmail_default" style="font-size:small">taking
              reference to Martin's code in the last email thread.</div>
            <br>
          </div>
          <div>
            <div class="gmail_default" style="font-size:small">And, I
              also think we'd better insert code comments here to</div>
            <div class="gmail_default" style="font-size:small">briefly
              declare why need to add the time_step for the result </div>
            <div class="gmail_default" style="font-size:small">(of
              ITIMER_VIRTUAL/ITIMER_PROF) comparison, otherwise, </div>
            <div class="gmail_default" style="font-size:small">people
              who are not familiar with this test will be confused.</div>
          </div>
        </div>
      </div>
    </blockquote>
    Sure, I agree this this<br>
    <blockquote type="cite" cite="mid:CAEemH2fjCBfO3KP1Z7j1fsJde9izthzV2S-zPLiKaT8bAhhTUg@mail.gmail.com">
      <div dir="ltr">
        <div class="gmail_quote">
          <div><br>
          </div>
          <div> </div>
          <blockquote class="gmail_quote" style="margin:0px 0px 0px
            0.8ex;border-left:1px solid
            rgb(204,204,204);padding-left:1ex">
                                    tst_res(TFAIL, "Ending counters are
            out of range");<br>
            <br>
                            for (;;)<br>
            @@ -93,24 +93,29 @@ static void verify_setitimer(unsigned
            int i)<br>
            <br>
             static void setup(void)<br>
             {<br>
            -       struct timespec res;<br>
            +       struct timespec time_res;<br>
            <br>
            -       SAFE_CLOCK_GETRES(CLOCK_MONOTONIC, &res);<br>
            +       SAFE_CLOCK_GETRES(CLOCK_MONOTONIC_COARSE,
            &time_res);<br>
          </blockquote>
          <div><br>
          </div>
          <div>
            <div class="gmail_default" style="font-size:small">And here
              require code comments on why we choose to</div>
            <div class="gmail_default" style="font-size:small">use
              CLOCK_MONOTONIC_COARSE.</div>
          </div>
          <div class="gmail_default" style="font-size:small"><br>
          </div>
          <div> </div>
          <blockquote class="gmail_quote" style="margin:0px 0px 0px
            0.8ex;border-left:1px solid
            rgb(204,204,204);padding-left:1ex">
            <br>
            -       time_step = res.tv_nsec / 1000;<br>
            -       if (time_step < 10000)<br>
            -               time_step = 10000;<br>
            +       time_step = time_res.tv_nsec / 1000;<br>
            +       if (time_step <= 0)<br>
            +               time_step = 1000;<br>
            <br>
            -       tst_res(TINFO, "clock resolution: %luns, time step:
            %luus",<br>
            -               res.tv_nsec,<br>
            -               time_step);<br>
            +       time_count = 3 * time_step;<br>
            +<br>
            +       tst_res(TINFO, "clock resolution: %luns, "<br>
            +               "time step: %luus, "<br>
            +               "time count: %luus",<br>
            +               time_res.tv_nsec,<br>
            +               time_step,<br>
            +               time_count);<br>
             }<br>
            <br>
             static struct tst_test test = {<br>
                    .tcnt = ARRAY_SIZE(tcases),<br>
                    .forks_child = 1,<br>
            -       .test = verify_setitimer,<br>
                    .setup = setup,<br>
            +       .test = verify_setitimer,<br>
                    .bufs = (struct tst_buffers[]) {<br>
                            {&value,  .size = sizeof(struct
            itimerval)},<br>
                            {&ovalue, .size = sizeof(struct
            itimerval)},<br>
            -- <br>
            2.35.3<br>
            <br>
            <br>
            -- <br>
            Mailing list info: <a href="https://lists.linux.it/listinfo/ltp" rel="noreferrer" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">https://lists.linux.it/listinfo/ltp</a><br>
            <br>
          </blockquote>
        </div>
        <br clear="all">
        <div><br>
        </div>
        -- <br>
        <div dir="ltr">
          <div dir="ltr">
            <div>Regards,<br>
            </div>
            <div>Li Wang<br>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
    <p>Andrea<br>
    </p>
  </body>
</html>