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