On Fri, 26 Mar 2010 14:39:56 +0100 Borislav Petkov <bp@xxxxxxxxx> wrote: > From: Borislav Petkov <borislav.petkov@xxxxxxx> > > Starting with F10h, revE, AMD processors add support for a dynamic > core boosting feature called Core Performance Boost. When a specific > condition is present, a subset of the cores on a system are boosted > beyond their P0 operating frequency to speed up the performance of > single-threaded applications. > > In the normal case, the system comes out of reset with core boosting > enabled. This patch adds a sysfs knob with which core boosting can be > switched on or off for benchmarking purposes. > > While at it, cleanup the driver init codepath and update copyrights. > > ... > > +static void _cpb_toggle_msrs(bool t) > +{ > + int cpu; > + > + rdmsr_on_cpus(cpu_online_mask, MSR_K7_HWCR, msrs); > + > + for_each_cpu(cpu, cpu_online_mask) { > + struct msr *reg = per_cpu_ptr(msrs, cpu); > + if (t) > + reg->l &= ~BIT(25); > + else > + reg->l |= BIT(25); > + } > + wrmsr_on_cpus(cpu_online_mask, MSR_K7_HWCR, msrs); > +} What prevents cpu_online_mask from changing while this is happening? > @@ -1422,15 +1490,34 @@ static int __cpuinit powernowk8_init(void) > supported_cpus++; > } > > - if (supported_cpus == num_online_cpus()) { > - printk(KERN_INFO PFX "Found %d %s " > - "processors (%d cpu cores) (" VERSION ")\n", > - num_online_nodes(), > - boot_cpu_data.x86_model_id, supported_cpus); > - return cpufreq_register_driver(&cpufreq_amd64_driver); > + if (supported_cpus != num_online_cpus()) > + return -ENODEV; > + > + printk(KERN_INFO PFX "Found %d %s (%d cpu cores) (" VERSION ")\n", > + num_online_nodes(), boot_cpu_data.x86_model_id, supported_cpus); > + > + if (boot_cpu_has(X86_FEATURE_CPB)) { > + > + cpb_capable = true; > + > + msrs = msrs_alloc(); > + if (!msrs) { > + printk(KERN_ERR "%s: Error allocating msrs!\n", __func__); > + return -ENOMEM; > + } > + > + rdmsr_on_cpus(cpu_online_mask, MSR_K7_HWCR, msrs); > + > + for_each_cpu(cpu, cpu_online_mask) { > + struct msr *reg = per_cpu_ptr(msrs, cpu); > + cpb_enabled |= !(!!(reg->l & BIT(25))); > + } Ditto. I assume these changes get applied to new CPUs as they come online? > ... -- To unsubscribe from this list: send the line "unsubscribe cpufreq" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html