perf/x86/intel/uncore: Factor out topology_gidnid_map()
authorAlexander Antonov <alexander.antonov@linux.intel.com>
Mon, 27 Nov 2023 18:52:46 +0000 (10:52 -0800)
committerPeter Zijlstra <peterz@infradead.org>
Thu, 30 Nov 2023 13:29:53 +0000 (14:29 +0100)
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
arch/x86/events/intel/uncore_snbep.c

index 1efbacfff47d948bb09115285b8e8b341482d53b..a96496bef678bb5cc562092811e4a919340c3bf3 100644 (file)
@@ -1396,6 +1396,29 @@ err:
        return ret;
 }
 
+static int topology_gidnid_map(int nodeid, u32 gidnid)
+{
+       int i, die_id = -1;
+
+       /*
+        * every three bits in the Node ID mapping register maps
+        * to a particular node.
+        */
+       for (i = 0; i < 8; i++) {
+               if (nodeid == GIDNIDMAP(gidnid, i)) {
+                       if (topology_max_die_per_package() > 1)
+                               die_id = i;
+                       else
+                               die_id = topology_phys_to_logical_pkg(i);
+                       if (die_id < 0)
+                               die_id = -ENODEV;
+                       break;
+               }
+       }
+
+       return die_id;
+}
+
 /*
  * build pci bus to socket mapping
  */
@@ -1435,22 +1458,7 @@ static int snbep_pci2phy_map_init(int devid, int nodeid_loc, int idmap_loc, bool
                                break;
                        }
 
-                       /*
-                        * every three bits in the Node ID mapping register maps
-                        * to a particular node.
-                        */
-                       for (i = 0; i < 8; i++) {
-                               if (nodeid == GIDNIDMAP(config, i)) {
-                                       if (topology_max_die_per_package() > 1)
-                                               die_id = i;
-                                       else
-                                               die_id = topology_phys_to_logical_pkg(i);
-                                       if (die_id < 0)
-                                               die_id = -ENODEV;
-                                       map->pbus_to_dieid[bus] = die_id;
-                                       break;
-                               }
-                       }
+                       map->pbus_to_dieid[bus] = topology_gidnid_map(nodeid, config);
                        raw_spin_unlock(&pci2phy_map_lock);
                } else {
                        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
        struct pci_dev *ubox = NULL;
        struct pci_dev *dev = NULL;
        u32 nid, gid;
-       int i, idx, lgc_pkg, ret = -EPERM;
+       int idx, lgc_pkg, ret = -EPERM;
        struct intel_uncore_topology *upi;
        unsigned int devfn;
 
@@ -5611,27 +5619,22 @@ static int discover_upi_topology(struct intel_uncore_type *type, int ubox_did, i
                        break;
                }
 
-               for (i = 0; i < 8; i++) {
-                       if (nid != GIDNIDMAP(gid, i))
-                               continue;
-                       lgc_pkg = topology_phys_to_logical_pkg(i);
-                       if (lgc_pkg < 0) {
-                               ret = -EPERM;
-                               goto err;
-                       }
-                       for (idx = 0; idx < type->num_boxes; idx++) {
-                               upi = &type->topology[lgc_pkg][idx];
-                               devfn = PCI_DEVFN(dev_link0 + idx, ICX_UPI_REGS_ADDR_FUNCTION);
-                               dev = pci_get_domain_bus_and_slot(pci_domain_nr(ubox->bus),
-                                                                 ubox->bus->number,
-                                                                 devfn);
-                               if (dev) {
-                                       ret = upi_fill_topology(dev, upi, idx);
-                                       if (ret)
-                                               goto err;
-                               }
+               lgc_pkg = topology_gidnid_map(nid, gid);
+               if (lgc_pkg < 0) {
+                       ret = -EPERM;
+                       goto err;
+               }
+               for (idx = 0; idx < type->num_boxes; idx++) {
+                       upi = &type->topology[lgc_pkg][idx];
+                       devfn = PCI_DEVFN(dev_link0 + idx, ICX_UPI_REGS_ADDR_FUNCTION);
+                       dev = pci_get_domain_bus_and_slot(pci_domain_nr(ubox->bus),
+                                                         ubox->bus->number,
+                                                         devfn);
+                       if (dev) {
+                               ret = upi_fill_topology(dev, upi, idx);
+                               if (ret)
+                                       goto err;
                        }
-                       break;
                }
        }
 err: