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#include "../kselftest.h"
  27
  28int set_tai(int offset)
  29{
  30        struct timex tx;
  31
  32        memset(&tx, 0, sizeof(tx));
  33
  34        tx.modes = ADJ_TAI;
  35        tx.constant = offset;
  36
  37        return adjtimex(&tx);
  38}
  39
  40int get_tai(void)
  41{
  42        struct timex tx;
  43
  44        memset(&tx, 0, sizeof(tx));
  45
  46        adjtimex(&tx);
  47        return tx.tai;
  48}
  49
  50int main(int argc, char **argv)
  51{
  52        int i, ret;
  53
  54        ret = get_tai();
  55        printf("tai offset started at %i\n", ret);
  56
  57        printf("Checking tai offsets can be properly set: ");
  58        fflush(stdout);
  59        for (i = 1; i <= 60; i++) {
  60                ret = set_tai(i);
  61                ret = get_tai();
  62                if (ret != i) {
  63                        printf("[FAILED] expected: %i got %i\n", i, ret);
  64                        return ksft_exit_fail();
  65                }
  66        }
  67        printf("[OK]\n");
  68        return ksft_exit_pass();
  69}
  70