| /* | |
| * Copyright 2015, Michael Neuling, IBM Corp. | |
| * Licensed under GPLv2. | |
| * | |
| * Edited: Rashmica Gupta, Nov 2015 | |
| * | |
| * This test does a fork syscall inside a transaction. Basic sniff test | |
| * to see if we can enter the kernel during a transaction. | |
| */ | |
| #include <errno.h> | |
| #include <inttypes.h> | |
| #include <pthread.h> | |
| #include <stdio.h> | |
| #include <stdlib.h> | |
| #include <unistd.h> | |
| #include "utils.h" | |
| #include "tm.h" | |
| int test_fork(void) | |
| { | |
| SKIP_IF(!have_htm()); | |
| asm __volatile__( | |
| "tbegin.;" | |
| "blt 1f; " | |
| "li 0, 2;" /* fork syscall */ | |
| "sc ;" | |
| "tend.;" | |
| "1: ;" | |
| : : : "memory", "r0"); | |
| /* If we reach here, we've passed. Otherwise we've probably crashed | |
| * the kernel */ | |
| return 0; | |
| } | |
| int main(int argc, char *argv[]) | |
| { | |
| return test_harness(test_fork, "tm_fork"); | |
| } |