From mboxrd@z Thu Jan 1 00:00:00 1970 Subject: Re: [PATCH 3/3] y2038: testsuite/smokey/y2038: testcase for adjtime64 References: <1619682320-16309-1-git-send-email-chensong_2000@189.cn> From: Florian Bezdeka Message-ID: Date: Tue, 1 Jun 2021 14:16:16 +0200 In-Reply-To: <1619682320-16309-1-git-send-email-chensong_2000@189.cn> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit MIME-Version: 1.0 List-Id: Discussions about the Xenomai project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Song Chen , xenomai@xenomai.org On 29.04.21 09:45, Song Chen wrote: > add test case for clock_adjtime64 in testsuite > > Signed-off-by: Song Chen > --- > 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