From f00a145958b9bd9eb20d81145295eb7410d179c5 Mon Sep 17 00:00:00 2001 From: Chuang Zhang Date: Mon, 24 Apr 2023 19:05:14 +0800 Subject: [PATCH] BACKPORT: FROMGIT: Binder: Add timestamp to transaction record This patch adds a timestamp field to the binder_transaction structure to track the time consumed during transmission when reading binder_transaction records. Signed-off-by: Chuang Zhang Acked-by: Carlos Llamas Link: https://lore.kernel.org/r/5ac8c0d09392290be789423f0dd78a520b830fab.1682333709.git.zhangchuang3@xiaomi.com Signed-off-by: Greg Kroah-Hartman Bug: 235773151 (cherry picked from commit 800936191a26a5aba5caa3cbd70a4154b45eb94a git: //git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git char-misc-next) [cmllamas: resolved minor conflicts with local patches] Change-Id: If6dab2e9b80c71f9ac3084dc8cf0e519976f55d8 Signed-off-by: Carlos Llamas --- drivers/android/binder.c | 9 +++++++-- drivers/android/binder_internal.h | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/android/binder.c b/drivers/android/binder.c index 66e489cb9fd9..f39f52f378c1 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -66,6 +66,7 @@ #include #include #include +#include #include #include @@ -3113,6 +3114,7 @@ static void binder_transaction(struct binder_proc *proc, binder_size_t last_fixup_min_off = 0; struct binder_context *context = proc->context; int t_debug_id = atomic_inc_return(&binder_last_id); + ktime_t t_start_time = ktime_get(); char *secctx = NULL; u32 secctx_sz = 0; struct list_head sgc_head; @@ -3358,6 +3360,7 @@ static void binder_transaction(struct binder_proc *proc, binder_stats_created(BINDER_STAT_TRANSACTION_COMPLETE); t->debug_id = t_debug_id; + t->start_time = t_start_time; if (reply) binder_debug(BINDER_DEBUG_TRANSACTION, @@ -6180,18 +6183,20 @@ static void print_binder_transaction_ilocked(struct seq_file *m, { struct binder_proc *to_proc; struct binder_buffer *buffer = t->buffer; + ktime_t current_time = ktime_get(); spin_lock(&t->lock); to_proc = t->to_proc; seq_printf(m, - "%s %d: %pK from %d:%d to %d:%d code %x flags %x pri %d:%d r%d", + "%s %d: %pK from %d:%d to %d:%d code %x flags %x pri %d:%d r%d elapsed %lldms", prefix, t->debug_id, t, t->from ? t->from->proc->pid : 0, t->from ? t->from->pid : 0, to_proc ? to_proc->pid : 0, t->to_thread ? t->to_thread->pid : 0, t->code, t->flags, t->priority.sched_policy, - t->priority.prio, t->need_reply); + t->priority.prio, t->need_reply, + ktime_ms_delta(current_time, t->start_time)); spin_unlock(&t->lock); if (proc != to_proc) { diff --git a/drivers/android/binder_internal.h b/drivers/android/binder_internal.h index 9132d1483288..b3640301bce8 100644 --- a/drivers/android/binder_internal.h +++ b/drivers/android/binder_internal.h @@ -567,6 +567,7 @@ struct binder_transaction { bool set_priority_called; bool is_nested; kuid_t sender_euid; + ktime_t start_time; struct list_head fd_fixups; binder_uintptr_t security_ctx; /**