Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1485802

Re: [PATCH 2/5] irqtime: Remove needless IRQs disablement on kcpustat update

Path csiph.com!goblin3!goblin1!goblin.stu.neva.ru!news2.arglkargh.de!news.mixmin.net!aioe.org!gothmog.csi.it!bofh.it!news.nic.it!robomod
From Frederic Weisbecker <fweisbec@gmail.com>
Newsgroups linux.kernel
Subject Re: [PATCH 2/5] irqtime: Remove needless IRQs disablement on kcpustat update
Date Sun, 18 Sep 2016 15:50:01 +0200
Message-ID <siKDL-im-17@gated-at.bofh.it> (permalink)
References <scXkm-s8-19@gated-at.bofh.it> <scXkm-s8-29@gated-at.bofh.it> <seFW2-5g7-19@gated-at.bofh.it>
X-Original-To Peter Zijlstra <peterz@infradead.org>
Dkim-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=Tj9NJnM31qs84q68/fJROftoUcCooba32m/hAOUrm4E=; b=gdCeHU/peV4IYrmzDDO/oXkBH7FQ5XykJIKviUhLtjQXt2Adv+CwFnPzBy2yUoMZF0 +iJZFTs33Ttsw5bRV9kd5cmEHfsc9gnJh41NYUKti29fJdxJP1Xuf5tn1G/ApuidoR82 FqkRiPiwtCm1shdT9l0oefflHe3UzbKr5BNZ5Fv38fADZubX57/Cot+zOOMAOL8T6+eG YxPMvoXg+0Z1ImsAgn3H0OmbsS6m+J6ry1FqjKsZMgYlFZ3eIQer6XfisCA8B7c3sriE zFLWrtFL40KHRRKmzF2RAOfRe7B1PioLRa8EzS+I+6kwXCwlWNZTUea+mbR1gq+gvOx/ fgzw==
X-Google-Dkim-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=Tj9NJnM31qs84q68/fJROftoUcCooba32m/hAOUrm4E=; b=OTX9jIvD1j7s2OobpS6cyVsS5Q0yuwl9vam3Ga38T3ISWWtPDxguHqp3Wtx1FG+Niz mk8XwPbMPe1YZ7AtnxSU5kLH1nj4YixPmF1qdGCCZ+XwcmuzoBn/KHM7ZnjpL6YpTvDS earoXSBqX6cXQthn8nlF8vvN2dYvntR73ZL6vuFVukcE3osfoZVNpw52QPDY4IuZepi7 VfnSzhHKBt7Me8yGuUV+qurkjohZ+Rmz5fRdHSbvE62KIv960cmfT25OyQcFZO97HHZh ZS5tSpf25WySW8gJn3oQ7ykHzbZs1Yb+a0ahh5Q7tDtFrMHE5kHNXMkkFp7vJgyea3oZ w4CQ==
X-Gm-Message-State AE9vXwMdF7XRO1q07LUWurwom4aJFd8bzY6ab2AIS9NmLWBI3AIA74uqcml89ZtJCbsY3g==
X-Received by 10.194.73.9 with SMTP id h9mr23197266wjv.21.1474206465016; Sun, 18 Sep 2016 06:47:45 -0700 (PDT)
MIME-Version 1.0
Content-Type text/plain; charset=us-ascii
Content-Disposition inline
User-Agent Mutt/1.5.24 (2015-08-30)
Sender robomod@news.nic.it
List-ID <linux-kernel.vger.kernel.org>
X-Mailing-List linux-kernel@vger.kernel.org
Approved robomod@news.nic.it
Lines 102
Organization linux.* mail to news gateway
X-Original-Cc LKML <linux-kernel@vger.kernel.org>, Paolo Bonzini <pbonzini@redhat.com>, Wanpeng Li <wanpeng.li@hotmail.com>, Eric Dumazet <eric.dumazet@gmail.com>, Ingo Molnar <mingo@kernel.org>, Mike Galbraith <efault@gmx.de>, Rik van Riel <riel@redhat.com>
X-Original-Date Sun, 18 Sep 2016 15:47:43 +0200
X-Original-Message-ID <20160918134742.GB5909@lerouge>
X-Original-References <1472824985-22947-1-git-send-email-fweisbec@gmail.com> <1472824985-22947-3-git-send-email-fweisbec@gmail.com> <20160907075913.GR10153@twins.programming.kicks-ass.net>
X-Original-Sender linux-kernel-owner@vger.kernel.org
Xref csiph.com linux.kernel:1485802

Show key headers only | View raw


On Wed, Sep 07, 2016 at 09:59:13AM +0200, Peter Zijlstra wrote:
> On Fri, Sep 02, 2016 at 04:03:02PM +0200, Frederic Weisbecker wrote:
> 
> > diff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c
> > index f111076..d4d12a9 100644
> > --- a/kernel/sched/cputime.c
> > +++ b/kernel/sched/cputime.c
> > @@ -78,30 +78,26 @@ EXPORT_SYMBOL_GPL(irqtime_account_irq);
> >  static cputime_t irqtime_account_hi_update(cputime_t maxtime)
> >  {
> >  	u64 *cpustat = kcpustat_this_cpu->cpustat;
> > -	unsigned long flags;
> >  	cputime_t irq_cputime;
> >  
> +	lockdep_assert_irqs_disabled();
> 
> > -	local_irq_save(flags);
> >  	irq_cputime = nsecs_to_cputime64(__this_cpu_read(cpu_hardirq_time)) -
> >  		      cpustat[CPUTIME_IRQ];
> >  	irq_cputime = min(irq_cputime, maxtime);
> >  	cpustat[CPUTIME_IRQ] += irq_cputime;
> > -	local_irq_restore(flags);
> > +
> >  	return irq_cputime;
> >  }
> >  
> >  static cputime_t irqtime_account_si_update(cputime_t maxtime)
> >  {
> >  	u64 *cpustat = kcpustat_this_cpu->cpustat;
> > -	unsigned long flags;
> >  	cputime_t softirq_cputime;
> >  
> +	lockdep_assert_irqs_disabled();
> 
> > -	local_irq_save(flags);
> >  	softirq_cputime = nsecs_to_cputime64(__this_cpu_read(cpu_softirq_time)) -
> >  			  cpustat[CPUTIME_SOFTIRQ];
> >  	softirq_cputime = min(softirq_cputime, maxtime);
> >  	cpustat[CPUTIME_SOFTIRQ] += softirq_cputime;
> > -	local_irq_restore(flags);
> > +
> >  	return softirq_cputime;
> >  }
> 
> ---
> Subject: locking/lockdep: Provide IRQ state assertion helpers
> 
> Provide a cheap alternative to:
> 
> 	WARN_ON(!irqs_disabled());
> 
> This patch provides:
> 
> 	lockdep_assert_irqs_disabled();
> 	lockdep_assert_softirqs_disabled();
> 
> Which compile away for CONFIG_LOCKDEP=n kernels.
> 
> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
> ---
> --- a/include/linux/lockdep.h
> +++ b/include/linux/lockdep.h
> @@ -526,6 +526,23 @@ static inline void print_irqtrace_events
>  }
>  #endif
>  
> +#if defined(CONFIG_LOCKDEP) && defined(CONFIG_TRACE_IRQFLAGS)
> +
> +#define lockdep_assert_irqs_disabled() do {				\
> +		WARN_ON(debug_locks && current->hardirqs_enabled);	\
> +	} while (0)
> +
> +#define lockdep_assert_softirqs_disabled() do {				\
> +		WARN_ON(debug_locks && current->softirqs_enabled);	\
> +	} while (0)
> +
> +#else
> +
> +#define lockdep_assert_irqs_disabled()		do { } while (0)
> +#define lockdep_assert_softirqs_disabled()	do { } while (0)
> +
> +#endif
> +
>  /*
>   * For trivial one-depth nesting of a lock-class, the following
>   * global define can be used. (Subsystems with multiple levels

I love that! I've seen so many cases where I wanted this runtime check without
the overhead of it on production kernels.

I can take that patch, now since this is lockdep code and my series is scheduler's
code that depend on it, how can we manage the dependency between the two branches?

Perhaps I can add the lockdep patch in the series, there will likely be no
wicked conflicts agains potential changes in the lockdep tree.

Another alternative is to use WARN_ON_(!irqs_disabled()) on my series, then
on the lockdep branch we can convert all the potential users including the current
one.. The lockdep branch would then depend on the others. That way looks better as I
can think of several sites to convert.

Thanks.

Back to linux.kernel | Previous | Next — Next in thread | Find similar | Unroll thread


Thread

Re: [PATCH 2/5] irqtime: Remove needless IRQs disablement on  kcpustat update Frederic Weisbecker <fweisbec@gmail.com> - 2016-09-18 15:50 +0200
  Re: [PATCH 2/5] irqtime: Remove needless IRQs disablement on  kcpustat update Peter Zijlstra <peterz@infradead.org> - 2016-09-18 18:00 +0200

csiph-web