Received: by 2002:a05:6a10:6d10:0:0:0:0 with SMTP id gq16csp346866pxb; Thu, 21 Apr 2022 00:36:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzr42mbJaZCe/eQlXb+1XONetywGrDwnkBgQjyxMhre0RtdH8zF1G4eilypdFhUQAfND28/ X-Received: by 2002:a17:90b:1d09:b0:1d2:8dba:67f3 with SMTP id on9-20020a17090b1d0900b001d28dba67f3mr8935874pjb.102.1650526576415; Thu, 21 Apr 2022 00:36:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1650526576; cv=none; d=google.com; s=arc-20160816; b=uOHuezYHtfXQh6Ft2AqxpT7YyF1lCiAh5O8Ze9T9jcV5n8pPHf7jA8Dwb5yN7eY++q eP+k+MLsU4vHv0Ow14oqTYqYYqrTeMJNZ8fjWdh29U8HUtRNxWnnVriwdf8xXOmRIZpM c9c8JK89mON7Ew1iHnDVJ6c74FlFAFesYjc9oa0+aHXiJt2yExCRgWEDmXPD9wzuqctw v3SFR5OL8Bv3mvMT+fYwuQ3CZEplwVr3Q6HanECtMxJtkOa2Pax4XWPF8JS2HKx55E2/ 66D1M4DvFciTXfEaMgqgxsV3mrOJnbrhuHhRdkFl1gi1Qnw/532Usb3Y4mRVCpN9UTW9 ao9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Xh1JK77me/23O0n2RR6NDTniLRQKhWk2Gg3Kbqq/JKE=; b=RaTFCCxwq4rPrJbhBjV73qOyyj8D8xzf3UKo/+ualhEacwZXQdTEmk4PxjwoPp7UQf 02Fo+WT+ECtbMzc4RA72jbKvECaHjrLLj8hRE3WHCk0NbzMoX9d/UozoMhg+0XDFrnvA VlPri/ehR5NeXMjRq4CPA/eW7KvzealflAmuSrY/vQeRKlQdIo9bGCrhK3nVyS9YT069 ItyspWOikQpXBpyFzSrGMQCQwAtjvcJ7yP9D/W3XhP2mx8r5fn9q4aEpJX4VoXdal805 L3SnEUoN1Xd3aYh0BqlXbm27GnIE9N9pNoP37tTnZqkGSB7u2vSKpVA5SriYIZzIhXb1 PRng== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=aMKbI9dw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id q15-20020a63e94f000000b0038295fbcb98si4320086pgj.247.2022.04.21.00.36.02; Thu, 21 Apr 2022 00:36:16 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=aMKbI9dw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242990AbiDRNT0 (ORCPT + 99 others); Mon, 18 Apr 2022 09:19:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59920 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239634AbiDRNAO (ORCPT ); Mon, 18 Apr 2022 09:00:14 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B911B3153A; Mon, 18 Apr 2022 05:41:48 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 2861C60FB6; Mon, 18 Apr 2022 12:41:48 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 15E07C385A8; Mon, 18 Apr 2022 12:41:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1650285707; bh=PRKKSlC++3tu0htGySyF7EK6m/IfUhB+bYRdOYfYruw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aMKbI9dwnPxEWWOfe+ynqFLoB4+1GDXqHoiw+nkoqgiVYk7zZF6uau0DILP973hcW v2F4KYMem8odoR0ladnaWYjFYRrwBlWNwbuJMWazPqkGGu7P6u0P/Ul9e+1OErMOTx cZZiIwr69lazYQKU4bKp8wvAZrf0pKWavWWykm90= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Rei Yamamoto , Thomas Gleixner , Ming Lei Subject: [PATCH 5.10 088/105] genirq/affinity: Consider that CPUs on nodes can be unbalanced Date: Mon, 18 Apr 2022 14:13:30 +0200 Message-Id: <20220418121149.133631295@linuxfoundation.org> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20220418121145.140991388@linuxfoundation.org> References: <20220418121145.140991388@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Rei Yamamoto commit 08d835dff916bfe8f45acc7b92c7af6c4081c8a7 upstream. If CPUs on a node are offline at boot time, the number of nodes is different when building affinity masks for present cpus and when building affinity masks for possible cpus. This causes the following problem: In the case that the number of vectors is less than the number of nodes there are cases where bits of masks for present cpus are overwritten when building masks for possible cpus. Fix this by excluding CPUs, which are not part of the current build mask (present/possible). [ tglx: Massaged changelog and added comment ] Fixes: b82592199032 ("genirq/affinity: Spread IRQs to all available NUMA nodes") Signed-off-by: Rei Yamamoto Signed-off-by: Thomas Gleixner Reviewed-by: Ming Lei Cc: stable@vger.kernel.org Link: https://lore.kernel.org/r/20220331003309.10891-1-yamamoto.rei@jp.fujitsu.com Signed-off-by: Greg Kroah-Hartman --- kernel/irq/affinity.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) --- a/kernel/irq/affinity.c +++ b/kernel/irq/affinity.c @@ -269,8 +269,9 @@ static int __irq_build_affinity_masks(un */ if (numvecs <= nodes) { for_each_node_mask(n, nodemsk) { - cpumask_or(&masks[curvec].mask, &masks[curvec].mask, - node_to_cpumask[n]); + /* Ensure that only CPUs which are in both masks are set */ + cpumask_and(nmsk, cpu_mask, node_to_cpumask[n]); + cpumask_or(&masks[curvec].mask, &masks[curvec].mask, nmsk); if (++curvec == last_affv) curvec = firstvec; }