Release 4.10 tools/testing/selftests/prctl/disable-tsc-ctxt-sw-stress-test.c
/*
* Tests for prctl(PR_GET_TSC, ...) / prctl(PR_SET_TSC, ...)
*
* Tests if the control register is updated correctly
* at context switches
*
* Warning: this test will cause a very high load for a few seconds
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <inttypes.h>
#include <wait.h>
#include <sys/prctl.h>
#include <linux/prctl.h>
/* Get/set the process' ability to use the timestamp counter instruction */
#ifndef PR_GET_TSC
#define PR_GET_TSC 25
#define PR_SET_TSC 26
# define PR_TSC_ENABLE 1
/* allow the use of the timestamp counter */
# define PR_TSC_SIGSEGV 2
/* throw a SIGSEGV instead of reading the TSC */
#endif
static uint64_t rdtsc(void)
{
uint32_t lo, hi;
/* We cannot use "=A", since this would use %rax on x86_64 */
__asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
return (uint64_t)hi << 32 | lo;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
erik bosman | erik bosman | 23 | 85.19% | 1 | 50.00% |
peter foley | peter foley | 4 | 14.81% | 1 | 50.00% |
| Total | 27 | 100.00% | 2 | 100.00% |
static void sigsegv_expect(int sig)
{
/* */
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
erik bosman | erik bosman | 9 | 90.00% | 1 | 50.00% |
peter foley | peter foley | 1 | 10.00% | 1 | 50.00% |
| Total | 10 | 100.00% | 2 | 100.00% |
static void segvtask(void)
{
if (prctl(PR_SET_TSC, PR_TSC_SIGSEGV) < 0)
{
perror("prctl");
exit(0);
}
signal(SIGSEGV, sigsegv_expect);
alarm(10);
rdtsc();
fprintf(stderr, "FATAL ERROR, rdtsc() succeeded while disabled\n");
exit(0);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
erik bosman | erik bosman | 57 | 98.28% | 1 | 50.00% |
peter foley | peter foley | 1 | 1.72% | 1 | 50.00% |
| Total | 58 | 100.00% | 2 | 100.00% |
static void sigsegv_fail(int sig)
{
fprintf(stderr, "FATAL ERROR, rdtsc() failed while enabled\n");
exit(0);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
erik bosman | erik bosman | 20 | 95.24% | 1 | 50.00% |
peter foley | peter foley | 1 | 4.76% | 1 | 50.00% |
| Total | 21 | 100.00% | 2 | 100.00% |
static void rdtsctask(void)
{
if (prctl(PR_SET_TSC, PR_TSC_ENABLE) < 0)
{
perror("prctl");
exit(0);
}
signal(SIGSEGV, sigsegv_fail);
alarm(10);
for(;;) rdtsc();
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
erik bosman | erik bosman | 50 | 98.04% | 1 | 50.00% |
peter foley | peter foley | 1 | 1.96% | 1 | 50.00% |
| Total | 51 | 100.00% | 2 | 100.00% |
int main(void)
{
int n_tasks = 100, i;
fprintf(stderr, "[No further output means we're allright]\n");
for (i=0; i<n_tasks; i++)
if (fork() == 0)
{
if (i & 1)
segvtask();
else
rdtsctask();
}
for (i=0; i<n_tasks; i++)
wait(NULL);
exit(0);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
erik bosman | erik bosman | 78 | 98.73% | 1 | 50.00% |
mahesh khanwalkar | mahesh khanwalkar | 1 | 1.27% | 1 | 50.00% |
| Total | 79 | 100.00% | 2 | 100.00% |
Overall Contributors
| Person | Tokens | Prop | Commits | CommitProp |
erik bosman | erik bosman | 286 | 96.95% | 1 | 33.33% |
peter foley | peter foley | 8 | 2.71% | 1 | 33.33% |
mahesh khanwalkar | mahesh khanwalkar | 1 | 0.34% | 1 | 33.33% |
| Total | 295 | 100.00% | 3 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.