]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
perf/x86/intel/uncore: Move die_to_cpu() to uncore.c
authorZide Chen <zide.chen@intel.com>
Tue, 2 Jun 2026 14:49:06 +0000 (07:49 -0700)
committerPeter Zijlstra <peterz@infradead.org>
Thu, 4 Jun 2026 09:38:37 +0000 (11:38 +0200)
Move die_to_cpu() into uncore.c so it can be reused by the MSR
initialization path, preparing for the introduction of an MSR global
initialization callback.

Move the cpus_read_{lock,unlock}() out of the API, in order to make
it possible to be called when the lock is being held.

Add the uncore_ prefix for consistency with other uncore APIs.

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>
Link: https://patch.msgid.link/20260602144908.263680-6-zide.chen@intel.com
arch/x86/events/intel/uncore.c
arch/x86/events/intel/uncore.h
arch/x86/events/intel/uncore_snbep.c

index e9cc1ba921c5ed4c49b108b4571e58811e97ad28..22256ded2d67d56b6cefc339704b629feb2490b0 100644 (file)
@@ -83,6 +83,25 @@ int uncore_device_to_die(struct pci_dev *dev)
        return -1;
 }
 
+/*
+ * Using cpus_read_lock() to ensure cpu is not going down between
+ * looking at cpu_online_mask.
+ *
+ * The lock must be held by the caller.
+ */
+int uncore_die_to_cpu(int die)
+{
+       int res = 0, cpu;
+
+       for_each_online_cpu(cpu) {
+               if (topology_logical_die_id(cpu) == die) {
+                       res = cpu;
+                       break;
+               }
+       }
+       return res;
+}
+
 static void uncore_free_pcibus_map(void)
 {
        struct pci2phy_map *map, *tmp;
index c35918c01afafe8d7b6a93b6de814331e2d23b01..94c68e3417b6e88c9446e563972aa9c06a4146d8 100644 (file)
@@ -235,6 +235,7 @@ struct pci2phy_map *__find_pci2phy_map(int segment);
 int uncore_pcibus_to_dieid(struct pci_bus *bus);
 int uncore_die_to_segment(int die);
 int uncore_device_to_die(struct pci_dev *dev);
+int uncore_die_to_cpu(int die);
 
 ssize_t uncore_event_show(struct device *dev,
                          struct device_attribute *attr, char *buf);
index c9ce206fcbb6e76098f562074bb9f7adab79c4bf..772b78237424ce5de6327749ac0892d954562297 100644 (file)
@@ -3704,25 +3704,6 @@ static int skx_msr_cpu_bus_read(int cpu, u64 *topology)
        return 0;
 }
 
-static int die_to_cpu(int die)
-{
-       int res = 0, cpu, current_die;
-       /*
-        * Using cpus_read_lock() to ensure cpu is not going down between
-        * looking at cpu_online_mask.
-        */
-       cpus_read_lock();
-       for_each_online_cpu(cpu) {
-               current_die = topology_logical_die_id(cpu);
-               if (current_die == die) {
-                       res = cpu;
-                       break;
-               }
-       }
-       cpus_read_unlock();
-       return res;
-}
-
 enum {
        IIO_TOPOLOGY_TYPE,
        UPI_TOPOLOGY_TYPE,
@@ -3794,8 +3775,9 @@ static int skx_pmu_get_topology(struct intel_uncore_type *type,
        int die, ret = -EPERM;
        u64 cpu_bus_msr;
 
+       cpus_read_lock();
        for (die = 0; die < uncore_max_dies(); die++) {
-               ret = skx_msr_cpu_bus_read(die_to_cpu(die), &cpu_bus_msr);
+               ret = skx_msr_cpu_bus_read(uncore_die_to_cpu(die), &cpu_bus_msr);
                if (ret)
                        break;
 
@@ -3807,6 +3789,7 @@ static int skx_pmu_get_topology(struct intel_uncore_type *type,
                if (ret)
                        break;
        }
+       cpus_read_unlock();
 
        return ret;
 }