Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp6097547ybi; Wed, 29 May 2019 02:50:28 -0700 (PDT) X-Google-Smtp-Source: APXvYqzTgwHUtGeBSenLDFF3qNCST32jTA3f6s0LD0MHTpQfZdbzuyS9yVu4LXF6hv5A3u/k4CNl X-Received: by 2002:a17:90a:1aa8:: with SMTP id p37mr11122023pjp.17.1559123428119; Wed, 29 May 2019 02:50:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559123428; cv=none; d=google.com; s=arc-20160816; b=UhDhpRGKORMfAGexDKVyZJVruB9P8xBgSmOCQ9vwwrMFFcakBHmCi1LKW5PDH8IDqa RhJjC+GZ4oSCf93qLL0JzeGkPraNorgjEUxOk+Rr43adYoldH0Nvef8wBhzLN03EsMKb my2YLh6cFbROAGEPfGMSEaPRoEkMZCkYZdSTIolr/ludgZ58PWIwiyqaqR0ySzspVm3g SPGhVWswO3RI1Bu399qBrsrcfB8Dbiw8IComTy3bhs2Iin5j8OZyJLhdbbwL4cfj2K7Z ED+s3awRloyztGenifuLdEufqZxYH4+oP/2RgUuipfvIv4AcjGf+oqoCVZfQEi0Wib7P YzPQ== 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 :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=vwTDW3GDxSfGJ2Nes8b8IkCVACpMJT3M2VlYKu8eRgU=; b=djNarL3gfI+G91/cdnyhWurStX8dZy2XFRGe32q9p05u5YbgbQJ9NMNPoE6M1L5ksX 6jfQtM79JpvQxR7WEWZqzqzDgQyTSOcw+GMaeZfhiOn+HnW+SaoK8SRidlUxCk0+jnXu NdKOhgm04ZlVJyoHIXe4vAuvOR+yOAOcppMsYUldjmsk3gONUROz2m3fMdn/+agZ3LDr kJRszmZatIFSeBI9GjZsAhxDTFXdzdZaiEFIGrc/uAZ6d79DeWfe2HRTaQHMcoPpwCcE xEv/dZKxL2Okw9lJiTIjMB7rJrSJvshqpKGXCPktgMlv39khT2IawC76IT9RNU0UDG3w yChQ== 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 j37si6542661pje.15.2019.05.29.02.50.10; Wed, 29 May 2019 02:50:28 -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 S1726225AbfE2Jsy (ORCPT + 99 others); Wed, 29 May 2019 05:48:54 -0400 Received: from mail-wm1-f68.google.com ([209.85.128.68]:40078 "EHLO mail-wm1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725861AbfE2Jsy (ORCPT ); Wed, 29 May 2019 05:48:54 -0400 Received: by mail-wm1-f68.google.com with SMTP id 15so1105900wmg.5 for ; Wed, 29 May 2019 02:48:53 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=vwTDW3GDxSfGJ2Nes8b8IkCVACpMJT3M2VlYKu8eRgU=; b=C36PMuWZZfx63dg7mXggxQrWn/+GMP6bXt8YPjfYvT2qHm5vv49Tson6IOPRv7ZmQX sjBX6IqEwa1dgz/5hFR0OTCDrgDfSq6XUXKpJDjkzRaF41qFQMsW/hIGBW+TP4h2kk6S pPYRyAZkUJbP0xsYpAm58QS8ludLQbIbWWexkY6SzEZOHLzXnpuPXil8VqM6D/0gXgfj bCnXaBeWyMIjJHP2FyeTuvXLMhRw/CyVsygycuvX0pfJ62IaUGMh6FkFW6a6gSM89edY EWN3XEkhss94kOqCmypqlXzEG76QOqP6JYF560/5sxBx/AeYOb9KF9K9V6wnT0jToILr y68A== X-Gm-Message-State: APjAAAW8SANSxWCYXuIpI21O19Ia3o5EjVZRhva2MBKE1Lo2+U4wUw4F BxsrO+P0XX34AEucTGW6QhdkYQ== X-Received: by 2002:a7b:c7d7:: with SMTP id z23mr1684756wmk.127.1559123332502; Wed, 29 May 2019 02:48:52 -0700 (PDT) Received: from t460s.bristot.redhat.com ([193.205.81.200]) by smtp.gmail.com with ESMTPSA id f18sm1942745wrt.21.2019.05.29.02.48.51 (version=TLS1_3 cipher=AEAD-AES128-GCM-SHA256 bits=128/128); Wed, 29 May 2019 02:48:51 -0700 (PDT) Subject: Re: [RFC 3/3] preempt_tracer: Use a percpu variable to control traceble calls To: Peter Zijlstra Cc: linux-kernel@vger.kernel.org, williams@redhat.com, daniel@bristot.me, "Steven Rostedt (VMware)" , Ingo Molnar , Thomas Gleixner , "Paul E. McKenney" , Matthias Kaehlcke , "Joel Fernandes (Google)" , Frederic Weisbecker , Yangtao Li , Tommaso Cucinotta References: <9b0698774be3bb406e2b8b2c12dc1fb91532bff0.1559051152.git.bristot@redhat.com> <20190529084118.GG2623@hirez.programming.kicks-ass.net> From: Daniel Bristot de Oliveira Message-ID: Date: Wed, 29 May 2019 11:48:50 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: <20190529084118.GG2623@hirez.programming.kicks-ass.net> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 29/05/2019 10:41, Peter Zijlstra wrote: > On Tue, May 28, 2019 at 05:16:24PM +0200, Daniel Bristot de Oliveira wrote: >> #if defined(CONFIG_PREEMPT) && (defined(CONFIG_DEBUG_PREEMPT) || \ >> defined(CONFIG_TRACE_PREEMPT_TOGGLE)) >> + >> +DEFINE_PER_CPU(int, __traced_preempt_count) = 0; >> /* >> * If the value passed in is equal to the current preempt count >> * then we just disabled preemption. Start timing the latency. >> */ >> void preempt_latency_start(int val) >> { >> - if (preempt_count() == val) { >> + int curr = this_cpu_read(__traced_preempt_count); > > We actually have this_cpu_add_return(); > >> + >> + if (!curr) { >> unsigned long ip = get_lock_parent_ip(); >> #ifdef CONFIG_DEBUG_PREEMPT >> current->preempt_disable_ip = ip; >> #endif >> trace_preempt_off(CALLER_ADDR0, ip); >> } >> + >> + this_cpu_write(__traced_preempt_count, curr + val); >> } >> >> static inline void preempt_add_start_latency(int val) >> @@ -3200,8 +3206,12 @@ NOKPROBE_SYMBOL(preempt_count_add); >> */ >> void preempt_latency_stop(int val) >> { >> - if (preempt_count() == val) >> + int curr = this_cpu_read(__traced_preempt_count) - val; > > this_cpu_sub_return(); > >> + >> + if (!curr) >> trace_preempt_on(CALLER_ADDR0, get_lock_parent_ip()); >> + >> + this_cpu_write(__traced_preempt_count, curr); >> } > > Can't say I love this, but it is miles better than the last patch. > ack! I will change the methods (and remove some blank lines here and there... :-)) Thanks Peter! -- Daniel