Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp2333667yba; Fri, 17 May 2019 15:09:15 -0700 (PDT) X-Google-Smtp-Source: APXvYqwoRnAUdQ39s3wNHDN6d0g8AsB/eadi/X015wku42HlrDA+/1Ygm2Df3S4tJJ16QaT5KYV6 X-Received: by 2002:a63:1119:: with SMTP id g25mr23471674pgl.380.1558130955272; Fri, 17 May 2019 15:09:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558130955; cv=none; d=google.com; s=arc-20160816; b=nPL5MDGEUnQA2K2ZdyOU2n6Qgx3aY8QFL/j8s+em14dpk4yBNScLa8pcGFGgVUv34q mfxN/uFDlcx5E2saLyH+TTXVE9hYp448Hhm2FVsmdDvsp4g3/YJUlGf1Azl5IQr65D9K GuxPY1gCh1ZrMFjGs1GpTI7DaP17xN3z7fhdsF1ImCZ5st3KvjxdE2V1O8IB1PPsB0nM jCjRPVHqOLTI9d1DPMLAHV4anQQOKf3lrrBqMaG4Y4Rr6IZkiRoOnYgixRsgokQsXhO6 9nL5j4BDdxLzqSuDf9BGkjyYJbjh2mBpJ2zXsUfCxVckKDujAvMmNTopdO5G4LrdB58f ETfA== 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:dkim-signature; bh=mFkvuyFrcUdBjjQHIvZv0C+4O3W71e9w9WG3W0dWYQg=; b=VF3U69UYY1HL0Z1aGHp4f7zaZ0voBM8XkIMZVbkF3pZUqFIc10jIP1lXEvNDW9wbIT mV4LAiuIixNtnuLMbC1xVYbz4LZlIyib4X7KomSGF4yOuaMPJwICVXem/OaiHQ7NNlC0 CD8Ft3Okn2YI2qVnhjYcXjJFMC5eglaVhOzpwYxYCAHCfRl8yJl4sLhyMnbUyqkBNKSZ sMkve0umDh62Plf+xHEDrC61sgBIXJHwpG1IPAzdYvXokTDZX9ELFZE4p/m9zTAg0OrB wQ1FWQ6XGzVARKE6LH7YGe1e4uPT/nXPvE10EWQBR9YCzUD6AFXkPpwYF9KbJ4VWU9tb kVPA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=MN9NKXZa; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f17si10567660pfq.237.2019.05.17.15.08.48; Fri, 17 May 2019 15:09:15 -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=@gmail.com header.s=20161025 header.b=MN9NKXZa; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728634AbfEQUeu (ORCPT + 99 others); Fri, 17 May 2019 16:34:50 -0400 Received: from mail-qt1-f193.google.com ([209.85.160.193]:36007 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728395AbfEQUep (ORCPT ); Fri, 17 May 2019 16:34:45 -0400 Received: by mail-qt1-f193.google.com with SMTP id a17so9583389qth.3 for ; Fri, 17 May 2019 13:34:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=mFkvuyFrcUdBjjQHIvZv0C+4O3W71e9w9WG3W0dWYQg=; b=MN9NKXZao61ZPdjhZRG8ha0B3DiiyHeObMgEIC7lAobieDNOmDDz06lyFWthi7y/aO srpyOqmCGpSULFtz0bxcHA6tprnrxMOPpeLhCsoxnItJbyQyNE6NmqAB5b/iVkSBkdH/ ykU+bOAh4ewou9dACDPARAnc4SoQwyUI7ljH8ZeVdOi/azAcL95MqGrN67RbqMeaZxrf BRmaMaI3UX5XnEMtVVAunbF7n2G+nBypcS6yYOO90f6hTQ51k6iS5NO3rA3leEb6v9Ek E96RH3uIBjxgdW/P0GkPr741+WF97O3TeKBZe0zqzdTci8up0hXelcY4GNVyxlILq69A y4kA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=mFkvuyFrcUdBjjQHIvZv0C+4O3W71e9w9WG3W0dWYQg=; b=Fv/0/JQm2plVD9knhrSNwT7JFM0rSJfmhUA1Up1x/6cUyuGfNkVK5bx7dzMKIbZEPk 3GK8gBh6pnXZDbydpfLF2JAITFBsLmMfC6U5v4r/soYwrDmGL+LVCWeujKFY8W2XisTh qE+V7tmmo5HQRAFVOenkeRJBbgHCQFljm3d/G22W8ibFpIxsgjqHudRKAN/Nv/RPIobA XrD33bxf2WizO9VOk0z3VRoddKCB7TVPPeFXOdF72ofu57wqQV1jaiK/ArU+/t5R+rG0 R28By7LGw6OF9D7ALVSgwBLPORoNsIQE7R/UiBDZolDkWj1iwPuImWrcUsGFgRz/bXg/ ohEw== X-Gm-Message-State: APjAAAWN5t2bmdDyw28K+qYmXzzmC9xBl7RQjchRQ8jaVQwPlcTqAO5R LtAAXpU4RK/931wz0A8lMA== X-Received: by 2002:ac8:3973:: with SMTP id t48mr50292919qtb.121.1558125284375; Fri, 17 May 2019 13:34:44 -0700 (PDT) Received: from localhost.localdomain ([92.117.189.151]) by smtp.gmail.com with ESMTPSA id u5sm5499145qtj.95.2019.05.17.13.34.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 17 May 2019 13:34:43 -0700 (PDT) From: Viktor Rosendahl To: Steven Rostedt , Ingo Molnar , linux-kernel@vger.kernel.org Cc: Joel Fernandes , Viktor Rosendahl Subject: [PATCH v4 4/4] ftrace: Add an option for tracing console latencies Date: Fri, 17 May 2019 22:34:30 +0200 Message-Id: <20190517203430.6729-5-viktor.rosendahl@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190517203430.6729-1-viktor.rosendahl@gmail.com> References: <20190517203430.6729-1-viktor.rosendahl@gmail.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This new trace option "console-latency" will enable the latency tracers to trace the console latencies. Previously this has always been implicitely disabled. I guess this is because they are considered to be well known and unavoidable. However, for some organizations it may nevertheless be desirable to trace them. Basically, we want to be able to tell that there are latencies in the system under test because someone has incorrectly enabled the serial console. Signed-off-by: Viktor Rosendahl --- include/linux/irqflags.h | 21 +++++++++++++++++++++ kernel/printk/printk.c | 6 ++++-- kernel/trace/trace.h | 1 + kernel/trace/trace_irqsoff.c | 12 ++++++++++++ 4 files changed, 38 insertions(+), 2 deletions(-) diff --git a/include/linux/irqflags.h b/include/linux/irqflags.h index 21619c92c377..34b0424a32dc 100644 --- a/include/linux/irqflags.h +++ b/include/linux/irqflags.h @@ -68,9 +68,30 @@ do { \ defined(CONFIG_PREEMPT_TRACER) extern void stop_critical_timings(void); extern void start_critical_timings(void); + extern bool console_tracing_disabled(void); + +# define console_stop_critical_timings(flag) \ + do { \ + typecheck(bool, flag); \ + flag = console_tracing_disabled(); \ + if (flag) \ + stop_critical_timings(); \ + } while (0) + +# define console_start_critical_timings(flag) \ + do { \ + typecheck(bool, flag); \ + if (flag) \ + start_critical_timings(); \ + } while (0) + #else # define stop_critical_timings() do { } while (0) # define start_critical_timings() do { } while (0) +# define console_stop_critical_timings(flag) \ + do { typecheck(bool, flag); } while (0) +# define console_start_critical_timings(flag) \ + do { typecheck(bool, flag); } while (0) #endif /* diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index 17102fd4c136..46ebba6e5fb9 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -2358,6 +2358,7 @@ void console_unlock(void) static char ext_text[CONSOLE_EXT_LOG_MAX]; static char text[LOG_LINE_MAX + PREFIX_MAX]; unsigned long flags; + bool cflag; bool do_cond_resched, retry; if (console_suspended) { @@ -2458,9 +2459,10 @@ void console_unlock(void) */ console_lock_spinning_enable(); - stop_critical_timings(); /* don't trace print latency */ + /* don't trace print latency if it's disabled */ + console_stop_critical_timings(cflag); call_console_drivers(ext_text, ext_len, text, len); - start_critical_timings(); + console_start_critical_timings(cflag); if (console_lock_spinning_disable_and_check()) { printk_safe_exit_irqrestore(flags); diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index f95027813296..31cdc2e4c382 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@ -1257,6 +1257,7 @@ extern int trace_get_user(struct trace_parser *parser, const char __user *ubuf, C(PRINTK_MSGONLY, "printk-msg-only"), \ C(CONTEXT_INFO, "context-info"), /* Print pid/cpu/time */ \ C(LATENCY_FMT, "latency-format"), \ + C(CONSOLE_LATENCY, "console-latency"), \ C(RECORD_CMD, "record-cmd"), \ C(RECORD_TGID, "record-tgid"), \ C(OVERWRITE, "overwrite"), \ diff --git a/kernel/trace/trace_irqsoff.c b/kernel/trace/trace_irqsoff.c index a745b0cee5d3..bc02be207a7a 100644 --- a/kernel/trace/trace_irqsoff.c +++ b/kernel/trace/trace_irqsoff.c @@ -456,6 +456,18 @@ void stop_critical_timings(void) EXPORT_SYMBOL_GPL(stop_critical_timings); NOKPROBE_SYMBOL(stop_critical_timings); +bool console_tracing_disabled(void) +{ + struct trace_array *tr = irqsoff_trace; + int pc = preempt_count(); + + if (!preempt_trace(pc) && !irq_trace()) + return false; + + return !(tr->trace_flags & TRACE_ITER_CONSOLE_LATENCY); +} +EXPORT_SYMBOL_GPL(console_tracing_disabled); + #ifdef CONFIG_FUNCTION_TRACER static bool function_enabled; -- 2.17.1