Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp2131282pxa; Mon, 3 Aug 2020 08:13:53 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxaI68bkeY7SWZL56Jr3oBc0ijiaToBDmQdTAmWmoaWkzLflgb+Dz8tlq+kWgUhZpsX7El8 X-Received: by 2002:a05:6402:a4c:: with SMTP id bt12mr15658106edb.360.1596467632835; Mon, 03 Aug 2020 08:13:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1596467632; cv=none; d=google.com; s=arc-20160816; b=b6DQnjPSb0ZgOr26pMFsodBKt3yF2xzk5ts7Y3vDFWW5mXxo9NJRaa8xlz4h3RJIKy 7BCmXZ+7BlWAcKMlKXtBT6fxQLsl0tRBcvuZ45oJlozwf31rRAD2rzUVk8Pso/IND+iW bWiCOPqJqDEQDDi/3u1yJbLnUyM/6yt5vPxEZ7mlthJGMNoFZoCS1D37XQs0WMA7m0A/ S5Ypu6+zfZCsEYaDSR5sRPqmEIGvuvwtEL0WYM2P62JE2oPDxHY6SnKplh3XoE0Ny1eb wRt/03wTHhSc+ENySNLDFDO/5eYwceiUupZQa/WJFlGpDwZP3XIlDmsqDFwWW3E0copH /ujA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=nSQjY/yDDy2IgeloS1YMeNYtwnPmouyoqnWkR/XWcuY=; b=gAxftWsr50kH4I44Rr8isPBDYBUWxIMRz4P5yvkXt66ftB7R1IqxDByTPBwXcqaoL4 LzpyfjmA0obke2HIcYGOzs/mxhUtYALju9iAXbXFcugQPwL6vnbtBGDZEBJNyVL4wvSi prZWRTPyRGu8Ak5WjnbKCT0eEOk5A7XmFVbGN0b0Ehq3esgdpbZIZbekuxhO9WF6VIAE U7t2K8153EVvCdUvKSXHVdS7U06OWgxlK7AiR7P5dp2tDBt4Y1F4vc1yR7V6ce97tVWx SFFmPPpg5zRf9Q9IGKo97Gg7cOZ4izxQHmiuMxIEXhBvxW+w9ul0e/Edaa0+BHAuXS01 0DBA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b="C6qa2e/+"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id dm12si12820435ejc.675.2020.08.03.08.13.30; Mon, 03 Aug 2020 08:13:52 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b="C6qa2e/+"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728023AbgHCPMo (ORCPT + 99 others); Mon, 3 Aug 2020 11:12:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39670 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725933AbgHCPMn (ORCPT ); Mon, 3 Aug 2020 11:12:43 -0400 Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com [IPv6:2a00:1450:4864:20::544]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4DBB8C06174A for ; Mon, 3 Aug 2020 08:12:43 -0700 (PDT) Received: by mail-ed1-x544.google.com with SMTP id v22so16704903edy.0 for ; Mon, 03 Aug 2020 08:12:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=nSQjY/yDDy2IgeloS1YMeNYtwnPmouyoqnWkR/XWcuY=; b=C6qa2e/+DC+X1CV0iz/uz93YXTJQi4pGFe0MOHD5CuLW7MnRHvUc1DQdnZxGpnXaH/ 7tAl7JLLJibUQk8XT2ud5cYfW7e3f1iPioq5zQR97icXzdV4OXLrW3XmOnIL8gNx4y6A GCIJUn5ORGn2O47C7XOWcvpbfv6IF+zxBdzNnzbtLyhcURInr0rOC0G0Hu1lpKT5P/6H +F1FebkqqvvfOdo2URKMCcGlsIbVz8l8SbbA+EEH1BP1gHok8lSyAYzdAk61ekdIBCeb ea1Qt8qYGDetm0vMofn+D6hfuiSV5FPnpfZdE/xE+OymVSad8oiHa+2Fl7CUknCaGona pHRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=nSQjY/yDDy2IgeloS1YMeNYtwnPmouyoqnWkR/XWcuY=; b=SVBH0k9E5CzsNw9qYz/FGJevCl4Z2MK3E8IrWtLl9AGKkw8qdv5nuGDR9g1xg05Cdl yP6fAEMjvQnvM1rtepWspko8gpY5yoV6HYPzNhotQaRThc+UQgY0RZLaxAZfRfm1pQDZ aVMw6KQvdGmbHpnNW52OZxa0l29xnxI/5EDqKr3NGpuNKmYS6rWUqxj2+W7AK2svDSDj TdXHS2A03fSTRVNuMb1+dLBlpATJTjWSRTDII+2m7DBgCvPXHaRPLD8WHdEmwMac9DXo 8rJXG4DsfYPIX+MLsygkEa6faoSlmKwLBA6oPX8VFT80M+n3fQKnuRqOTN1QbUDjp77V FyCA== X-Gm-Message-State: AOAM532DWcRJCobswZTSpA2nQNBHuVHgxh+6leLc/SGmzrinLUXB53Jf It+jsk4Z99vnPisvMZieaxursNJ25bzNX6qNFP3H5w== X-Received: by 2002:aa7:c45a:: with SMTP id n26mr16449720edr.45.1596467561751; Mon, 03 Aug 2020 08:12:41 -0700 (PDT) MIME-Version: 1.0 References: <1595252430.5899.6.camel@mtkswgap22> <1595906401-11985-1-git-send-email-Frankie.Chang@mediatek.com> <1595906401-11985-3-git-send-email-Frankie.Chang@mediatek.com> <1596424276.5207.13.camel@mtkswgap22> In-Reply-To: <1596424276.5207.13.camel@mtkswgap22> From: Todd Kjos Date: Mon, 3 Aug 2020 08:12:29 -0700 Message-ID: Subject: Re: [PATCH v6 2/3] binder: add trace at free transaction. To: Frankie Chang Cc: Greg Kroah-Hartman , Joel Fernandes , Martijn Coenen , =?UTF-8?B?QXJ2ZSBIasO4bm5ldsOlZw==?= , Christian Brauner , LKML , linux-mediatek@lists.infradead.org, wsd_upstream , Jian-Min Liu Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, Aug 2, 2020 at 8:11 PM Frankie Chang wrote: > > On Fri, 2020-07-31 at 11:50 -0700, Todd Kjos wrote: > > On Mon, Jul 27, 2020 at 8:28 PM Frankie Chang > > wrote: > > > > > > From: "Frankie.Chang" > > > > > > Since the original trace_binder_transaction_received cannot > > > precisely present the real finished time of transaction, adding a > > > trace_binder_txn_latency_free at the point of free transaction > > > may be more close to it. > > > > > > Signed-off-by: Frankie.Chang > > > --- > > > drivers/android/binder.c | 6 ++++++ > > > drivers/android/binder_trace.h | 27 +++++++++++++++++++++++++++ > > > 2 files changed, 33 insertions(+) > > > > > > diff --git a/drivers/android/binder.c b/drivers/android/binder.c > > > index 2df146f..1e6fc40 100644 > > > --- a/drivers/android/binder.c > > > +++ b/drivers/android/binder.c > > > @@ -1522,6 +1522,9 @@ static void binder_free_transaction(struct binder_transaction *t) > > > * If the transaction has no target_proc, then > > > * t->buffer->transaction has already been cleared. > > > */ > > > + spin_lock(&t->lock); > > > + trace_binder_txn_latency_free(t); > > > + spin_unlock(&t->lock); > > > > Hmm. I don't prefer taking the lock just to call a trace. It doesn't > > make clear why the lock has to be taken. I'd prefer something like: > > > > if (trace_binder_txn_latency_free_enabled()) { > c > > } > > > > And then the trace would use the passed-in values instead of accessing > > via t->to_proc/to_thread. > > > Then we still add lock protection in the hook function, when trace is > disable ? I don't understand... in the example I gave, the trace doesn't get called if disabled. What do you mean to "add lock protection when the trace is disabled()"? > > Or we also pass these to hook function, no matter the trace is enable or What do you mean by "hook" function? If something has attached to the trace, then xxx_enabled() will return true. > not.I think this way is more clear that the lock protects @from, > @to_proc and @to_thread.Then, there is no need to add the lock in hook > function. Why is it clearer (other than the fact that I missed including t->from under the lock)? > > int from_proc, from_thread, to_proc, to_thread; > > spin_lock(&t->lock); > from_proc = t->from ? t->from->proc->pid : 0; > from_thread = t->from ? t->from->pid :0; > to_proc = t->to_proc ? t->to_proc->pid : 0; > to_thread = t->to_thread ? t->to_thread->pid : 0; > spin_unlock(&t->lock); > trace_binder_txn_latency_free(t, from_proc, from_thread, to_proc, > to_pid); The main feedback is I'd like to see the fields dereferenced in the same context as the lock acquisition instead of acquiring the lock and calling the trace function, so this code would be fine. There will be very little contention for t->lock so using xxx_enabled() is optional. Since trace_binder_txn_latency_free() is called twice, it would make sense to have a helper function to do the above. > > > > binder_free_txn_fixups(t); > > > kfree(t); > > > binder_stats_deleted(BINDER_STAT_TRANSACTION); > > > @@ -3093,6 +3096,9 @@ static void binder_transaction(struct binder_proc *proc, > > > kfree(tcomplete); > > > binder_stats_deleted(BINDER_STAT_TRANSACTION_COMPLETE); > > > err_alloc_tcomplete_failed: > > > + spin_lock(&t->lock); > > > + trace_binder_txn_latency_free(t); > > > + spin_unlock(&t->lock); > > > kfree(t); > > > binder_stats_deleted(BINDER_STAT_TRANSACTION); > > > err_alloc_t_failed: > > > diff --git a/drivers/android/binder_trace.h b/drivers/android/binder_trace.h > > > index 6731c3c..8ac87d1 100644 > > > --- a/drivers/android/binder_trace.h > > > +++ b/drivers/android/binder_trace.h > > > @@ -95,6 +95,33 @@ > > > __entry->thread_todo) > > > ); > > > > > > +TRACE_EVENT(binder_txn_latency_free, > > > + TP_PROTO(struct binder_transaction *t), > > > + TP_ARGS(t), > > > + TP_STRUCT__entry( > > > + __field(int, debug_id) > > > + __field(int, from_proc) > > > + __field(int, from_thread) > > > + __field(int, to_proc) > > > + __field(int, to_thread) > > > + __field(unsigned int, code) > > > + __field(unsigned int, flags) > > > + ), > > > + TP_fast_assign( > > > + __entry->debug_id = t->debug_id; > > > + __entry->from_proc = t->from ? t->from->proc->pid : 0; > > > + __entry->from_thread = t->from ? t->from->pid : 0; > > > + __entry->to_proc = t->to_proc ? t->to_proc->pid : 0; > > > + __entry->to_thread = t->to_thread ? t->to_thread->pid : 0; > > > + __entry->code = t->code; > > > + __entry->flags = t->flags; > > > + ), > > > + TP_printk("transaction=%d from %d:%d to %d:%d flags=0x%x code=0x%x", > > > + __entry->debug_id, __entry->from_proc, __entry->from_thread, > > > + __entry->to_proc, __entry->to_thread, __entry->code, > > > + __entry->flags) > > > +); > > > + > > > TRACE_EVENT(binder_transaction, > > > TP_PROTO(bool reply, struct binder_transaction *t, > > > struct binder_node *target_node), > > > -- > > > 1.7.9.5 >