Am Donnerstag 23 April 2009 schrieb Chris Wright: > -stable review patch. If anyone has any objections, please let us > know. --------------------- > > From: Venkatesh Pallipadi <venkatesh.pallipadi@xxxxxxxxx> > > upstream commit: a59d1637eb0e0a37ee0e5c92800c60abe3624e24 > > Some BIOSes report very high frequency transition latency which are > plainly wrong on CPus that can change frequency using native MSR > interface. > > One such system is IBM T42 (2327-8ZU) as reported by Owen Taylor and > Rik van Riel. > > cpufreq_ondemand driver uses this transition latency to come up with a > reasonable sampling interval to sample CPU usage and with such high > latency value, ondemand sampling interval ends up being very high > (0.5 sec, in this particular case), resulting in performance impact due > to slow response to increasing frequency. > > Fix it by capping-off the transition latency to 20uS for native MSR > based frequency transitions. > > mjg: We've confirmed that this also helps on the X31 > > Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@xxxxxxxxx> > Acked-by: Matthew Garrett <mjg@xxxxxxxxxx> > Signed-off-by: Len Brown <len.brown@xxxxxxxxx> > Signed-off-by: Chris Wright <chrisw@xxxxxxxxxxxx> > --- > > arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > --- a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c > +++ b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c > @@ -680,6 +680,18 @@ static int acpi_cpufreq_cpu_init(struct > perf->states[i].transition_latency * 1000; > } > > + /* Check for high latency (>20uS) from buggy BIOSes, like on T42 */ > + if (perf->control_register.space_id == ACPI_ADR_SPACE_FIXED_HARDWARE > && + policy->cpuinfo.transition_latency > 20 * 1000) { > + static int print_once; > + policy->cpuinfo.transition_latency = 20 * 1000; > + if (!print_once) { > + print_once = 1; > + printk(KERN_INFO "Capping off P-state tranision latency" typo: tranision => transition > + " at 20 uS\n"); > + } > + } > + > data->max_freq = perf->states[0].core_frequency * 1000; > /* table init */ > for (i=0; i<perf->state_count; i++) { -- Martin 'Helios' Steigerwald - http://www.Lichtvoll.de GPG: 03B0 0D6C 0040 0710 4AFA B82F 991B EAAC A599 84C7
Attachment:
signature.asc
Description: This is a digitally signed message part.