16e8b285bSJohn Stultz /* ADJ_FREQ Skew consistency test 26e8b285bSJohn Stultz * by: john stultz (johnstul@us.ibm.com) 36e8b285bSJohn Stultz * (C) Copyright IBM 2012 46e8b285bSJohn Stultz * Licensed under the GPLv2 56e8b285bSJohn Stultz * 66e8b285bSJohn Stultz * NOTE: This is a meta-test which cranks the ADJ_FREQ knob back 76e8b285bSJohn Stultz * and forth and watches for consistency problems. Thus this test requires 86e8b285bSJohn Stultz * that the inconsistency-check tests be present in the same directory it 96e8b285bSJohn Stultz * is run from. 106e8b285bSJohn Stultz * 116e8b285bSJohn Stultz * To build: 126e8b285bSJohn Stultz * $ gcc skew_consistency.c -o skew_consistency -lrt 136e8b285bSJohn Stultz * 146e8b285bSJohn Stultz * This program is free software: you can redistribute it and/or modify 156e8b285bSJohn Stultz * it under the terms of the GNU General Public License as published by 166e8b285bSJohn Stultz * the Free Software Foundation, either version 2 of the License, or 176e8b285bSJohn Stultz * (at your option) any later version. 186e8b285bSJohn Stultz * 196e8b285bSJohn Stultz * This program is distributed in the hope that it will be useful, 206e8b285bSJohn Stultz * but WITHOUT ANY WARRANTY; without even the implied warranty of 216e8b285bSJohn Stultz * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 226e8b285bSJohn Stultz * GNU General Public License for more details. 236e8b285bSJohn Stultz */ 246e8b285bSJohn Stultz 256e8b285bSJohn Stultz 266e8b285bSJohn Stultz #include <stdio.h> 276e8b285bSJohn Stultz #include <stdlib.h> 286e8b285bSJohn Stultz #include <unistd.h> 296e8b285bSJohn Stultz #include <sys/time.h> 306e8b285bSJohn Stultz #include <sys/timex.h> 316e8b285bSJohn Stultz #include <time.h> 326e8b285bSJohn Stultz #include <sys/types.h> 336e8b285bSJohn Stultz #include <sys/stat.h> 346e8b285bSJohn Stultz #include <fcntl.h> 356e8b285bSJohn Stultz #include <string.h> 366e8b285bSJohn Stultz #include <sys/wait.h> 376e8b285bSJohn Stultz #include "../kselftest.h" 386e8b285bSJohn Stultz 396e8b285bSJohn Stultz #define NSEC_PER_SEC 1000000000LL 406e8b285bSJohn Stultz main(int argc,char ** argv)41*a8d74fe7SWolfram Sangint main(int argc, char **argv) 426e8b285bSJohn Stultz { 436e8b285bSJohn Stultz struct timex tx; 446e8b285bSJohn Stultz int ret, ppm; 456e8b285bSJohn Stultz pid_t pid; 466e8b285bSJohn Stultz 476e8b285bSJohn Stultz 48a109ded2SColin Ian King printf("Running Asynchronous Frequency Changing Tests...\n"); 496e8b285bSJohn Stultz 506e8b285bSJohn Stultz pid = fork(); 516e8b285bSJohn Stultz if (!pid) 526e8b285bSJohn Stultz return system("./inconsistency-check -c 1 -t 600"); 536e8b285bSJohn Stultz 546e8b285bSJohn Stultz ppm = 500; 556e8b285bSJohn Stultz ret = 0; 566e8b285bSJohn Stultz 576e8b285bSJohn Stultz while (pid != waitpid(pid, &ret, WNOHANG)) { 586e8b285bSJohn Stultz ppm = -ppm; 596e8b285bSJohn Stultz tx.modes = ADJ_FREQUENCY; 606e8b285bSJohn Stultz tx.freq = ppm << 16; 616e8b285bSJohn Stultz adjtimex(&tx); 626e8b285bSJohn Stultz usleep(500000); 636e8b285bSJohn Stultz } 646e8b285bSJohn Stultz 656e8b285bSJohn Stultz /* Set things back */ 666e8b285bSJohn Stultz tx.modes = ADJ_FREQUENCY; 676e8b285bSJohn Stultz tx.offset = 0; 686e8b285bSJohn Stultz adjtimex(&tx); 696e8b285bSJohn Stultz 706e8b285bSJohn Stultz 716e8b285bSJohn Stultz if (ret) { 726e8b285bSJohn Stultz printf("[FAILED]\n"); 736e8b285bSJohn Stultz return ksft_exit_fail(); 746e8b285bSJohn Stultz } 756e8b285bSJohn Stultz printf("[OK]\n"); 766e8b285bSJohn Stultz return ksft_exit_pass(); 776e8b285bSJohn Stultz } 78