/* * Simple loop testing the CPU-affinity syscall. */ #include #include #include #include #define __NR_sched_set_affinity 226 _syscall3 (int, sched_set_affinity, pid_t, pid, unsigned int, mask_len, unsigned long *, mask) #define __NR_sched_get_affinity 227 _syscall3 (int, sched_get_affinity, pid_t, pid, unsigned int *, mask_len, unsigned long *, mask) int main (int argc, char **argv) { int pid, ret; unsigned int mask_len; unsigned long mask, new_mask; if (argc != 3) { printf("usage: chaff \n"); exit(-1); } pid = atol(argv[1]); sscanf(argv[2], "%lx", &new_mask); printf("pid: %d. new_mask: (%s) %08lx.\n", pid, argv[2], new_mask); ret = sched_get_affinity(pid, &mask_len, &mask); if (ret) { printf("could not get pid %d's affinity.\n", pid); return -1; } printf("pid %d's old affinity: %08lx.", pid, mask); ret = sched_set_affinity(pid, sizeof(new_mask), &new_mask); if (ret) { printf("could not set pid %d's affinity.\n", pid); return -1; } ret = sched_get_affinity(pid, &mask_len, &mask); if (ret) { printf("sched_get_affinity returned %d, exiting.\n", ret); return -1; } printf("pid %d's new affinity: %08lx.", pid, mask); return 0; }