Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests/timers: Add set-tai from the timetest suite

This patch adds the set-tai test which ensures the tai offset
can be set properly from adjtimex.

Cc: Shuah Khan <shuahkh@osg.samsung.com>
Cc: Prarit Bhargava <prarit@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Richard Cochran <richardcochran@gmail.com>
Signed-off-by: John Stultz <john.stultz@linaro.org>
Tested-by: Prarit Bhargava <prarit@redhat.com>
Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>

authored by

John Stultz and committed by
Shuah Khan
3a92a15f d7b2902c

+81 -1
+2 -1
tools/testing/selftests/timers/Makefile
··· 5 5 bins = posix_timers nanosleep inconsistency-check nsleep-lat raw_skew \ 6 6 set-timer-lat threadtest mqueue-lat valid-adjtimex \ 7 7 alarmtimer-suspend change_skew skew_consistency clocksource-switch \ 8 - leap-a-day leapcrash 8 + leap-a-day leapcrash set-tai 9 9 10 10 all: ${bins} 11 11 ··· 32 32 ./clocksource-switch 33 33 ./leap-a-day -s -i 10 34 34 ./leapcrash 35 + ./set-tai 35 36 36 37 clean: 37 38 rm -f ${bins}
+79
tools/testing/selftests/timers/set-tai.c
··· 1 + /* Set tai offset 2 + * by: John Stultz <john.stultz@linaro.org> 3 + * (C) Copyright Linaro 2013 4 + * Licensed under the GPLv2 5 + * 6 + * This program is free software: you can redistribute it and/or modify 7 + * it under the terms of the GNU General Public License as published by 8 + * the Free Software Foundation, either version 2 of the License, or 9 + * (at your option) any later version. 10 + * 11 + * This program is distributed in the hope that it will be useful, 12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 + * GNU General Public License for more details. 15 + */ 16 + 17 + 18 + #include <stdio.h> 19 + #include <stdlib.h> 20 + #include <time.h> 21 + #include <sys/time.h> 22 + #include <sys/timex.h> 23 + #include <string.h> 24 + #include <signal.h> 25 + #include <unistd.h> 26 + #ifdef KTEST 27 + #include "../kselftest.h" 28 + #else 29 + static inline int ksft_exit_pass(void) 30 + { 31 + exit(0); 32 + } 33 + static inline int ksft_exit_fail(void) 34 + { 35 + exit(1); 36 + } 37 + #endif 38 + 39 + int set_tai(int offset) 40 + { 41 + struct timex tx; 42 + 43 + memset(&tx, 0, sizeof(tx)); 44 + 45 + tx.modes = ADJ_TAI; 46 + tx.constant = offset; 47 + 48 + return adjtimex(&tx); 49 + } 50 + 51 + int get_tai(void) 52 + { 53 + struct timex tx; 54 + 55 + memset(&tx, 0, sizeof(tx)); 56 + 57 + adjtimex(&tx); 58 + return tx.tai; 59 + } 60 + 61 + int main(int argc, char **argv) 62 + { 63 + int i, ret; 64 + 65 + ret = get_tai(); 66 + printf("tai offset started at %i\n", ret); 67 + 68 + printf("Checking tai offsets can be properly set: "); 69 + for (i = 1; i <= 60; i++) { 70 + ret = set_tai(i); 71 + ret = get_tai(); 72 + if (ret != i) { 73 + printf("[FAILED] expected: %i got %i\n", i, ret); 74 + return ksft_exit_fail(); 75 + } 76 + } 77 + printf("[OK]\n"); 78 + return ksft_exit_pass(); 79 + }