| /* |
| * 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"); |
| } |