From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753251AbbC3QmO (ORCPT ); Mon, 30 Mar 2015 12:42:14 -0400 Received: from mx1.redhat.com ([209.132.183.28]:50973 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753035AbbC3QmN (ORCPT ); Mon, 30 Mar 2015 12:42:13 -0400 Message-ID: <55197CA2.9040706@redhat.com> Date: Mon, 30 Mar 2015 12:41:06 -0400 From: Rik van Riel User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0 MIME-Version: 1.0 To: Chris Metcalf , linux-kernel@vger.kernel.org, Frederic Weisbecker , Steven Rostedt , "Paul E. McKenney" , Ingo Molnar , Thomas Gleixner , Peter Zijlstra , Borislav Petkov , Li Zhong , Mike Galbraith , Kevin Hilman Subject: Re: [PATCH 3/4] nohz: add tick_nohz_full_clear_cpus() API References: <1427224895-30830-1-git-send-email-cmetcalf@ezchip.com> <1427224895-30830-4-git-send-email-cmetcalf@ezchip.com> <551977C1.4000303@ezchip.com> In-Reply-To: <551977C1.4000303@ezchip.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 03/30/2015 12:20 PM, Chris Metcalf wrote: > I wanted to ping the patch below again, since I haven't heard any > feedback. > > I note that Rik van Riel's change posted this weekend offers similar > functionality for userspace. My change offers a convenient API > for, e.g., kernel drivers setting up default irq balancing. > > https://lkml.org/lkml/2015/3/28/94 I submitted a patch to irqbalance to exclude nohz_full cpus from having irqs assigned to them. I could see the same thing being useful for in-kernel irq assignment, especially for multi-queue devices that set up irqs on multiple CPUs. > An alternate API would be one that just returned the full no_hz > cpumask to kernel callers; I'd be happy with that as well, but my > instinct was to make the API as narrow as possible to start with. > > Comments? What drivers and subsystems are you targeting? I am just looking at blk-mq now, and it seems like the API most appropriate for that would be an inline function that tests whether or not a CPU is nohz_full. for_each_possible_cpu(i) { ... if (cpu_nohz_full(i)) continue; } A lot of the other code in drivers and subsystems that set up per-cpu queues and irqs seem to iterate over all CPUs at init time, and could benefit from a function allowing them to skip nohz_full CPUs. Your tick_nohz_full_clear_cpus() function seems reasonable too, for code that uses a cpumask to set up per cpu stuff. > On 03/24/2015 03:21 PM, cmetcalf@ezchip.com wrote: >> From: Chris Metcalf >> >> This is useful, for example, to modify a cpumask to avoid the >> nohz cores so that interrupts aren't sent to them. >> >> Signed-off-by: Chris Metcalf >> --- >> Motivated by patch 4/4 in this series. >> >> include/linux/tick.h | 7 +++++++ >> 1 file changed, 7 insertions(+) >> >> diff --git a/include/linux/tick.h b/include/linux/tick.h >> index 9c085dc12ae9..d53ad4892a39 100644 >> --- a/include/linux/tick.h >> +++ b/include/linux/tick.h >> @@ -186,6 +186,12 @@ static inline bool tick_nohz_full_cpu(int cpu) >> return cpumask_test_cpu(cpu, tick_nohz_full_mask); >> } >> +static inline void tick_nohz_full_clear_cpus(struct cpumask *mask) >> +{ >> + if (tick_nohz_full_enabled()) >> + cpumask_andnot(mask, mask, tick_nohz_full_mask); >> +} >> + >> extern void __tick_nohz_full_check(void); >> extern void tick_nohz_full_kick(void); >> extern void tick_nohz_full_kick_cpu(int cpu); >> @@ -194,6 +200,7 @@ extern void __tick_nohz_task_switch(struct >> task_struct *tsk); >> #else >> static inline bool tick_nohz_full_enabled(void) { return false; } >> static inline bool tick_nohz_full_cpu(int cpu) { return false; } >> +static inline void tick_nohz_full_clear_cpus(struct cpumask *mask) { } >> static inline void __tick_nohz_full_check(void) { } >> static inline void tick_nohz_full_kick_cpu(int cpu) { } >> static inline void tick_nohz_full_kick(void) { } > -- All rights reversed