tee: optee: add invoke_fn tracepoints
Subsystems (2)
PATCH 1/1 tee: optee: add invoke_fn tracepoints
Add tracepoints to retrieve information about the invoke_fn. This would help to measure how many invoke_fn are triggered and how long it takes to complete one invoke_fn call.
Signed-off-by Jisheng Zhang <[email protected]>
--- drivers/tee/optee/call.c | 4 ++ drivers/tee/optee/optee_trace.h | 65 +++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 drivers/tee/optee/optee_trace.h
drivers/tee/optee/call.c +4 -0
@@ -12,6 +12,8 @@#include <linux/tee_drv.h> #include <linux/types.h> #include <linux/uaccess.h> +#define CREATE_TRACE_POINTS +#include "optee_trace.h" #include "optee_private.h" #include "optee_smc.h"
@@ -138,9 +140,11 @@ u32 optee_do_call_with_arg(struct tee_context *ctx, phys_addr_t parg)while (true) {struct arm_smccc_res res; +trace_optee_invoke_fn_begin (¶m); optee->invoke_fn (param.a0, param.a1, param.a2, param.a3, param.a4, param.a5, param.a6, param.a7, &res); +trace_optee_invoke_fn_end (¶m, &res);if (res.a0 ==OPTEE_SMC_RETURN_ETHREAD_LIMIT ) {/*
drivers/tee/optee/optee_trace.h new file +65 -0
65 lines not on this page · raw message
Signature · 1 line
2.30.0
Quoted 62 lines · On Tue, 9 Feb 2021 19:02:15 +0800 Jisheng Zhang <[email protected]>…
Add tracepoints to retrieve information about the
invoke_fn. This would help to measure how manyinvoke_fnare triggered and how long it takes to complete oneinvoke_fncall.Signed-off-by Jisheng Zhang <[email protected]>--- drivers/tee/optee/call.c | 4 ++ drivers/tee/optee/optee_trace.h | 65 +++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 drivers/tee/optee/optee_trace.hdrivers/tee/optee/call.c +4
-0@@ -12,6 +12,8 @@#include <linux/tee_drv.h> #include <linux/types.h> #include <linux/uaccess.h> +#define CREATE_TRACE_POINTS +#include "optee_trace.h" #include "optee_private.h" #include "optee_smc.h" @@ -138,9 +140,11 @@ u32 optee_do_call_with_arg(struct tee_context *ctx, phys_addr_t parg)while (true) {struct arm_smccc_res res; +trace_optee_invoke_fn_begin (¶m); optee->invoke_fn (param.a0, param.a1, param.a2, param.a3, param.a4, param.a5, param.a6, param.a7, &res); +trace_optee_invoke_fn_end (¶m, &res);if (res.a0 ==OPTEE_SMC_RETURN_ETHREAD_LIMIT ) {/* drivers/tee/optee/optee_trace.h new file +20
-0@@ -0,0 +1,65 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* +* optee trace points +* +* Copyright (C) 2021 Synaptics Incorporated +* Author: Jisheng Zhang <[email protected]> +*/ + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM optee + +#if !defined(_TRACE_OPTEE_H) || defined(TRACE_HEADER_MULTI_READ ) +#define _TRACE_OPTEE_H + +#include <linux/arm-smccc.h> +#include <linux/tracepoint.h> +#include "optee_private.h" + +TRACE_EVENT(optee_invoke_fn_begin, + TP_PROTO(struct optee_rpc_param *param),
drivers/tee/optee/optee_trace.h line 30
Quoted 10 lines
drivers/tee/optee/optee_trace.h new file +10
-0+TP_ARGS (param), + + TP_STRUCT__entry( + __field(void *, param) + __array(u32, args, 8) + ), + +TP_fast_assign ( + __entry->param = param; +memcpy (__entry->args, param,sizeof (__entry->args));
I wonder if you should add a:
BUILD_BUG_ON(sizeof(param) < sizeof(__entry->args));
here.
Quoted 10 lines
drivers/tee/optee/optee_trace.h new file +10
-0+ ), + +TP_printk ("param=%p (%x, %x, %x, %x, %x, %x, %x, %x)" , __entry->param, + __entry->args[0 ], __entry->args[1 ], __entry->args[2 ], + __entry->args[3 ], __entry->args[4 ], __entry->args[5 ], + __entry->args[6 ], __entry->args[7 ]) +); + +TRACE_EVENT(optee_invoke_fn_end, + TP_PROTO(struct optee_rpc_param *param, struct arm_smccc_res *res),
drivers/tee/optee/optee_trace.h line 50
Quoted 10 lines
drivers/tee/optee/optee_trace.h new file +10
-0+TP_ARGS (param, res), + +TP_STRUCT__entry ( + __field(void *, param) + __array(unsigned long, rets, 4) + ), + +TP_fast_assign ( + __entry->param = param; +memcpy (__entry->rets, res,sizeof (__entry->rets));
and a:
BUILD_BUG_ON(sizeof(res) < sizeof(__entry->rets));
here
Just to make sure that the size of what is being copied, is not smaller than the amount being copied.
-- Steve
Quoted 15 lines
drivers/tee/optee/optee_trace.h new file +15
-0+ ), + +TP_printk ("param=%p ret (%lx, %lx, %lx, %lx)" , __entry->param, + __entry->rets[0 ], __entry->rets[1 ], __entry->rets[2 ], + __entry->rets[3 ]) +); +#endif /* _TRACE_OPTEE_H */ + +#undef TRACE_INCLUDE_PATH +#define TRACE_INCLUDE_PATH . +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_FILE optee_trace + +/* This part must be outside protection */ +#include <trace/define_trace.h>