On Wed, 2021-06-02 at 14:59 +0800, chensong_2...@189.cn wrote:
> 
> 在 2021/6/2 下午2:46, Florian Bezdeka 写道:
> > On 02.06.21 07:55, chensong_2...@189.cn wrote:
> > > 
> > > 
> > > 在 2021/6/1 下午8:16, Florian Bezdeka 写道:
> > > > On 29.04.21 09:45, Song Chen wrote:
> > > > > add test case for clock_adjtime64 in testsuite
> > > > > 
> > > > > Signed-off-by: Song Chen <chensong_2...@189.cn>
> > > > > ---
> > > > >    testsuite/smokey/y2038/syscall-tests.c | 71
> > > > > ++++++++++++++++++++++++++++++++++
> > > > >    1 file changed, 71 insertions(+)
> > > > > 
> > > > > diff --git a/testsuite/smokey/y2038/syscall-tests.c
> > > > > b/testsuite/smokey/y2038/syscall-tests.c
> > > > > index c59a9d6..22fd9b6 100644
> > > > > --- a/testsuite/smokey/y2038/syscall-tests.c
> > > > > +++ b/testsuite/smokey/y2038/syscall-tests.c
> > > > > @@ -25,6 +25,43 @@ struct xn_timespec64 {
> > > > >        int64_t tv_nsec;
> > > > >    };
> > > > >    +struct xn_timex_timeval {
> > > > > +    int64_t tv_sec;
> > > > > +    int64_t    tv_usec;
> > > > > +};
> > > > > +
> > > > > +struct xn_timex64 {
> > > > > +    unsigned int modes;    /* mode selector */
> > > > > +    int:32;            /* pad */
> > > > > +    long long offset;    /* time offset (usec) */
> > > > > +    long long freq;    /* frequency offset (scaled ppm) */
> > > > > +    long long maxerror;/* maximum error (usec) */
> > > > > +    long long esterror;/* estimated error (usec) */
> > > > > +    int status;        /* clock command/status */
> > > > > +    int:32;            /* pad */
> > > > > +    long long constant;/* pll time constant */
> > > > > +    long long precision;/* clock precision (usec) (read only) */
> > > > > +    long long tolerance;/* clock frequency tolerance (ppm) (read
> > > > > only) */
> > > > > +    struct xn_timex_timeval time;    /* (read only, except for
> > > > > ADJ_SETOFFSET) */
> > > > > +    long long tick;    /* (modified) usecs between clock ticks */
> > > > > +
> > > > > +    long long ppsfreq;/* pps frequency (scaled ppm) (ro) */
> > > > > +    long long jitter; /* pps jitter (us) (ro) */
> > > > > +    int shift;              /* interval duration (s) (shift) (ro) */
> > > > > +    int:32;            /* pad */
> > > > > +    long long stabil;            /* pps stability (scaled ppm) (ro) 
> > > > > */
> > > > > +    long long jitcnt; /* jitter limit exceeded (ro) */
> > > > > +    long long calcnt; /* calibration intervals (ro) */
> > > > > +    long long errcnt; /* calibration errors (ro) */
> > > > > +    long long stbcnt; /* stability limit exceeded (ro) */
> > > > > +
> > > > > +    int tai;        /* TAI offset (ro) */
> > > > > +
> > > > > +    int:32; int:32; int:32; int:32;
> > > > > +    int:32; int:32; int:32; int:32;
> > > > > +    int:32; int:32; int:32;
> > > > > +};
> > > > > +
> > > > >    #define NSEC_PER_SEC 1000000000
> > > > >      static void ts_normalise(struct xn_timespec64 *ts)
> > > > > @@ -326,6 +363,36 @@ static int test_sc_cobalt_clock_getres64(void)
> > > > >        return 0;
> > > > >    }
> > > > >    +static int test_sc_cobalt_clock_adjtime64(void)
> > > > > +{
> > > > > +    long ret;
> > > > > +    int code = __xn_syscode(sc_cobalt_clock_adjtime64);
> > > > > +    struct xn_timex64 tx64 = {};
> > > > > +
> > > > > +    /* Make sure we don't crash because of NULL pointers */
> > > > > +    ret = syscall(code, NULL, NULL);
> > > > > +    if (ret == -1 && errno == ENOSYS) {
> > > > > +        smokey_note("clock_adjtime64: skipped. (no kernel support)");
> > > > > +        return 0; // Not implemented, nothing to test, success
> > > > > +    }
> > > > > +    if (!smokey_assert(ret == -1) || !smokey_assert(errno == EFAULT))
> > > > > +        return errno;
> > > > > +
> > > > > +    /* Providing an invalid address has to deliver EFAULT */
> > > > > +    ret = syscall(code, CLOCK_REALTIME, (void *)0xdeadbeefUL);
> > > > > +    if (!smokey_assert(ret == -1) || !smokey_assert(errno == EFAULT))
> > > > > +        return errno;
> > > > > +
> > > > > +    /* Provide a valid 64bit timex*/
> > > > > +    tx64.modes = ADJ_SETOFFSET;
> > > > > +    tx64.time.tv_usec = 123;
> > > > > +    ret = syscall(code, CLOCK_REALTIME, &tx64);
> > > > 
> > > > In int __cobalt_clock_adjtime() we have
> > > > 
> > > >      switch (clock_id) {
> > > >      case CLOCK_REALTIME:
> > > >      case CLOCK_MONOTONIC:
> > > >      case CLOCK_MONOTONIC_RAW:
> > > >      case CLOCK_HOST_REALTIME:
> > > >          return -EOPNOTSUPP;
> > > > 
> > > > So the test-failure I see on x86 is fully expected. How did you get this
> > > > test running successfully?
> > > 
> > > In this revision, i got this:
> > > root@kylin-Lenovo:/home/kylin/workspace/y2038/xenomai-hacker-space#
> > > ./testsuite/smokey/smokey --run=27
> > > syscall-tests.c:391, assertion failed: !ret
> > > /home/kylin/workspace/y2038/xenomai-hacker-space/testsuite/smokey/.libs/lt-smokey:
> > > test y2038 failed: Unknown error -95 (which is EOPNOTSUPP)
> > > 
> > > In my last revision, which replaced syscall with XENOMAI_SYSCALL, it
> > > returns -95, i'm afraid it will terminate smokey test, i turned it to if
> > > !smokey_assert(ret) for now.
> > > 
> > > when __cobalt_clock_adjtime becomes supported, i will turn it back.
> > 
> > Already done. See the series re-posted yesterday.
> 
> great, i will submit a patch to address it.

No additional work necessary. The patches sent out for integration
already have it. (I squashed my fixes into your patch before publishing
it)

> > 
> > > 
> > > > 
> > > > 
> > > > > +    if (!smokey_assert(!ret))
> > > > > +        return errno;
> > > > > +
> > > > > +    return 0;
> > > > > +}
> > > > > +
> > > > >    static int run_y2038(struct smokey_test *t, int argc, char *const
> > > > > argv[])
> > > > >    {
> > > > >    @@ -351,5 +418,9 @@ static int run_y2038(struct smokey_test *t, int
> > > > > argc, char *const argv[])
> > > > >        if (ret)
> > > > >            return ret;
> > > > >    +    ret = test_sc_cobalt_clock_adjtime64();
> > > > > +    if (ret)
> > > > > +        return ret;
> > > > > +
> > > > >        return 0;
> > > > >    }
> > > > > 
> > > > 
> > > > 
> > 
> > 

Reply via email to