* [PATCH]: ACPI: Sort the ACPI P-state table in descending order by cpufre
@ 2009-06-26 2:06 yakui_zhao
0 siblings, 0 replies; only message in thread
From: yakui_zhao @ 2009-06-26 2:06 UTC (permalink / raw)
To: lenb; +Cc: linux-acpi, ming.m.lin
From: Zhao Yakui <yakui.zhao@intel.com>
According to ACPI spec the the _PSS object indicates to OSPM the supported
processor performance states. And they should be sorted in descending order
by cpufreq.
But unfortunately on some boxes the cpufreq in _PSS object is sorted in
ascending order, which causes that cpufreq driver can't work well.
Sort the ACPI P-state table in descending order by cpufreq.
http://bugzilla.kernel.org/show_bug.cgi?id=13529
Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
tested-by: Mukik182 <mukik182@gmail.com>
cc: Ling Ming <ming.m.lin@intel.com>
---
drivers/acpi/processor_perflib.c | 25 ++++++++++++++++++++++++-
1 file changed, 24 insertions(+), 1 deletion(-)
Index: linux-2.6/drivers/acpi/processor_perflib.c
===================================================================
--- linux-2.6.orig/drivers/acpi/processor_perflib.c 2009-06-25 09:00:40.000000000 +0800
+++ linux-2.6/drivers/acpi/processor_perflib.c 2009-06-26 09:59:54.000000000 +0800
@@ -38,6 +38,7 @@
#include <acpi/acpi_bus.h>
#include <acpi/acpi_drivers.h>
#include <acpi/processor.h>
+#include <linux/sort.h>
#define ACPI_PROCESSOR_CLASS "processor"
#define ACPI_PROCESSOR_FILE_PERFORMANCE "performance"
@@ -246,6 +247,25 @@
return result;
}
+static int pss_cmp_func(const void *a, const void *b)
+{
+ struct acpi_processor_px *pxa, *pxb;
+ acpi_integer acpi_value;
+
+ pxa = (struct acpi_processor_px *)a;
+ pxb = (struct acpi_processor_px *)b;
+
+ acpi_value = pxb->core_frequency - pxa->core_frequency;
+ return (int) acpi_value;
+}
+static void pss_swap_func(void *a, void *b, int size)
+{
+ struct acpi_processor_px temp_px;
+
+ memcpy((void *)&temp_px, a, size);
+ memcpy(a, b, size);
+ memcpy(b, (void *)&temp_px, size);
+}
static int acpi_processor_get_performance_states(struct acpi_processor *pr)
{
int result = 0;
@@ -323,7 +343,10 @@
goto end;
}
}
-
+ sort((void *)(pr->performance->states), pr->performance->state_count,
+ sizeof(struct acpi_processor_px),
+ pss_cmp_func,
+ pss_swap_func);
end:
kfree(buffer.pointer);
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2009-06-26 2:05 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-06-26 2:06 [PATCH]: ACPI: Sort the ACPI P-state table in descending order by cpufre yakui_zhao
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox