From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f170.google.com (mail-pg1-f170.google.com [209.85.215.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3242E3CF1F6 for ; Fri, 10 Jul 2026 10:12:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.170 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783678328; cv=none; b=B7mXF+DX7iRcFKQmtvyzDqebhBk181zW2IqbDPz47ZCrX4FrljPOe6EBlxDi5tuCCyKxaO56MHUscSDhMWWIZUhS88nfN6ar/WPWFu8uKCxCc5Wo1UUoMOPUY1zM2quhfLNicKXGKxNGBZcdiaDEcETYQzYsEWrWWZ097JD0qu4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783678328; c=relaxed/simple; bh=mK+QSdo+XEcUYX4k/3uA7JX+83RfAtjkrJyiizqmoCw=; h=From:To:Cc:Subject:In-Reply-To:Date:Message-ID:References; b=l269uch8/6YJcwqvR7D83A+drhLY12qMODWkfUzybZfQI7CPBBYCeILMej7UpGZQDYJc8lWa9mirf6YTqotW7YgP7zLH9fU6nAjAD6qCj67PzRu+NEIEDBnv4UoW6jcHd/C5bvFVeiMCIhBFJse6uq8E6QDnwr9o4VqQHcrgoD4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Pq+EYQ3L; arc=none smtp.client-ip=209.85.215.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Pq+EYQ3L" Received: by mail-pg1-f170.google.com with SMTP id 41be03b00d2f7-ca00f126b7eso418553a12.2 for ; Fri, 10 Jul 2026 03:12:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783678321; x=1784283121; darn=vger.kernel.org; h=references:message-id:date:in-reply-to:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=o6xV8+arhXOVNUwWe6koYvBL1FEn/j8lb2bT0WNrclI=; b=Pq+EYQ3Lz/88PvQTErz/nZ7IJQx/C4EuQYd2BqhCP16tImwTSL+U7fMp7hHhCg9pQj hJ8XUudFOOCJmA1Em2Yv5hnH8TUAoZZ9bMEIIeQiH0TobU3obpfBCY1xcdKS/CGfyszk YVMME6UYIc+w5YeeTuNNGfFiFmGswqwTqbLPBxg/SjBSLZfAmM8inIayP7uU0KLZUVir ftquvyzbJYK7U6whpR4k+yId3lgqA4tMoaRXH2ErEyll/Fj4vZVs+uaQzUUa3p4jx8sf bL0LzRUk1lBsQVR2RKEqKkcgTt+Bd9rFzFKmIFmpC+Cl86BNeIKLloZ2tRJBTlmFtIx6 vM3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783678321; x=1784283121; h=references:message-id:date:in-reply-to:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=o6xV8+arhXOVNUwWe6koYvBL1FEn/j8lb2bT0WNrclI=; b=NStkfwzLAoPKtq7hwvXOjUSPjcHc71wdp3xcp7Jc97GEGq5hHiaOn2R3i6R25LBG1U OBVgSGghyt0C4SSukcQdp4cw/v0S37K6t0xPOzhyF0NWCMsSdUhMlBy3kQgdOAz/HlZU E+x9Aj0ND5uVTwZ+3TTGU7NW/Ty1THicgrL0tNpt0fxWFOJmSWLAurQfubhyfiwjE3Oj yKEc80TV6L62njPZsKFt0RIyKcm7Yj18KxQ/Uly2sTs1UJp4WQ31g9a3Ch3kj0JwSelb 8kR4PwKgRKI2C1DqdULTlUt+KflRac+9AjKIs2+TBnuAQImkJrmESdoGlB/l4ECavKxr Ampw== X-Forwarded-Encrypted: i=1; AHgh+RoDKk4zXPFLoGf0SYMp9juoTTJF0RB1EtWAxtgvz21G3zLsZIp7ubGW1StSjLZaWrv4n9pUJ7Z1ySjxOHk=@vger.kernel.org X-Gm-Message-State: AOJu0Yz3/Kf3ffnM+AR4s6sfZBqKtblOYYqS7ur2yBhLrKPZoUgmzPGh 5DHhLF97nDg0Nffxhmg4boGzUrILj62CAZuc6K1rdHGeKMFJNq5khKTnoKEHAg== X-Gm-Gg: AfdE7cktbiXxXFKTisyRs10CpMLfuF/Kb0a/HB+78P0cgUnJ0HFOofol/bMXgK088LT wxGgmIRnJrIiswEIEmKFuzuyo92DOTO3CdQY1KvgFEOHX9sIje94UzHTZtW2DF4dqjbTpFhiFH6 64hVyCO/DtxI0fnHsKqutAFmPKoU/DXP3wuZBfrflMWOVysSoYesJe71fMGkugY6JyUxwYzbB5L jfaMOysvEa0SOMqTbkmZQgn0+g80Goll1YSiiQ1Qt9qdLjRfVaOSYSdC5AG/Nrb9rqxnS/gA5ym VSvEe4V8rA2oSIw943RT0YzAVVYn0Wjq7qiWdckrkSXqOxO1FvGuyZD3uQEAMn4RoPbMx6iKxBI M5rlL/y0I513/shadegMfNRiU6+929/eDzbVVk1fo7HpueH6PnMHTCLXFsYdkdtN5NlCNGfrUyi 7MYX1tezFAyys= X-Received: by 2002:a05:6a20:729d:b0:3bf:a624:deb8 with SMTP id adf61e73a8af0-3c0bcebc735mr13769800637.21.1783678321446; Fri, 10 Jul 2026 03:12:01 -0700 (PDT) Received: from pve-server ([49.205.216.49]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-13b659d7c8bsm42738891c88.12.2026.07.10.03.11.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Jul 2026 03:12:00 -0700 (PDT) From: Ritesh Harjani (IBM) To: Srikar Dronamraju , linuxppc-dev , Madhavan Srinivasan , Michael Ellerman , Nicholas Piggin , Christophe Leroy , Naveen N Rao Cc: skiboot@lists.ozlabs.org, arbab@linux.ibm.com, mahesh@linux.ibm.com, chleroy@kernel.org, Srikar Dronamraju , linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 3/3] powerpc/numa: Support coregroup on PowerNV In-Reply-To: <20260605055242.1757485-8-srikar@linux.ibm.com> Date: Fri, 10 Jul 2026 11:18:12 +0530 Message-ID: References: <20260605055242.1757485-5-srikar@linux.ibm.com> <20260605055242.1757485-8-srikar@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Srikar Dronamraju writes: > Coregroup support on powerpc has so far been limited to PowerVM LPARs. > However, PowerNV can also support coregroups when firmware exposes the > required coregroup information through the associativity hierarchy. > > Detect coregroup support by checking whether primary_domain_index is the > penultimate domain in the CPU node's ibm,associativity property. On > PowerNV, a non-penultimate primary_domain_index indicates that firmware > provides an additional level for coregroup information. > > This keeps the logic compatible with PowerVM systems, where > primary_domain_index is likewise not the penultimate associativity > domain. > > Signed-off-by: Srikar Dronamraju > --- > Changelog from v1: https://lkml.kernel.org/r/20260524010017.140408-1-srikar@linux.ibm.com > - Handle comments from Christophe Leroy; make code more flat > > arch/powerpc/mm/numa.c | 56 ++++++++++++++++++++++++++++++++++-------- > 1 file changed, 46 insertions(+), 10 deletions(-) > > diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c > index 9aa71eb7e96b..e97b624203ea 100644 > --- a/arch/powerpc/mm/numa.c > +++ b/arch/powerpc/mm/numa.c > @@ -889,12 +889,32 @@ static int __init numa_setup_drmem_lmb(struct drmem_lmb *lmb, > return 0; > } > > +/* > + * If hierarchy extends beyond primary_domain_index + 1, then next > + * level corresponds to coregroup. > + */ > +static int detect_and_enable_coregroup(const __be32 *associativity, int index) Do we care about it's return value? We are not reading that in the patch. this function is mainly only needed in __init, can we mark it so. > +{ > + if (!associativity || index == -1) > + goto out; > + > + index = of_read_number(associativity, 1); > + > + if (index > primary_domain_index + 1) { > + coregroup_enabled = 1; > + return index; > + } > +out: > + coregroup_enabled = 0; > + return -1; > +} For PowerVM, we now have two places which will enable coregroup_enabled during mem_topology_setup(). Is there some way we can unify that? This also means we enable coregroup in case of PowerVM with SPLPAR when per-cpu VPHN associativity index > primary_domain_index+1. But this isn't reflected in your commit msg. The commit msg only says this affects PowerNV. setup_arch mem_topology_setup parse_numa_properties detect_and_enable_coregroup() {... // coregroup_enabled = 0/1 index = of_read_number(associativity, 1); if (index > primary_domain_index + 1) { coregroup_enabled = 1; return index; } } <...> find_possible_nodes() {... prop_length /= sizeof(int); if (prop_length > primary_domain_index + 2) coregroup_enabled = 1; } > + > static int __init parse_numa_properties(void) > { > struct device_node *memory, *pci; > - int default_nid = 0; > - unsigned long i; > + int default_nid = 0, index = 0; > const __be32 *associativity; > + unsigned long i; > > if (numa_enabled == 0) { > pr_warn("disabled by user\n"); > @@ -927,7 +947,6 @@ static int __init parse_numa_properties(void) > */ > for_each_present_cpu(i) { > __be32 vphn_assoc[VPHN_ASSOC_BUFSIZE]; > - struct device_node *cpu; > int nid = NUMA_NO_NODE; > > memset(vphn_assoc, 0, VPHN_ASSOC_BUFSIZE * sizeof(__be32)); > @@ -935,7 +954,9 @@ static int __init parse_numa_properties(void) > if (__vphn_get_associativity(i, vphn_assoc) == 0) { > nid = associativity_to_nid(vphn_assoc); > initialize_form1_numa_distance(vphn_assoc); > + index = detect_and_enable_coregroup(vphn_assoc, index); > } else { > + struct device_node *cpu; > > /* > * Don't fall back to default_nid yet -- we will plug > @@ -948,6 +969,7 @@ static int __init parse_numa_properties(void) > associativity = of_get_associativity(cpu); > if (associativity) { > nid = associativity_to_nid(associativity); > + index = detect_and_enable_coregroup(associativity, index); > initialize_form1_numa_distance(associativity); > } > of_node_put(cpu); > @@ -1445,7 +1467,9 @@ static long vphn_get_associativity(unsigned long cpu, > > int cpu_to_coregroup_id(int cpu) > { > - __be32 associativity[VPHN_ASSOC_BUFSIZE] = {0}; > + int coregroup_id = cpu_to_core_id(cpu); > + struct device_node *cpunode = NULL; > + const __be32 *associativity; > int index; > > if (cpu < 0 || cpu > nr_cpu_ids) > @@ -1454,19 +1478,31 @@ int cpu_to_coregroup_id(int cpu) > if (!coregroup_enabled) > goto out; > > - if (!firmware_has_feature(FW_FEATURE_VPHN)) > - goto out; > + if (firmware_has_feature(FW_FEATURE_VPHN)) { > + __be32 tmp[VPHN_ASSOC_BUFSIZE] = {0}; > > - if (vphn_get_associativity(cpu, associativity)) > + if (vphn_get_associativity(cpu, tmp)) > + goto out; > + > + associativity = tmp; > + > + } else { > + cpunode = of_get_cpu_node(cpu, NULL); > + if (!cpunode) > + goto out; > + > + associativity = of_get_associativity(cpunode); > + } > + if (!associativity) > goto out; > > index = of_read_number(associativity, 1); > if (index > primary_domain_index + 1) > - return of_read_number(&associativity[index - 1], 1); > + coregroup_id = of_read_number(&associativity[index - 1], 1); > > out: > - return cpu_to_core_id(cpu); > -} Looks like leftover removed from previous patch. This change should be fixed in patch-2 itself. > + if (cpunode) > + of_node_put(cpunode); > > return coregroup_id; > } > -- > 2.43.0 -ritesh