Received: by 2002:a05:6a11:4021:0:0:0:0 with SMTP id ky33csp1970337pxb; Thu, 16 Sep 2021 21:58:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxGvs5r3lVPQQECLrPkv2CWf9cpO/Mk/DkJZHKOKt1wajktYke1r3+SiFTELlT2p9wDQV1M X-Received: by 2002:a50:bae1:: with SMTP id x88mr10411648ede.345.1631854738171; Thu, 16 Sep 2021 21:58:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631854738; cv=none; d=google.com; s=arc-20160816; b=A5spjvV+4J9JAImJXqlbXRGJr7j4IW0tOS/QI0Y7d5Zy8X+dagzlGwl7HgLrXQkpA1 gFVE2hrkyD5glhy5oWBse2URw9lovvxKNtvF6LUtsHVrsO+/yTzLOl1/maO8KXiHS4uV 1sc4jQlAkMLpxFerjTcCj/k5N5ouUhrSuhkYZPPf86u9eUzUTObn0ijPGexVD0+pi64b IHbvxli6PlbKt5Tfa62B6Yw9wf339KyQWXysOd4wQYVSH9mJ1jXhRkIAsZ6L0ramUY52 5sbefxRgOWqRowiAHnlPZeD1YoQmbqlFdBQTmTdmls9UH+dIN8N8ilcXID8aR7/2mGGN Lslw== 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=PJfeT4KxnHdZcnCb2ww5UwgLwwxclVLJeHS6ty2QSGQ=; b=gizm+PSc30ca8KMa6qx29oSo7SSh2Pm3ZQdAZICfhTj5KyOKMprJMm+XRuanNogC7h YE6pDgEYwCZ103NeQVZjs/pU8pVk35vekoMjfqQ2oL/syMxd+aoWZlR5eFN0F2GuyrZY MFBSGtgdCkBzv7F3iXs8LZfS6BrMfUhuHboQ3ftkpht0vXEo7xlXOzsC0TBtVdIjlUcW Myqxi05BCgzYFB4dFt2fwMA1tay3yik9Oio34AW3nR/kt8yye4YtFBqQP6kSRp5DX4kN sA0TeipaU0Bd+KJB0e2rSodjf4PSeFFP4R/UFLd7LvdqaqBNSG64NGvWSNrWnrEh+gdf D6QA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=UZPh9eLr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 13si5238529ejr.434.2021.09.16.21.58.30; Thu, 16 Sep 2021 21:58:58 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=UZPh9eLr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 S1350602AbhIPRsr (ORCPT + 99 others); Thu, 16 Sep 2021 13:48:47 -0400 Received: from mail.kernel.org ([198.145.29.99]:54414 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1355132AbhIPRlH (ORCPT ); Thu, 16 Sep 2021 13:41:07 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id D041E63256; Thu, 16 Sep 2021 16:52:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1631811143; bh=9XEd6jM7C1DNQk4a7j9DzEhbZ4YMjGsfHBaAZtN4/y0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UZPh9eLrWqMwZd6u0POu3T42sUPnu1sMk3UF2eCBzDabl0tauj+KFlsbEb3xesnnM 7XYo2gxQQwMRK1Nrd+e3Q//zU6+8e0NT0v1savPZaNxLXHzNzDZC3E7I+/ZQMS+1Fw 2uvkpiPy/8jghP5KH3MsXsWikrpYU5NrwMqzHQuY= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Shirisha Ganta , "Pratik R. Sampat" , "Gautham R. Shenoy" , Michael Ellerman Subject: [PATCH 5.14 399/432] cpufreq: powernv: Fix init_chip_info initialization in numa=off Date: Thu, 16 Sep 2021 18:02:28 +0200 Message-Id: <20210916155824.356547642@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210916155810.813340753@linuxfoundation.org> References: <20210916155810.813340753@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Pratik R. Sampat commit f34ee9cb2c5ac5af426fee6fa4591a34d187e696 upstream. In the numa=off kernel command-line configuration init_chip_info() loops around the number of chips and attempts to copy the cpumask of that node which is NULL for all iterations after the first chip. Hence, store the cpu mask for each chip instead of derving cpumask from node while populating the "chips" struct array and copy that to the chips[i].mask Fixes: 053819e0bf84 ("cpufreq: powernv: Handle throttling due to Pmax capping at chip level") Cc: stable@vger.kernel.org # v4.3+ Reported-by: Shirisha Ganta Signed-off-by: Pratik R. Sampat Reviewed-by: Gautham R. Shenoy [mpe: Rename goto label to out_free_chip_cpu_mask] Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/20210728120500.87549-2-psampat@linux.ibm.com Signed-off-by: Greg Kroah-Hartman --- drivers/cpufreq/powernv-cpufreq.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) --- a/drivers/cpufreq/powernv-cpufreq.c +++ b/drivers/cpufreq/powernv-cpufreq.c @@ -36,6 +36,7 @@ #define MAX_PSTATE_SHIFT 32 #define LPSTATE_SHIFT 48 #define GPSTATE_SHIFT 56 +#define MAX_NR_CHIPS 32 #define MAX_RAMP_DOWN_TIME 5120 /* @@ -1046,12 +1047,20 @@ static int init_chip_info(void) unsigned int *chip; unsigned int cpu, i; unsigned int prev_chip_id = UINT_MAX; + cpumask_t *chip_cpu_mask; int ret = 0; chip = kcalloc(num_possible_cpus(), sizeof(*chip), GFP_KERNEL); if (!chip) return -ENOMEM; + /* Allocate a chip cpu mask large enough to fit mask for all chips */ + chip_cpu_mask = kcalloc(MAX_NR_CHIPS, sizeof(cpumask_t), GFP_KERNEL); + if (!chip_cpu_mask) { + ret = -ENOMEM; + goto free_and_return; + } + for_each_possible_cpu(cpu) { unsigned int id = cpu_to_chip_id(cpu); @@ -1059,22 +1068,25 @@ static int init_chip_info(void) prev_chip_id = id; chip[nr_chips++] = id; } + cpumask_set_cpu(cpu, &chip_cpu_mask[nr_chips-1]); } chips = kcalloc(nr_chips, sizeof(struct chip), GFP_KERNEL); if (!chips) { ret = -ENOMEM; - goto free_and_return; + goto out_free_chip_cpu_mask; } for (i = 0; i < nr_chips; i++) { chips[i].id = chip[i]; - cpumask_copy(&chips[i].mask, cpumask_of_node(chip[i])); + cpumask_copy(&chips[i].mask, &chip_cpu_mask[i]); INIT_WORK(&chips[i].throttle, powernv_cpufreq_work_fn); for_each_cpu(cpu, &chips[i].mask) per_cpu(chip_info, cpu) = &chips[i]; } +out_free_chip_cpu_mask: + kfree(chip_cpu_mask); free_and_return: kfree(chip); return ret;