1 // SPDX-License-Identifier: GPL-2.0 2 #include <pthread.h> 3 #include <stdlib.h> 4 #include <signal.h> 5 #include <unistd.h> 6 #include <linux/compiler.h> 7 #include "../tests.h" 8 9 static volatile int a; 10 static volatile sig_atomic_t done; 11 sighandler(int sig __maybe_unused)12static void sighandler(int sig __maybe_unused) 13 { 14 done = 1; 15 } 16 leaf(int b)17static inline void __attribute__((always_inline)) leaf(int b) 18 { 19 again: 20 a += b; 21 if (!done) 22 goto again; 23 } 24 middle(int b)25static inline void __attribute__((always_inline)) middle(int b) 26 { 27 leaf(b); 28 } 29 parent(int b)30static noinline void parent(int b) 31 { 32 middle(b); 33 } 34 inlineloop(int argc,const char ** argv)35static int inlineloop(int argc, const char **argv) 36 { 37 int sec = 1; 38 39 pthread_setname_np(pthread_self(), "perf-inlineloop"); 40 if (argc > 0) 41 sec = atoi(argv[0]); 42 43 signal(SIGINT, sighandler); 44 signal(SIGALRM, sighandler); 45 alarm(sec); 46 47 parent(sec); 48 49 return 0; 50 } 51 52 DEFINE_WORKLOAD(inlineloop); 53