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 21int 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 39int main(int argc, char *argv[]) 40{ 41 return test_harness(test_fork, "tm_fork"); 42} 43