From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758378AbdELUsP (ORCPT ); Fri, 12 May 2017 16:48:15 -0400 Received: from merlin.infradead.org ([205.233.59.134]:52852 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756951AbdELUsO (ORCPT ); Fri, 12 May 2017 16:48:14 -0400 Date: Fri, 12 May 2017 22:47:54 +0200 From: Peter Zijlstra To: Jeffrey Hugo Cc: Ingo Molnar , linux-kernel@vger.kernel.org, Dietmar Eggemann , Austin Christ , Tyler Baicar Subject: Re: [RFC 1/2] sched/fair: Fix load_balance() affinity redo path Message-ID: <20170512204754.GK4626@worktop.programming.kicks-ass.net> References: <1494608498-4538-1-git-send-email-jhugo@codeaurora.org> <1494608498-4538-2-git-send-email-jhugo@codeaurora.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1494608498-4538-2-git-send-email-jhugo@codeaurora.org> User-Agent: Mutt/1.5.22.1 (2013-10-16) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, May 12, 2017 at 11:01:37AM -0600, Jeffrey Hugo wrote: > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index d711093..8f783ba 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -8219,8 +8219,19 @@ static int load_balance(int this_cpu, struct rq *this_rq, > > /* All tasks on this runqueue were pinned by CPU affinity */ > if (unlikely(env.flags & LBF_ALL_PINNED)) { > + struct cpumask tmp; You cannot have cpumask's on stack. > + > + /* Cpumask of all initially possible busiest cpus. */ > + cpumask_copy(&tmp, sched_domain_span(env.sd)); > + cpumask_clear_cpu(env.dst_cpu, &tmp); You forgot to mask with cpu_active_mask. > + > cpumask_clear_cpu(cpu_of(busiest), cpus); > - if (!cpumask_empty(cpus)) { > + /* > + * Go back to "redo" iff the load-balance cpumask > + * contains other potential busiest cpus for the > + * current sched domain. > + */ > + if (cpumask_intersects(cpus, &tmp)) { > env.loop = 0; > env.loop_break = sched_nr_migrate_break; > goto redo;