Skip to content

Commit fdd0410

Browse files
Alexander AntonovPeter Zijlstra
authored andcommitted
perf/x86/intel/uncore: Factor out topology_gidnid_map()
The same code is used for retrieving package ID procedure from GIDNIDMAP register. Factor out topology_gidnid_map() to avoid code duplication. Signed-off-by: Alexander Antonov <alexander.antonov@linux.intel.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Kan Liang <kan.liang@linux.intel.com> Link: https://lore.kernel.org/r/20231127185246.2371939-3-alexander.antonov@linux.intel.com
1 parent 1692cf4 commit fdd0410

File tree

1 file changed

+40
-37
lines changed

1 file changed

+40
-37
lines changed

arch/x86/events/intel/uncore_snbep.c

Lines changed: 40 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1396,6 +1396,29 @@ static int upi_nodeid_groupid(struct pci_dev *ubox_dev, int nodeid_loc, int idma
13961396
return ret;
13971397
}
13981398

1399+
static int topology_gidnid_map(int nodeid, u32 gidnid)
1400+
{
1401+
int i, die_id = -1;
1402+
1403+
/*
1404+
* every three bits in the Node ID mapping register maps
1405+
* to a particular node.
1406+
*/
1407+
for (i = 0; i < 8; i++) {
1408+
if (nodeid == GIDNIDMAP(gidnid, i)) {
1409+
if (topology_max_die_per_package() > 1)
1410+
die_id = i;
1411+
else
1412+
die_id = topology_phys_to_logical_pkg(i);
1413+
if (die_id < 0)
1414+
die_id = -ENODEV;
1415+
break;
1416+
}
1417+
}
1418+
1419+
return die_id;
1420+
}
1421+
13991422
/*
14001423
* build pci bus to socket mapping
14011424
*/
@@ -1435,22 +1458,7 @@ static int snbep_pci2phy_map_init(int devid, int nodeid_loc, int idmap_loc, bool
14351458
break;
14361459
}
14371460

1438-
/*
1439-
* every three bits in the Node ID mapping register maps
1440-
* to a particular node.
1441-
*/
1442-
for (i = 0; i < 8; i++) {
1443-
if (nodeid == GIDNIDMAP(config, i)) {
1444-
if (topology_max_die_per_package() > 1)
1445-
die_id = i;
1446-
else
1447-
die_id = topology_phys_to_logical_pkg(i);
1448-
if (die_id < 0)
1449-
die_id = -ENODEV;
1450-
map->pbus_to_dieid[bus] = die_id;
1451-
break;
1452-
}
1453-
}
1461+
map->pbus_to_dieid[bus] = topology_gidnid_map(nodeid, config);
14541462
raw_spin_unlock(&pci2phy_map_lock);
14551463
} else {
14561464
segment = pci_domain_nr(ubox_dev->bus);
@@ -5596,7 +5604,7 @@ static int discover_upi_topology(struct intel_uncore_type *type, int ubox_did, i
55965604
struct pci_dev *ubox = NULL;
55975605
struct pci_dev *dev = NULL;
55985606
u32 nid, gid;
5599-
int i, idx, lgc_pkg, ret = -EPERM;
5607+
int idx, lgc_pkg, ret = -EPERM;
56005608
struct intel_uncore_topology *upi;
56015609
unsigned int devfn;
56025610

@@ -5611,27 +5619,22 @@ static int discover_upi_topology(struct intel_uncore_type *type, int ubox_did, i
56115619
break;
56125620
}
56135621

5614-
for (i = 0; i < 8; i++) {
5615-
if (nid != GIDNIDMAP(gid, i))
5616-
continue;
5617-
lgc_pkg = topology_phys_to_logical_pkg(i);
5618-
if (lgc_pkg < 0) {
5619-
ret = -EPERM;
5620-
goto err;
5621-
}
5622-
for (idx = 0; idx < type->num_boxes; idx++) {
5623-
upi = &type->topology[lgc_pkg][idx];
5624-
devfn = PCI_DEVFN(dev_link0 + idx, ICX_UPI_REGS_ADDR_FUNCTION);
5625-
dev = pci_get_domain_bus_and_slot(pci_domain_nr(ubox->bus),
5626-
ubox->bus->number,
5627-
devfn);
5628-
if (dev) {
5629-
ret = upi_fill_topology(dev, upi, idx);
5630-
if (ret)
5631-
goto err;
5632-
}
5622+
lgc_pkg = topology_gidnid_map(nid, gid);
5623+
if (lgc_pkg < 0) {
5624+
ret = -EPERM;
5625+
goto err;
5626+
}
5627+
for (idx = 0; idx < type->num_boxes; idx++) {
5628+
upi = &type->topology[lgc_pkg][idx];
5629+
devfn = PCI_DEVFN(dev_link0 + idx, ICX_UPI_REGS_ADDR_FUNCTION);
5630+
dev = pci_get_domain_bus_and_slot(pci_domain_nr(ubox->bus),
5631+
ubox->bus->number,
5632+
devfn);
5633+
if (dev) {
5634+
ret = upi_fill_topology(dev, upi, idx);
5635+
if (ret)
5636+
goto err;
56335637
}
5634-
break;
56355638
}
56365639
}
56375640
err:

0 commit comments

Comments
 (0)