1 #include "util.h" 2 #include "../debug.h" 3 4 5 /* 6 * Default error logging functions 7 */ 8 static int perf_stdio__error(const char *format, va_list args) 9 { 10 fprintf(stderr, "Error:\n"); 11 vfprintf(stderr, format, args); 12 return 0; 13 } 14 15 static int perf_stdio__warning(const char *format, va_list args) 16 { 17 fprintf(stderr, "Warning:\n"); 18 vfprintf(stderr, format, args); 19 return 0; 20 } 21 22 static struct perf_error_ops default_eops = 23 { 24 .error = perf_stdio__error, 25 .warning = perf_stdio__warning, 26 }; 27 28 static struct perf_error_ops *perf_eops = &default_eops; 29 30 31 int ui__error(const char *format, ...) 32 { 33 int ret; 34 va_list args; 35 36 va_start(args, format); 37 ret = perf_eops->error(format, args); 38 va_end(args); 39 40 return ret; 41 } 42 43 int ui__warning(const char *format, ...) 44 { 45 int ret; 46 va_list args; 47 48 va_start(args, format); 49 ret = perf_eops->warning(format, args); 50 va_end(args); 51 52 return ret; 53 } 54 55 int ui__error_paranoid(void) 56 { 57 return ui__error("Permission error - are you root?\n" 58 "Consider tweaking /proc/sys/kernel/perf_event_paranoid:\n" 59 " -1 - Not paranoid at all\n" 60 " 0 - Disallow raw tracepoint access for unpriv\n" 61 " 1 - Disallow cpu events for unpriv\n" 62 " 2 - Disallow kernel profiling for unpriv\n"); 63 } 64 65 66 /** 67 * perf_error__register - Register error logging functions 68 * @eops: The pointer to error logging function struct 69 * 70 * Register UI-specific error logging functions. Before calling this, 71 * other logging functions should be unregistered, if any. 72 */ 73 int perf_error__register(struct perf_error_ops *eops) 74 { 75 if (perf_eops != &default_eops) 76 return -1; 77 78 perf_eops = eops; 79 return 0; 80 } 81 82 /** 83 * perf_error__unregister - Unregister error logging functions 84 * @eops: The pointer to error logging function struct 85 * 86 * Unregister already registered error logging functions. 87 */ 88 int perf_error__unregister(struct perf_error_ops *eops) 89 { 90 if (perf_eops != eops) 91 return -1; 92 93 perf_eops = &default_eops; 94 return 0; 95 } 96