/* Clocksource change test * by: john stultz (johnstul@us.ibm.com) * (C) Copyright IBM 2012 * Licensed under the GPLv2 * * NOTE: This is a meta-test which quickly changes the clocksource and * then uses other tests to detect problems. Thus this test requires * that the inconsistency-check and nanosleep tests be present in the * same directory it is run from. * * To build: * $ gcc clocksource-switch.c -o clocksource-switch -lrt * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details.
*/
sprintf(buf, "./inconsistency-check -t %i", secs);
ret = system(buf); if (WIFEXITED(ret) && WEXITSTATUS(ret)) return WEXITSTATUS(ret);
ret = system("./nanosleep"); return WIFEXITED(ret) ? WEXITSTATUS(ret) : 0;
}
char clocksource_list[10][30];
int main(int argc, char **argv)
{ char orig_clk[512]; int count, i, status, opt; int do_sanity_check = 1; int runtime = 60;
pid_t pid;
/* Process arguments */ while ((opt = getopt(argc, argv, "st:")) != -1) { switch (opt) { case's':
do_sanity_check = 0; break; case't':
runtime = atoi(optarg); break; default:
printf("Usage: %s [-s] [-t ]\n", argv[0]);
printf(" -s: skip sanity checks\n");
printf(" -t: Number of seconds to run\n"); exit(-1);
}
}
get_cur_clocksource(orig_clk, 512);
count = get_clocksources(clocksource_list);
if (change_clocksource(clocksource_list[0])) {
printf("Error: You probably need to run this as root\n"); return -1;
}
/* Check everything is sane before we start switching asynchronously */ if (do_sanity_check) { for (i = 0; i < count; i++) {
ksft_print_msg("Validating clocksource %s\n",
clocksource_list[i]); if (change_clocksource(clocksource_list[i])) {
status = -1; goto out;
} if (run_tests(5)) {
status = -1; goto out;
}
}
}
while (pid != waitpid(pid, &status, WNOHANG)) for (i = 0; i < count; i++) if (change_clocksource(clocksource_list[i])) {
status = -1; goto out;
}
out:
change_clocksource(orig_clk);
/* Print at the end to not mix output with child process */
ksft_print_header();
ksft_set_plan(1);
ksft_test_result(!status, "clocksource-switch\n");
ksft_exit(!status);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.