diff options
author | Thomas Renninger <trenn@suse.de> | 2007-05-18 22:59:28 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2008-01-01 13:24:38 -0500 |
commit | 623b78c39c4525731f852072edd742cc4fba6786 (patch) | |
tree | 69310d449e923818c79639a6c54291b85d721d59 | |
parent | e697789d64f8748cb219d7f5c413c512953802cc (diff) |
ACPI: add "processor.ignore_ppc" hook to workaround BIOS _PPC weirdness
There have been fixes using _PPC, which seem to unhide a problem
on HP nx6125 (double cpufreq switch freezes the machine for
several seconds).
This one should provide a workaround for the nx6125 and for
possible other machines that show any weird _PPC behaviour.
Signed-off-by: Thomas Renninger <trenn@suse.de>
Signed-off-by: Len Brown <len.brown@intel.com>
-rw-r--r-- | drivers/acpi/processor_perflib.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/acpi/processor_perflib.c b/drivers/acpi/processor_perflib.c index 463b0247cbc5..f32010bee4d5 100644 --- a/drivers/acpi/processor_perflib.c +++ b/drivers/acpi/processor_perflib.c | |||
@@ -60,6 +60,11 @@ static DEFINE_MUTEX(performance_mutex); | |||
60 | * policy is adjusted accordingly. | 60 | * policy is adjusted accordingly. |
61 | */ | 61 | */ |
62 | 62 | ||
63 | static unsigned int ignore_ppc = 0; | ||
64 | module_param(ignore_ppc, uint, 0644); | ||
65 | MODULE_PARM_DESC(ignore_ppc, "If the frequency of your machine gets wrongly" \ | ||
66 | "limited by BIOS, this should help"); | ||
67 | |||
63 | #define PPC_REGISTERED 1 | 68 | #define PPC_REGISTERED 1 |
64 | #define PPC_IN_USE 2 | 69 | #define PPC_IN_USE 2 |
65 | 70 | ||
@@ -72,6 +77,9 @@ static int acpi_processor_ppc_notifier(struct notifier_block *nb, | |||
72 | struct acpi_processor *pr; | 77 | struct acpi_processor *pr; |
73 | unsigned int ppc = 0; | 78 | unsigned int ppc = 0; |
74 | 79 | ||
80 | if (ignore_ppc) | ||
81 | return 0; | ||
82 | |||
75 | mutex_lock(&performance_mutex); | 83 | mutex_lock(&performance_mutex); |
76 | 84 | ||
77 | if (event != CPUFREQ_INCOMPATIBLE) | 85 | if (event != CPUFREQ_INCOMPATIBLE) |
@@ -130,7 +138,13 @@ static int acpi_processor_get_platform_limit(struct acpi_processor *pr) | |||
130 | 138 | ||
131 | int acpi_processor_ppc_has_changed(struct acpi_processor *pr) | 139 | int acpi_processor_ppc_has_changed(struct acpi_processor *pr) |
132 | { | 140 | { |
133 | int ret = acpi_processor_get_platform_limit(pr); | 141 | int ret; |
142 | |||
143 | if (ignore_ppc) | ||
144 | return 0; | ||
145 | |||
146 | ret = acpi_processor_get_platform_limit(pr); | ||
147 | |||
134 | if (ret < 0) | 148 | if (ret < 0) |
135 | return (ret); | 149 | return (ret); |
136 | else | 150 | else |