1 /* 2 * Copyright 2015, Michael Neuling, IBM Corp. 3 * Licensed under GPLv2. 4 * 5 * Edited: Rashmica Gupta, Nov 2015 6 * 7 * This test does a fork syscall inside a transaction. Basic sniff test 8 * to see if we can enter the kernel during a transaction. 9 */ 10 11 #include <errno.h> 12 #include <inttypes.h> 13 #include <pthread.h> 14 #include <stdio.h> 15 #include <stdlib.h> 16 #include <unistd.h> 17 18 #include "utils.h" 19 #include "tm.h" 20 21 int test_fork(void) 22 { 23 SKIP_IF(!have_htm()); 24 25 asm __volatile__( 26 "tbegin.;" 27 "blt 1f; " 28 "li 0, 2;" /* fork syscall */ 29 "sc ;" 30 "tend.;" 31 "1: ;" 32 : : : "memory", "r0"); 33 /* If we reach here, we've passed. Otherwise we've probably crashed 34 * the kernel */ 35 36 return 0; 37 } 38 39 int main(int argc, char *argv[]) 40 { 41 return test_harness(test_fork, "tm_fork"); 42 } 43