diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c index 491670d6fc56..9b54b0b9dd8a 100644 --- a/arch/arm64/kernel/process.c +++ b/arch/arm64/kernel/process.c @@ -44,6 +44,7 @@ #include #include #include +#include #include #include @@ -560,6 +561,11 @@ __notrace_funcgraph struct task_struct *__switch_to(struct task_struct *prev, uao_thread_switch(next); ssbs_thread_switch(next); erratum_1418040_thread_switch(prev, next); + /* + * vendor hook is needed before the dsb(), + * because MPAM is related to cache maintenance. + */ + trace_android_vh_mpam_set(prev, next); /* * Complete any pending TLB or cache maintenance on this CPU in case diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index f3e67f23c68d..0d8d51ea9c45 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -16,6 +16,7 @@ #include #include #include +#include /* * Export tracepoints that act as a bare tracehook (ie: have no trace event @@ -52,3 +53,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_start); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sched_show_task); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpu_idle); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mpam_set); diff --git a/include/trace/hooks/mpam.h b/include/trace/hooks/mpam.h new file mode 100644 index 000000000000..1a89dae9b1fb --- /dev/null +++ b/include/trace/hooks/mpam.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM mpam +#undef TRACE_INCLUDE_PATH +#define TRACE_INCLUDE_PATH trace/hooks +#if !defined(_TRACE_HOOK_MPAM_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_HOOK_MPAM_H +#include +#include +/* + * Following tracepoints are not exported in tracefs and provide a + * mechanism for vendor modules to hook and extend functionality + */ +#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS) +struct task_struct; +DECLARE_HOOK(android_vh_mpam_set, + TP_PROTO(struct task_struct *prev, struct task_struct *next), + TP_ARGS(prev, next)); +#else +#define trace_android_vh_mpam_set(prev, next) +#endif +#endif /* _TRACE_HOOK_MPAM_H */ +/* This part must be outside protection */ +#include