1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright 2015, Michael Neuling, IBM Corp. 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 SKIP_IF(htm_is_synthetic()); 25 26 asm __volatile__( 27 "tbegin.;" 28 "blt 1f; " 29 "li 0, 2;" /* fork syscall */ 30 "sc ;" 31 "tend.;" 32 "1: ;" 33 : : : "memory", "r0"); 34 /* If we reach here, we've passed. Otherwise we've probably crashed 35 * the kernel */ 36 37 return 0; 38 } 39 40 int main(int argc, char *argv[]) 41 { 42 return test_harness(test_fork, "tm_fork"); 43 } 44