From: "tip-bot2 for Zide Chen" <tip-bot2@linutronix.de>
To: linux-tip-commits@vger.kernel.org
Cc: Zide Chen <zide.chen@intel.com>,
"Peter Zijlstra (Intel)" <peterz@infradead.org>,
Dapeng Mi <dapeng1.mi@linux.intel.com>,
Steve Wahl <steve.wahl@hpe.com>,
x86@kernel.org, linux-kernel@vger.kernel.org
Subject: [tip: perf/urgent] perf/x86/intel/uncore: Fix die ID init and look up bugs
Date: Tue, 07 Apr 2026 07:06:38 -0000 [thread overview]
Message-ID: <177554559865.226963.16099358041754193394.tip-bot2@tip-bot2> (raw)
In-Reply-To: <20260313174050.171704-4-zide.chen@intel.com>
The following commit has been merged into the perf/urgent branch of tip:
Commit-ID: a16d1ec4dd0cdcf689f324adde6067083bce9099
Gitweb: https://git.kernel.org/tip/a16d1ec4dd0cdcf689f324adde6067083bce9099
Author: Zide Chen <zide.chen@intel.com>
AuthorDate: Fri, 13 Mar 2026 10:40:49 -07:00
Committer: Peter Zijlstra <peterz@infradead.org>
CommitterDate: Tue, 07 Apr 2026 09:05:29 +02:00
perf/x86/intel/uncore: Fix die ID init and look up bugs
In snbep_pci2phy_map_init(), in the nr_node_ids > 8 path,
uncore_device_to_die() may return -1 when all CPUs associated
with the UBOX device are offline.
Remove the WARN_ON_ONCE(die_id == -1) check for two reasons:
- The current code breaks out of the loop. This is incorrect because
pci_get_device() does not guarantee iteration in domain or bus order,
so additional UBOX devices may be skipped during the scan.
- Returning -EINVAL is incorrect, since marking offline buses with
die_id == -1 is expected and should not be treated as an error.
Separately, when NUMA is disabled on a NUMA-capable platform,
pcibus_to_node() returns NUMA_NO_NODE, causing uncore_device_to_die()
to return -1 for all PCI devices. As a result,
spr_update_device_location(), used on Intel SPR and EMR, ignores the
corresponding PMON units and does not add them to the RB tree.
Fix this by using uncore_pcibus_to_dieid(), which retrieves topology
from the UBOX GIDNIDMAP register and works regardless of whether NUMA
is enabled in Linux. This requires snbep_pci2phy_map_init() to be
added in spr_uncore_pci_init().
Keep uncore_device_to_die() only for the nr_node_ids > 8 case, where
NUMA is expected to be enabled.
Fixes: 9a7832ce3d92 ("perf/x86/intel/uncore: With > 8 nodes, get pci bus die id from NUMA info")
Fixes: 65248a9a9ee1 ("perf/x86/uncore: Add a quirk for UPI on SPR")
Signed-off-by: Zide Chen <zide.chen@intel.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Dapeng Mi <dapeng1.mi@linux.intel.com>
Tested-by: Steve Wahl <steve.wahl@hpe.com>
Link: https://patch.msgid.link/20260313174050.171704-4-zide.chen@intel.com
---
arch/x86/events/intel/uncore.c | 1 +
arch/x86/events/intel/uncore_snbep.c | 13 ++++++-------
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/arch/x86/events/intel/uncore.c b/arch/x86/events/intel/uncore.c
index 786bd51..e9cc1ba 100644
--- a/arch/x86/events/intel/uncore.c
+++ b/arch/x86/events/intel/uncore.c
@@ -67,6 +67,7 @@ int uncore_die_to_segment(int die)
return bus ? pci_domain_nr(bus) : -EINVAL;
}
+/* Note: This API can only be used when NUMA information is available. */
int uncore_device_to_die(struct pci_dev *dev)
{
int node = pcibus_to_node(dev->bus);
diff --git a/arch/x86/events/intel/uncore_snbep.c b/arch/x86/events/intel/uncore_snbep.c
index 0a1d081..a4b337b 100644
--- a/arch/x86/events/intel/uncore_snbep.c
+++ b/arch/x86/events/intel/uncore_snbep.c
@@ -1459,13 +1459,7 @@ static int snbep_pci2phy_map_init(int devid, int nodeid_loc, int idmap_loc, bool
}
map->pbus_to_dieid[bus] = die_id = uncore_device_to_die(ubox_dev);
-
raw_spin_unlock(&pci2phy_map_lock);
-
- if (WARN_ON_ONCE(die_id == -1)) {
- err = -EINVAL;
- break;
- }
}
}
@@ -6420,7 +6414,7 @@ static void spr_update_device_location(int type_id)
while ((dev = pci_get_device(PCI_VENDOR_ID_INTEL, device, dev)) != NULL) {
- die = uncore_device_to_die(dev);
+ die = uncore_pcibus_to_dieid(dev->bus);
if (die < 0)
continue;
@@ -6444,6 +6438,11 @@ static void spr_update_device_location(int type_id)
int spr_uncore_pci_init(void)
{
+ int ret = snbep_pci2phy_map_init(0x3250, SKX_CPUNODEID, SKX_GIDNIDMAP, true);
+
+ if (ret)
+ return ret;
+
/*
* The discovery table of UPI on some SPR variant is broken,
* which impacts the detection of both UPI and M3UPI uncore PMON.
next prev parent reply other threads:[~2026-04-07 7:06 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-13 17:40 [PATCH V4 0/4] Miscellaneous Intel uncore patches Zide Chen
2026-03-13 17:40 ` [PATCH V4 1/4] perf/x86/intel/uncore: Fix iounmap() leak on global_init failure Zide Chen
2026-04-07 7:06 ` [tip: perf/urgent] " tip-bot2 for Zide Chen
2026-03-13 17:40 ` [PATCH V4 2/4] perf/x86/intel/uncore: Skip discovery table for offline dies Zide Chen
2026-04-07 7:06 ` [tip: perf/urgent] " tip-bot2 for Zide Chen
2026-03-13 17:40 ` [PATCH V4 3/4] perf/x86/intel/uncore: Fix die ID init and look up bugs Zide Chen
2026-03-16 6:53 ` Mi, Dapeng
2026-03-16 16:58 ` Chen, Zide
2026-04-07 7:06 ` tip-bot2 for Zide Chen [this message]
2026-03-13 17:40 ` [PATCH V4 4/4] perf/x86/intel/uncore: Remove extra double quote mark Zide Chen
2026-04-07 7:06 ` [tip: perf/urgent] " tip-bot2 for Zide Chen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=177554559865.226963.16099358041754193394.tip-bot2@tip-bot2 \
--to=tip-bot2@linutronix.de \
--cc=dapeng1.mi@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=steve.wahl@hpe.com \
--cc=x86@kernel.org \
--cc=zide.chen@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®