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? > + 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; > } > -- Siemens AG, T RDA IOT Corporate Competence Center Embedded Linux