From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4640F47045A; Sat, 12 Sep 2026 10:50:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789210235; cv=none; b=anhOzGv+GD8TGoVxIWpN05fWWz87GGx39ZRfRNfiwjeuA2s+3U8ZBNBnCRVNSJ+3pDWdaBPUNb9gm2DigWwF/m0kvBJmshEcDoQpbJFlINCeiKoBBEBZ5Jomy4Atk8M3uRU6nChYygJLuHvYTDSy0XInqm1COVb78xvChqgk+BE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789210235; c=relaxed/simple; bh=Zp03s6/LMtWd+g+4OGGBdSAp5Pq9lTpXTXDxoaMWF7Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iSOybX92HXanbQnUAuKY9gtL0PykvPOcHL44GhL7hj1T26yzm53uS6jiu/4nsiSV8FTlaRPOSVNubNGGUyjTciTREoAvdmV7BLZXn5wObufnNfeksqu5IMka8a48K0OETfiHdaOdUuj3+tHUl2T0iEAgWFoaczC8csXxT53xRpI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=GldpM6aB; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="GldpM6aB" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 85F2B1F00893; Sat, 12 Sep 2026 10:50:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=korg; t=1789210232; bh=vjK1jsurPBNI3iFkj/izNGwG+q0ZGlmwIDpVNFSBrgw=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=GldpM6aBXD0uv0RPEB0D1ScMj/GXSfDbAC/4TCJ5BnORRP64MMo5xmAPpwsStclww V+D00VORYM5UjSj1+9XvFtxip4Vj9c9njmtM+KpkWvi8mhMV858SDyAAZ/XU2+rJQu G2KvSajJiOQzqgMpvJqRu98j2y3OQRgbXsfhmbYs= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Ricardo Neri , "Peter Zijlstra (Intel)" , Christian Loehle , Chen Yu , Tim Chen , Vincent Guittot , Andrea Righi , Sasha Levin Subject: [PATCH 6.18 0984/1518] sched/fair: Check CPU capacity before comparing group types during load balance Date: Sat, 12 Sep 2026 08:52:33 +0200 Message-ID: <20260912065645.718936257@linuxfoundation.org> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260912065623.398859879@linuxfoundation.org> References: <20260912065623.398859879@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: patches@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 6.18-stable review patch. If anyone has any objections, please let me know. ------------------ From: Ricardo Neri [ Upstream commit 50b101f6e586b4417d060a976fd831cd87e86e2b ] update_sd_pick_busiest() may incorrectly select a fully_busy group as the busiest group when its per-CPU capacity exceeds that of the destination CPU. This happens because the type of busiest group is initialized to group_has_spare and allows the fully_busy group to win the type comparison. update_sd_pick_busiest() should not choose a candidate scheduling group with at most one runnable task if its per-CPU capacity is greater than that of the destination CPU. Such a check already exists, but it is done too late: after the type comparison, preventing a subsequent fully_busy group of equal per-CPU capacity from being correctly selected. Move this check to occur before comparing group types. Fixes: 0b0695f2b34a ("sched/fair: Rework load_balance()") Signed-off-by: Ricardo Neri Signed-off-by: Peter Zijlstra (Intel) Reviewed-by: Christian Loehle Reviewed-by: Chen Yu Reviewed-by: Tim Chen Reviewed-by: Vincent Guittot Tested-by: Christian Loehle Tested-by: Andrea Righi Link: https://patch.msgid.link/20260720-rneri-fix-cas-clusters-v6-3-bb500bf4afd4@linux.intel.com Signed-off-by: Sasha Levin --- kernel/sched/fair.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 5620c8d3a99a6..4f02f823d1042 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -10748,6 +10748,17 @@ static bool update_sd_pick_busiest(struct lb_env *env, sds->local_stat.group_type != group_has_spare)) return false; + /* + * Candidate sg has no more than one task per CPU and has higher + * per-CPU capacity. Migrating tasks to less capable CPUs may harm + * throughput. Maximize throughput, power/energy consequences are not + * considered. + */ + if ((env->sd->flags & SD_ASYM_CPUCAPACITY) && + (sgs->group_type <= group_fully_busy) && + (capacity_greater(sg->sgc->min_capacity, capacity_of(env->dst_cpu)))) + return false; + if (sgs->group_type > busiest->group_type) return true; @@ -10850,17 +10861,6 @@ static bool update_sd_pick_busiest(struct lb_env *env, break; } - /* - * Candidate sg has no more than one task per CPU and has higher - * per-CPU capacity. Migrating tasks to less capable CPUs may harm - * throughput. Maximize throughput, power/energy consequences are not - * considered. - */ - if ((env->sd->flags & SD_ASYM_CPUCAPACITY) && - (sgs->group_type <= group_fully_busy) && - (capacity_greater(sg->sgc->min_capacity, capacity_of(env->dst_cpu)))) - return false; - return true; } -- 2.53.0