Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'perf-urgent-2026-04-12' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull perf fixes from Ingo Molnar:
"Four Intel uncore PMU driver fixes by Zide Chen"

* tag 'perf-urgent-2026-04-12' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
perf/x86/intel/uncore: Remove extra double quote mark
perf/x86/intel/uncore: Fix die ID init and look up bugs
perf/x86/intel/uncore: Skip discovery table for offline dies
perf/x86/intel/uncore: Fix iounmap() leak on global_init failure

+42 -37
+1
arch/x86/events/intel/uncore.c
··· 67 67 return bus ? pci_domain_nr(bus) : -EINVAL; 68 68 } 69 69 70 + /* Note: This API can only be used when NUMA information is available. */ 70 71 int uncore_device_to_die(struct pci_dev *dev) 71 72 { 72 73 int node = pcibus_to_node(dev->bus);
+11 -6
arch/x86/events/intel/uncore_discovery.c
··· 264 264 struct uncore_unit_discovery unit; 265 265 void __iomem *io_addr; 266 266 unsigned long size; 267 + int ret = 0; 267 268 int i; 268 269 269 270 size = UNCORE_DISCOVERY_GLOBAL_MAP_SIZE; ··· 274 273 275 274 /* Read Global Discovery State */ 276 275 memcpy_fromio(&global, io_addr, sizeof(struct uncore_global_discovery)); 276 + iounmap(io_addr); 277 + 277 278 if (uncore_discovery_invalid_unit(global)) { 278 279 pr_info("Invalid Global Discovery State: 0x%llx 0x%llx 0x%llx\n", 279 280 global.table1, global.ctl, global.table3); 280 - iounmap(io_addr); 281 281 return -EINVAL; 282 282 } 283 - iounmap(io_addr); 284 283 285 284 size = (1 + global.max_units) * global.stride * 8; 286 285 io_addr = ioremap(addr, size); 287 286 if (!io_addr) 288 287 return -ENOMEM; 289 288 290 - if (domain->global_init && domain->global_init(global.ctl)) 291 - return -ENODEV; 289 + if (domain->global_init && domain->global_init(global.ctl)) { 290 + ret = -ENODEV; 291 + goto out; 292 + } 292 293 293 294 /* Parsing Unit Discovery State */ 294 295 for (i = 0; i < global.max_units; i++) { ··· 310 307 } 311 308 312 309 *parsed = true; 310 + 311 + out: 313 312 iounmap(io_addr); 314 - return 0; 313 + return ret; 315 314 } 316 315 317 316 static int parse_discovery_table(struct uncore_discovery_domain *domain, ··· 371 366 (val & UNCORE_DISCOVERY_DVSEC2_BIR_MASK) * UNCORE_DISCOVERY_BIR_STEP; 372 367 373 368 die = get_device_die_id(dev); 374 - if (die < 0) 369 + if ((die < 0) || (die >= uncore_max_dies())) 375 370 continue; 376 371 377 372 parse_discovery_table(domain, dev, die, bar_offset, &parsed);
+30 -31
arch/x86/events/intel/uncore_snbep.c
··· 1459 1459 } 1460 1460 1461 1461 map->pbus_to_dieid[bus] = die_id = uncore_device_to_die(ubox_dev); 1462 - 1463 1462 raw_spin_unlock(&pci2phy_map_lock); 1464 - 1465 - if (WARN_ON_ONCE(die_id == -1)) { 1466 - err = -EINVAL; 1467 - break; 1468 - } 1469 1463 } 1470 1464 } 1471 1465 ··· 6414 6420 6415 6421 while ((dev = pci_get_device(PCI_VENDOR_ID_INTEL, device, dev)) != NULL) { 6416 6422 6417 - die = uncore_device_to_die(dev); 6423 + die = uncore_pcibus_to_dieid(dev->bus); 6418 6424 if (die < 0) 6419 6425 continue; 6420 6426 ··· 6438 6444 6439 6445 int spr_uncore_pci_init(void) 6440 6446 { 6447 + int ret = snbep_pci2phy_map_init(0x3250, SKX_CPUNODEID, SKX_GIDNIDMAP, true); 6448 + 6449 + if (ret) 6450 + return ret; 6451 + 6441 6452 /* 6442 6453 * The discovery table of UPI on some SPR variant is broken, 6443 6454 * which impacts the detection of both UPI and M3UPI uncore PMON. ··· 6934 6935 6935 6936 static struct uncore_event_desc dmr_uncore_iio_freerunning_events[] = { 6936 6937 /* ITC Free Running Data BW counter for inbound traffic */ 6937 - INTEL_UNCORE_FR_EVENT_DESC(inb_data_port0, 0x10, "3.814697266e-6"), 6938 - INTEL_UNCORE_FR_EVENT_DESC(inb_data_port1, 0x11, "3.814697266e-6"), 6939 - INTEL_UNCORE_FR_EVENT_DESC(inb_data_port2, 0x12, "3.814697266e-6"), 6940 - INTEL_UNCORE_FR_EVENT_DESC(inb_data_port3, 0x13, "3.814697266e-6"), 6941 - INTEL_UNCORE_FR_EVENT_DESC(inb_data_port4, 0x14, "3.814697266e-6"), 6942 - INTEL_UNCORE_FR_EVENT_DESC(inb_data_port5, 0x15, "3.814697266e-6"), 6943 - INTEL_UNCORE_FR_EVENT_DESC(inb_data_port6, 0x16, "3.814697266e-6"), 6944 - INTEL_UNCORE_FR_EVENT_DESC(inb_data_port7, 0x17, "3.814697266e-6"), 6938 + INTEL_UNCORE_FR_EVENT_DESC(inb_data_port0, 0x10, 3.814697266e-6), 6939 + INTEL_UNCORE_FR_EVENT_DESC(inb_data_port1, 0x11, 3.814697266e-6), 6940 + INTEL_UNCORE_FR_EVENT_DESC(inb_data_port2, 0x12, 3.814697266e-6), 6941 + INTEL_UNCORE_FR_EVENT_DESC(inb_data_port3, 0x13, 3.814697266e-6), 6942 + INTEL_UNCORE_FR_EVENT_DESC(inb_data_port4, 0x14, 3.814697266e-6), 6943 + INTEL_UNCORE_FR_EVENT_DESC(inb_data_port5, 0x15, 3.814697266e-6), 6944 + INTEL_UNCORE_FR_EVENT_DESC(inb_data_port6, 0x16, 3.814697266e-6), 6945 + INTEL_UNCORE_FR_EVENT_DESC(inb_data_port7, 0x17, 3.814697266e-6), 6945 6946 6946 6947 /* ITC Free Running BW IN counters */ 6947 - INTEL_UNCORE_FR_EVENT_DESC(bw_in_port0, 0x20, "3.814697266e-6"), 6948 - INTEL_UNCORE_FR_EVENT_DESC(bw_in_port1, 0x21, "3.814697266e-6"), 6949 - INTEL_UNCORE_FR_EVENT_DESC(bw_in_port2, 0x22, "3.814697266e-6"), 6950 - INTEL_UNCORE_FR_EVENT_DESC(bw_in_port3, 0x23, "3.814697266e-6"), 6951 - INTEL_UNCORE_FR_EVENT_DESC(bw_in_port4, 0x24, "3.814697266e-6"), 6952 - INTEL_UNCORE_FR_EVENT_DESC(bw_in_port5, 0x25, "3.814697266e-6"), 6953 - INTEL_UNCORE_FR_EVENT_DESC(bw_in_port6, 0x26, "3.814697266e-6"), 6954 - INTEL_UNCORE_FR_EVENT_DESC(bw_in_port7, 0x27, "3.814697266e-6"), 6948 + INTEL_UNCORE_FR_EVENT_DESC(bw_in_port0, 0x20, 3.814697266e-6), 6949 + INTEL_UNCORE_FR_EVENT_DESC(bw_in_port1, 0x21, 3.814697266e-6), 6950 + INTEL_UNCORE_FR_EVENT_DESC(bw_in_port2, 0x22, 3.814697266e-6), 6951 + INTEL_UNCORE_FR_EVENT_DESC(bw_in_port3, 0x23, 3.814697266e-6), 6952 + INTEL_UNCORE_FR_EVENT_DESC(bw_in_port4, 0x24, 3.814697266e-6), 6953 + INTEL_UNCORE_FR_EVENT_DESC(bw_in_port5, 0x25, 3.814697266e-6), 6954 + INTEL_UNCORE_FR_EVENT_DESC(bw_in_port6, 0x26, 3.814697266e-6), 6955 + INTEL_UNCORE_FR_EVENT_DESC(bw_in_port7, 0x27, 3.814697266e-6), 6955 6956 6956 6957 /* ITC Free Running BW OUT counters */ 6957 - INTEL_UNCORE_FR_EVENT_DESC(bw_out_port0, 0x30, "3.814697266e-6"), 6958 - INTEL_UNCORE_FR_EVENT_DESC(bw_out_port1, 0x31, "3.814697266e-6"), 6959 - INTEL_UNCORE_FR_EVENT_DESC(bw_out_port2, 0x32, "3.814697266e-6"), 6960 - INTEL_UNCORE_FR_EVENT_DESC(bw_out_port3, 0x33, "3.814697266e-6"), 6961 - INTEL_UNCORE_FR_EVENT_DESC(bw_out_port4, 0x34, "3.814697266e-6"), 6962 - INTEL_UNCORE_FR_EVENT_DESC(bw_out_port5, 0x35, "3.814697266e-6"), 6963 - INTEL_UNCORE_FR_EVENT_DESC(bw_out_port6, 0x36, "3.814697266e-6"), 6964 - INTEL_UNCORE_FR_EVENT_DESC(bw_out_port7, 0x37, "3.814697266e-6"), 6958 + INTEL_UNCORE_FR_EVENT_DESC(bw_out_port0, 0x30, 3.814697266e-6), 6959 + INTEL_UNCORE_FR_EVENT_DESC(bw_out_port1, 0x31, 3.814697266e-6), 6960 + INTEL_UNCORE_FR_EVENT_DESC(bw_out_port2, 0x32, 3.814697266e-6), 6961 + INTEL_UNCORE_FR_EVENT_DESC(bw_out_port3, 0x33, 3.814697266e-6), 6962 + INTEL_UNCORE_FR_EVENT_DESC(bw_out_port4, 0x34, 3.814697266e-6), 6963 + INTEL_UNCORE_FR_EVENT_DESC(bw_out_port5, 0x35, 3.814697266e-6), 6964 + INTEL_UNCORE_FR_EVENT_DESC(bw_out_port6, 0x36, 3.814697266e-6), 6965 + INTEL_UNCORE_FR_EVENT_DESC(bw_out_port7, 0x37, 3.814697266e-6), 6965 6966 6966 6967 /* Free Running Clock Counter */ 6967 6968 INTEL_UNCORE_EVENT_DESC(clockticks, "event=0xff,umask=0x40"),