#include <linux/cpumask.h>
 #include <linux/time.h>
 #include <linux/sched.h>
+#include <linux/topology.h>
 #include <asm/processor.h>
 #include <asm/msr.h>
 
 static void do_read_registers_on_cu(void *_data)
 {
        struct fam15h_power_data *data = _data;
-       int cpu, cu;
-
-       cpu = smp_processor_id();
+       int cu;
 
        /*
         * With the new x86 topology modelling, cpu core id actually
         * is compute unit id.
         */
-       cu = cpu_data(cpu).cpu_core_id;
+       cu = topology_core_id(smp_processor_id());
 
        rdmsrl_safe(MSR_F15H_CU_PWR_ACCUMULATOR, &data->cu_acc_power[cu]);
        rdmsrl_safe(MSR_F15H_PTSC, &data->cpu_sw_pwr_ptsc[cu]);