Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

perf: tracing: Simplify perf_sysenter_enable/disable() with guards

Use guard(mutex)(&syscall_trace_lock) for perf_sysenter_enable() and
perf_sysenter_disable() as well as for the perf_sysexit_enable() and
perf_sysexit_disable(). This will make it easier to update these functions
with other code that has early exit handling.

Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Takaya Saeki <takayas@google.com>
Cc: Tom Zanussi <zanussi@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ian Rogers <irogers@google.com>
Cc: Douglas Raillard <douglas.raillard@arm.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ingo Molnar <mingo@redhat.com>
Link: https://lore.kernel.org/20251028231147.429583335@kernel.org
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

+22 -26
+22 -26
kernel/trace/trace_syscalls.c
··· 1049 1049 1050 1050 static int perf_sysenter_enable(struct trace_event_call *call) 1051 1051 { 1052 - int ret = 0; 1053 1052 int num; 1054 1053 1055 1054 num = ((struct syscall_metadata *)call->data)->syscall_nr; 1056 1055 1057 - mutex_lock(&syscall_trace_lock); 1058 - if (!sys_perf_refcount_enter) 1059 - ret = register_trace_sys_enter(perf_syscall_enter, NULL); 1060 - if (ret) { 1061 - pr_info("event trace: Could not activate syscall entry trace point"); 1062 - } else { 1063 - set_bit(num, enabled_perf_enter_syscalls); 1064 - sys_perf_refcount_enter++; 1056 + guard(mutex)(&syscall_trace_lock); 1057 + if (!sys_perf_refcount_enter) { 1058 + int ret = register_trace_sys_enter(perf_syscall_enter, NULL); 1059 + if (ret) { 1060 + pr_info("event trace: Could not activate syscall entry trace point"); 1061 + return ret; 1062 + } 1065 1063 } 1066 - mutex_unlock(&syscall_trace_lock); 1067 - return ret; 1064 + set_bit(num, enabled_perf_enter_syscalls); 1065 + sys_perf_refcount_enter++; 1066 + return 0; 1068 1067 } 1069 1068 1070 1069 static void perf_sysenter_disable(struct trace_event_call *call) ··· 1072 1073 1073 1074 num = ((struct syscall_metadata *)call->data)->syscall_nr; 1074 1075 1075 - mutex_lock(&syscall_trace_lock); 1076 + guard(mutex)(&syscall_trace_lock); 1076 1077 sys_perf_refcount_enter--; 1077 1078 clear_bit(num, enabled_perf_enter_syscalls); 1078 1079 if (!sys_perf_refcount_enter) 1079 1080 unregister_trace_sys_enter(perf_syscall_enter, NULL); 1080 - mutex_unlock(&syscall_trace_lock); 1081 1081 } 1082 1082 1083 1083 static int perf_call_bpf_exit(struct trace_event_call *call, struct pt_regs *regs, ··· 1153 1155 1154 1156 static int perf_sysexit_enable(struct trace_event_call *call) 1155 1157 { 1156 - int ret = 0; 1157 1158 int num; 1158 1159 1159 1160 num = ((struct syscall_metadata *)call->data)->syscall_nr; 1160 1161 1161 - mutex_lock(&syscall_trace_lock); 1162 - if (!sys_perf_refcount_exit) 1163 - ret = register_trace_sys_exit(perf_syscall_exit, NULL); 1164 - if (ret) { 1165 - pr_info("event trace: Could not activate syscall exit trace point"); 1166 - } else { 1167 - set_bit(num, enabled_perf_exit_syscalls); 1168 - sys_perf_refcount_exit++; 1162 + guard(mutex)(&syscall_trace_lock); 1163 + if (!sys_perf_refcount_exit) { 1164 + int ret = register_trace_sys_exit(perf_syscall_exit, NULL); 1165 + if (ret) { 1166 + pr_info("event trace: Could not activate syscall exit trace point"); 1167 + return ret; 1168 + } 1169 1169 } 1170 - mutex_unlock(&syscall_trace_lock); 1171 - return ret; 1170 + set_bit(num, enabled_perf_exit_syscalls); 1171 + sys_perf_refcount_exit++; 1172 + return 0; 1172 1173 } 1173 1174 1174 1175 static void perf_sysexit_disable(struct trace_event_call *call) ··· 1176 1179 1177 1180 num = ((struct syscall_metadata *)call->data)->syscall_nr; 1178 1181 1179 - mutex_lock(&syscall_trace_lock); 1182 + guard(mutex)(&syscall_trace_lock); 1180 1183 sys_perf_refcount_exit--; 1181 1184 clear_bit(num, enabled_perf_exit_syscalls); 1182 1185 if (!sys_perf_refcount_exit) 1183 1186 unregister_trace_sys_exit(perf_syscall_exit, NULL); 1184 - mutex_unlock(&syscall_trace_lock); 1185 1187 } 1186 1188 1187 1189 #endif /* CONFIG_PERF_EVENTS */