Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp997239imm; Sat, 8 Sep 2018 13:31:05 -0700 (PDT) X-Google-Smtp-Source: ANB0VdZVygVukAcnbNhHHTSa36o6y4Ifs2th/4TnKo1eC2HIKKM0jwhcYqY5iEwAjAnCIcnwNed2 X-Received: by 2002:a63:a112:: with SMTP id b18-v6mr14869610pgf.384.1536438665268; Sat, 08 Sep 2018 13:31:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1536438665; cv=none; d=google.com; s=arc-20160816; b=q8Pg1m+OsVdvn2XrUrGfJycCSI9FX6SGo886KEm03mcspNVRz9auj+i+t2vffQ3Z4m +p//7GhHYWWyH7P5uPvStOpYD7C1I/5CCMpVRlKBblqTvziBg++UfBep591bHsZNghuo S8wNEjBQFIgnoJrhWoi2lIWbKEeWwGv8WFFalH7tFwal9RhjMjml3xnqd+ZngIREFtyO ZwnujWXgpTUiKN3eYbayIl9v11YLNQ/W/g8nyeaPg6FQRBiugSLxT/5bV/C/sKUsIWD5 43r4cYJ0GemVJzPFdiUumVZG9iY/zGBMroy1CZzh0oj10/N071nVXIthhtRDGJjed+gy Bvhw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dmarc-filter:dkim-signature:dkim-signature; bh=BONPRBqmkaCJb2S4G5yq98WZaDUcXDdhHudDUvU//Us=; b=C+BwzUNZoleVY1fDQBq4Ztc41aPFGUzjZ9RhIiQRHM+BcFMXhJ+C8weLFFCTm7QiID ieDW1sZnuCvT5fYfC1XC2/S6lra+eEPGliIcUkNr6D7yEGjozg3oVbHFQeyWe79hN+4C t2+5MrZkzABA0CArXnXX04whtNksbLpzxqPPs4cK32JndFelSDKnTQ4ldARQ4TgiiP8O swv21AOt7WDL6Rq3ZD20OjPGsheEl6IkHerLcZyGVRgb8roAn5fVtAbk3HT+NSVumF34 BdbF3V5eK3AITyrybuu1eqB+6DNif7eYhmmALEKXRQC2Qu9EmyMX1Gk+uy3Q+lhCDxhm ETgA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=hF0Sqty3; dkim=pass header.i=@codeaurora.org header.s=default header.b=SkqE3K7b; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a1-v6si11622520pgw.9.2018.09.08.13.30.48; Sat, 08 Sep 2018 13:31:05 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=hF0Sqty3; dkim=pass header.i=@codeaurora.org header.s=default header.b=SkqE3K7b; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727957AbeIIBQD (ORCPT + 99 others); Sat, 8 Sep 2018 21:16:03 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:49640 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727616AbeIIBQD (ORCPT ); Sat, 8 Sep 2018 21:16:03 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id AA1B060B13; Sat, 8 Sep 2018 20:28:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1536438544; bh=dcL3X7HX8ZGPU0DB9PsLxCltgveK0h3iXWnF5pjRVPA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hF0Sqty3xJkmFLuqZqpZOln93XWsjDwBx5FBF+dFP6vj4k7RVzS/YMNj3XZydOvHd h1No5e575pcy3JlBacATehZejm8Il5InjUT/Upui8POBla0GFeVbVjlgnbzJEd/4o/ V/p+t1bX0MFHHmKY8Ouug6H0a4cvwvC+oP7s9xUQ= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED,T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.0 Received: from blr-ubuntu-253.qualcomm.com (blr-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.18.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: saiprakash.ranjan@codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 8CFC460C1C; Sat, 8 Sep 2018 20:28:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1536438534; bh=dcL3X7HX8ZGPU0DB9PsLxCltgveK0h3iXWnF5pjRVPA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SkqE3K7bQaKZCAfx06p9amAaL8dor2EU0VQi4ypFPCupbiJOg3YgUI13vkt8O54XF vRS8xd9nR87+YCstYqOmNNpaFmZYqDEepgQIVZDratLMUh3Xj77O5e/SftA/dYnazA xFAFvTt3ugOQyTUBxPJMiAXt/nMnJlb8ROJhBuwI= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 8CFC460C1C Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=saiprakash.ranjan@codeaurora.org From: Sai Prakash Ranjan To: Steven Rostedt , Ingo Molnar , Laura Abbott , Kees Cook , Anton Vorontsov , Rob Herring , devicetree@vger.kernel.org, Colin Cross , Jason Baron , Tony Luck , Arnd Bergmann , Catalin Marinas , Will Deacon , Joel Fernandes , Masami Hiramatsu , Joe Perches , Jim Cromie Cc: Rajendra Nayak , Vivek Gautam , Sibi Sankar , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Greg Kroah-Hartman , Ingo Molnar , Tom Zanussi , Prasad Sodagudi , tsoni@codeaurora.org, Bryan Huntsman , Tingwei Zhang , Sai Prakash Ranjan Subject: [PATCH 6/6] dynamic_debug: Add flag for dynamic event tracing Date: Sun, 9 Sep 2018 01:57:07 +0530 Message-Id: <3f0166ff19ae44dbf92cbb239ebf25fa8a4f243c.1536430404.git.saiprakash.ranjan@codeaurora.org> X-Mailer: git-send-email 2.18.0 In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Debugging a specific driver or subsystem can be a lot easier if we can trace events specific to that driver or subsystem. This type of filtering can be achieved using existing dynamic debug library which provides a way to filter based on files, functions and modules. Using this, provide an additional flag 'e' to filter event tracing to specified input. For example, tracing all IO read/write can be overwhelming and of no use when debugging a specific driver or a subsystem. So switch to dynamic event tracing for register accesses. Example for tracing register accesses in drivers/soc/qcom/* and the pstore output is given below: # dyndbg="file drivers/soc/qcom/* +e" trace_event=io tp_pstore # reboot -f # mount -t pstore pstore /sys/fs/pstore # cat /sys/fs/pstore/event-ramoops-0 io_write: type=writel cpu=1 ts:1423596253 data=0xffff00000d2065a4 caller=qcom_smsm_probe+0x524/0x670 io_write: type=writel cpu=1 ts:1423945889 data=0xffff00000d206608 caller=qcom_smsm_probe+0x524/0x670 Note: Tracing is activated only when flag is enabled either through command line or through dynamic debug control file. Signed-off-by: Sai Prakash Ranjan --- include/asm-generic/io-instrumented.h | 28 +++++++++++++++++++++++++-- include/linux/dynamic_debug.h | 1 + lib/dynamic_debug.c | 1 + 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/include/asm-generic/io-instrumented.h b/include/asm-generic/io-instrumented.h index 7b050e2487ed..023f28571ea3 100644 --- a/include/asm-generic/io-instrumented.h +++ b/include/asm-generic/io-instrumented.h @@ -2,6 +2,8 @@ #ifndef _ASM_GENERIC_IO_INSTRUMENTED_H #define _ASM_GENERIC_IO_INSTRUMENTED_H +#include + #if defined(CONFIG_TRACING_EVENTS_IO) #include @@ -19,7 +21,7 @@ static inline void do_trace_io_read(const char *type, void *addr) {} #define __raw_write(v, a, _l) ({ \ volatile void __iomem *_a = (a); \ if (io_tracepoint_active(__tracepoint_io_write)) \ - do_trace_io_write(__stringify(write##_l), (void __force *)(_a));\ + dynamic_io_write(__stringify(write##_l), (void __force *)(_a)); \ arch_raw_write##_l((v), _a); \ }) @@ -32,7 +34,7 @@ static inline void do_trace_io_read(const char *type, void *addr) {} _t __a; \ const volatile void __iomem *_a = (a); \ if (io_tracepoint_active(__tracepoint_io_read)) \ - do_trace_io_read(__stringify(read##_l), (void __force *)(_a)); \ + dynamic_io_read(__stringify(read##_l), (void __force *)(_a)); \ __a = arch_raw_read##_l(_a); \ __a; \ }) @@ -42,4 +44,26 @@ static inline void do_trace_io_read(const char *type, void *addr) {} #define __raw_readl(a) __raw_read((a), l, u32) #define __raw_readq(a) __raw_read((a), q, u64) +#if defined(CONFIG_DYNAMIC_DEBUG) && defined(CONFIG_TRACING_EVENTS_IO) +#define dynamic_io_write(type, addr) \ +do { \ + DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, type); \ + if (unlikely(descriptor.flags & _DPRINTK_FLAGS_EVENT)) \ + do_trace_io_write(type, addr); \ +} while (0) + +#define dynamic_io_read(type, addr) \ +do { \ + DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, type); \ + if (unlikely(descriptor.flags & _DPRINTK_FLAGS_EVENT)) \ + do_trace_io_read(type, addr); \ +} while (0) +#elif defined(CONFIG_TRACING_EVENTS_IO) +#define dynamic_io_write(type, addr) do_trace_io_write(type, addr) +#define dynamic_io_read(type, addr) do_trace_io_read(type, addr) +#else +#define dynamic_io_write(type, addr) +#define dynamic_io_read(type, addr) +#endif /* CONFIG_DYNAMIC_DEBUG && CONFIG_TRACING_EVENTS_IO */ + #endif /* _ASM_GENERIC_IO_INSTRUMENTED_H */ diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index 2fd8006153c3..14e595c51002 100644 --- a/include/linux/dynamic_debug.h +++ b/include/linux/dynamic_debug.h @@ -32,6 +32,7 @@ struct _ddebug { #define _DPRINTK_FLAGS_INCL_FUNCNAME (1<<2) #define _DPRINTK_FLAGS_INCL_LINENO (1<<3) #define _DPRINTK_FLAGS_INCL_TID (1<<4) +#define _DPRINTK_FLAGS_EVENT (1<<5) #if defined DEBUG #define _DPRINTK_FLAGS_DEFAULT _DPRINTK_FLAGS_PRINT #else diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index c7c96bc7654a..694957a8ae54 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -78,6 +78,7 @@ static inline const char *trim_prefix(const char *path) static struct { unsigned flag:8; char opt_char; } opt_array[] = { { _DPRINTK_FLAGS_PRINT, 'p' }, + { _DPRINTK_FLAGS_EVENT, 'e' }, { _DPRINTK_FLAGS_INCL_MODNAME, 'm' }, { _DPRINTK_FLAGS_INCL_FUNCNAME, 'f' }, { _DPRINTK_FLAGS_INCL_LINENO, 'l' }, -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation