So, the first patch that the guys from intel gave me to solve the problem with ACPI that didnt recognize both cores is below this text. This isnt a “perfect” patch as it does not solve a problem with cpu frequency scaling for cpu1. But it works great =)
Thanks for intel’s guys!
http://bugzilla.kernel.org/show_bug.cgi?id=7465
—
drivers/acpi/tables.c | 16 ++++++++++——
1 files changed, 10 insertions(+), 6 deletions(-)
Index: linux-2.6.18.1/drivers/acpi/tables.c
===================================================================
— linux-2.6.18.1.orig/drivers/acpi/tables.c 2006-10-14 11:34:03.000000000 +0800
+++ linux-2.6.18.1/drivers/acpi/tables.c 2006-12-02 01:01:00.000000000 +0800
@@ -316,7 +316,7 @@ acpi_table_parse_madt_family(enum acpi_t
unsigned int count = 0;
unsigned long madt_end;
unsigned int i;
–
+ unsigned int count = 0;
if (!handler)
return -EINVAL;
@@ -325,6 +325,12 @@ acpi_table_parse_madt_family(enum acpi_t
for (i = 0; i < sdt_count; i++) {
if (sdt_entry[i].id != id)
continue;
+ count ++;
+ if(count == 1) {
+ printk("\nFind the first MADT, don't parse it");
+ continue;
+ }
+ printk("\nLet's parse the %d MADT.", count);
madt = (void *)
__acpi_map_table(sdt_entry[i].pa, sdt_entry[i].size);
if (!madt) {
@@ -388,12 +394,10 @@ int __init acpi_table_parse(enum acpi_ta
if (sdt_entry[i].id != id)
continue;
count++;
- if (count == 1)
- handler(sdt_entry[i].pa, sdt_entry[i].size);
-
- else
+ handler(sdt_entry[i].pa, sdt_entry[i].size);
+ if(count > 1)
printk(KERN_WARNING PREFIX
– “%d duplicate %s table ignored.\n”, count,
+ “%d duplicate %s table, former tables are ignored.\n”, count,
acpi_table_signatures[id]);
}