76 lines · c
1/* ADJ_FREQ Skew consistency test2 * by: john stultz (johnstul@us.ibm.com)3 * (C) Copyright IBM 20124 * Licensed under the GPLv25 *6 * NOTE: This is a meta-test which cranks the ADJ_FREQ knob back7 * and forth and watches for consistency problems. Thus this test requires8 * that the inconsistency-check tests be present in the same directory it9 * is run from.10 *11 * To build:12 * $ gcc skew_consistency.c -o skew_consistency -lrt13 *14 * This program is free software: you can redistribute it and/or modify15 * it under the terms of the GNU General Public License as published by16 * the Free Software Foundation, either version 2 of the License, or17 * (at your option) any later version.18 *19 * This program is distributed in the hope that it will be useful,20 * but WITHOUT ANY WARRANTY; without even the implied warranty of21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the22 * GNU General Public License for more details.23 */24 25 26#include <stdio.h>27#include <stdlib.h>28#include <unistd.h>29#include <sys/time.h>30#include <sys/timex.h>31#include <time.h>32#include <sys/types.h>33#include <sys/stat.h>34#include <fcntl.h>35#include <string.h>36#include <sys/wait.h>37#include "../kselftest.h"38 39int main(int argc, char **argv)40{41 struct timex tx;42 int ret, ppm;43 pid_t pid;44 45 46 printf("Running Asynchronous Frequency Changing Tests...\n");47 48 pid = fork();49 if (!pid)50 return system("./inconsistency-check -c 1 -t 600");51 52 ppm = 500;53 ret = 0;54 55 while (pid != waitpid(pid, &ret, WNOHANG)) {56 ppm = -ppm;57 tx.modes = ADJ_FREQUENCY;58 tx.freq = ppm << 16;59 adjtimex(&tx);60 usleep(500000);61 }62 63 /* Set things back */64 tx.modes = ADJ_FREQUENCY;65 tx.offset = 0;66 adjtimex(&tx);67 68 69 if (ret) {70 printf("[FAILED]\n");71 ksft_exit_fail();72 }73 printf("[OK]\n");74 ksft_exit_pass();75}76