From 1aa1f6a7cf67c9cea1a609581eb9c2602fd96576 Mon Sep 17 00:00:00 2001 From: "C-J.Chen" Date: Tue, 18 Aug 2020 08:38:07 +0800 Subject: [PATCH] ANDROID: mpam: add vendor hook to record MPAM - To use MPAM in kernel task, vendor_hook call is needed to set MPAM at scheduling time. - Vendor_hooks is call ed when task is switching for MPAM state Bug: 165333282 Signed-off-by: C-J.Chen Change-Id: I30270c667c26e1a7039580b33011665bb3a8cce7 --- arch/arm64/kernel/process.c | 6 ++++++ drivers/android/vendor_hooks.c | 2 ++ include/trace/hooks/mpam.h | 24 ++++++++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 include/trace/hooks/mpam.h 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