linux/tools/testing/selftests/timers/set-tai.c
<<
>>
Prefs
   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
  29static inline int ksft_exit_pass(void)
  30{
  31        exit(0);
  32}
  33static inline int ksft_exit_fail(void)
  34{
  35        exit(1);
  36}
  37#endif
  38
  39int 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
  51int 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
  61int 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}
  80