cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

set-tai.c (1527B)


      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}