1
0
Files
2022-09-29 17:59:04 +03:00

53 lines
1.5 KiB
C

/* #include <sys/syssgi.h> */
#define _KMEMUSER
#include <sys/types.h>
#include <sys/prctl.h>
#undef _KMEMUSER
#include <assert.h>
#include <ulocks.h>
extern void single_context(unsigned int threadid);
unsigned int *tid;
void thread_start(void)
{
unsigned int myid;
myid = __fetch_and_add(tid, 1);
printf("%d\n", myid);
single_context(myid);
}
int
main(int argc, char *argv[])
{
int parallelism, i;
if ((argc != 2) || ((parallelism = atoi(argv[1])) <= 0)) {
printf("%s: parallelism\n", argv[0]);
return -1;
}
tid = (unsigned int *)malloc(sizeof(unsigned int));
*tid = 2;
usconfig(CONF_INITUSERS, 1024);
for (i=1; i<parallelism; i++) {
sproc(thread_start, PR_SALL, NULL);
}
single_context(1);
}
void
failtest(short nid, int64_t i, int64_t j, int64_t iteration)
{
if (j < -1) {
printf("fail_test iter %d: (PRDA->t_sys.t_nid=%d) register a2=%d does not make sense\n", iteration, PRDA->t_sys.t_nid, j);
} else if (j == -1) {
printf("fail_test iter %d: (PRDA->t_sys.t_nid=%d) nid ?= a0(%d) a1(%d)\n", iteration, PRDA->t_sys.t_nid, nid, i);
} else if (j < 32) {
printf("fail_test iter %d: nid %d difference %d register %d\n", iteration, nid, i, j);
} else if (j < 64) {
printf("fail_test iter %d: nid %d difference %d register fp%d\n", iteration, nid, i,j-32);
} else {
printf("fail_test iter %d: (PRDA->t_sys.t_nid=%d) register a2=%d does not make sense\n", iteration, PRDA->t_sys.t_nid, j);
}
exit(-1);
}