Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp5148951ybi; Tue, 28 May 2019 08:19:36 -0700 (PDT) X-Google-Smtp-Source: APXvYqz2vQmHtF/LwQyZkLOP8I/oU7lplPC1wmfR0LzDweir9/yZF2wF18zLvoLzOJEW3sgmf8Ml X-Received: by 2002:a62:5244:: with SMTP id g65mr21356432pfb.237.1559056775952; Tue, 28 May 2019 08:19:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559056775; cv=none; d=google.com; s=arc-20160816; b=OoX1u1x8BcGijpeDQtEAkwN7O7UVfZSa5DL2p4N149eQ27L5EQJ9bneB9qu9xCyVgb w07vqYhmzIEXu0V0Ier9UkQgBrHGTW/xB8saUaklNyYXfO3I0IhzCWyC+brcTW5x6zN3 AweK7+zZOq/JgtnrKCdqOXu/5nVjSsAzvKyNW7ocFvZZ83BveaIe6pcm/NvT1l1WdZ2k BncfhihsGBUPrtMjfxYR6D2ROVNxPkyQUbDl7oULUaM81xuK+rntQ6pm1uW3Oo5tiNtq sBGPq0lekrxOfvgx7BHEH1GjUzMsGEsUZISEk3zspJCHTR8a+eQo15CooE3SNnhV+5Z6 HB2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=h6LzxB18dKbX/s6AnmMafPrZi2mQTEvmybcpexFUb18=; b=LmjyPhqa4BF+ZJlgYR1f3usMVlfEIyCH8gh0HIiU2sWoQb8VP3el2YsrQrlLRyuT+b sgErAlVxlnWRf/e32vDV6XnFLWgHfLEuyTbIWpGLNNZh9arOQPN8jCAthuc54n7s51wA TZ5LMOgAymrenLq3HPGAjjOnpkGoyNPA2d1K5raojsKT4ZzNBJYNmQZbi8P5UGl21ee2 u+Wun76EhLyBOP4j4dTHxltUf99KFmfwu387yifNH/0mUCNEy9PJe4nvlBoQpdEzAOQb QKOHeyRRvgoCbPZ0G6DOdGpEkUk2TH7zgYbFmznFBoOrluu8Cefm7lCUznTg+qVuwwDI XzzQ== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e23si21803969pgl.293.2019.05.28.08.19.19; Tue, 28 May 2019 08:19:35 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727291AbfE1PQ4 (ORCPT + 99 others); Tue, 28 May 2019 11:16:56 -0400 Received: from mx1.redhat.com ([209.132.183.28]:51202 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727103AbfE1PQ4 (ORCPT ); Tue, 28 May 2019 11:16:56 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id AE8A08112C; Tue, 28 May 2019 15:16:50 +0000 (UTC) Received: from inkernel.default (ovpn-116-60.phx2.redhat.com [10.3.116.60]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1EDDA7857F; Tue, 28 May 2019 15:16:44 +0000 (UTC) From: Daniel Bristot de Oliveira To: linux-kernel@vger.kernel.org Cc: williams@redhat.com, daniel@bristot.me, "Steven Rostedt (VMware)" , Ingo Molnar , Peter Zijlstra , Thomas Gleixner , "Paul E. McKenney" , Matthias Kaehlcke , "Joel Fernandes (Google)" , Frederic Weisbecker , Yangtao Li , Tommaso Cucinotta Subject: [RFC 1/3] softirq: Use preempt_latency_stop/start to trace preemption Date: Tue, 28 May 2019 17:16:22 +0200 Message-Id: In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Tue, 28 May 2019 15:16:55 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org prempt_disable/enable tracepoints occurs only in the preemption enabled <-> disable transition. As preempt_latency_stop() and preempt_latency_start() already do this control, avoid code duplication by using these functions in the softirq code as well. RFC: Should we move preempt_latency_start/preempt_latency_stop to a trace source file... or even a header? Signed-off-by: Daniel Bristot de Oliveira Cc: "Steven Rostedt (VMware)" Cc: Ingo Molnar Cc: Peter Zijlstra Cc: Thomas Gleixner Cc: "Paul E. McKenney" Cc: Matthias Kaehlcke Cc: "Joel Fernandes (Google)" Cc: Frederic Weisbecker Cc: Yangtao Li Cc: Tommaso Cucinotta Cc: linux-kernel@vger.kernel.org --- kernel/sched/core.c | 4 ++-- kernel/softirq.c | 13 +++++-------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 874c427742a9..8c0b414e45dc 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -3152,7 +3152,7 @@ static inline void sched_tick_stop(int cpu) { } * If the value passed in is equal to the current preempt count * then we just disabled preemption. Start timing the latency. */ -static inline void preempt_latency_start(int val) +void preempt_latency_start(int val) { if (preempt_count() == val) { unsigned long ip = get_lock_parent_ip(); @@ -3189,7 +3189,7 @@ NOKPROBE_SYMBOL(preempt_count_add); * If the value passed in equals to the current preempt count * then we just enabled preemption. Stop timing the latency. */ -static inline void preempt_latency_stop(int val) +void preempt_latency_stop(int val) { if (preempt_count() == val) trace_preempt_on(CALLER_ADDR0, get_lock_parent_ip()); diff --git a/kernel/softirq.c b/kernel/softirq.c index 2c3382378d94..c9ad89c3dfed 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -108,6 +108,8 @@ static bool ksoftirqd_running(unsigned long pending) * where hardirqs are disabled legitimately: */ #ifdef CONFIG_TRACE_IRQFLAGS +extern void preempt_latency_start(int val); +extern void preempt_latency_stop(int val); void __local_bh_disable_ip(unsigned long ip, unsigned int cnt) { unsigned long flags; @@ -130,12 +132,8 @@ void __local_bh_disable_ip(unsigned long ip, unsigned int cnt) trace_softirqs_off(ip); raw_local_irq_restore(flags); - if (preempt_count() == cnt) { -#ifdef CONFIG_DEBUG_PREEMPT - current->preempt_disable_ip = get_lock_parent_ip(); -#endif - trace_preempt_off(CALLER_ADDR0, get_lock_parent_ip()); - } + preempt_latency_start(cnt); + } EXPORT_SYMBOL(__local_bh_disable_ip); #endif /* CONFIG_TRACE_IRQFLAGS */ @@ -144,8 +142,7 @@ static void __local_bh_enable(unsigned int cnt) { lockdep_assert_irqs_disabled(); - if (preempt_count() == cnt) - trace_preempt_on(CALLER_ADDR0, get_lock_parent_ip()); + preempt_latency_stop(cnt); if (softirq_count() == (cnt & SOFTIRQ_MASK)) trace_softirqs_on(_RET_IP_); -- 2.20.1