ACPI: Revert conflicting workaround for BIOS w/ mangled PRT entries
authorZhang Rui <rui.zhang@intel.com>
Wed, 8 Apr 2009 01:44:29 +0000 (09:44 +0800)
committerLen Brown <len.brown@intel.com>
Sat, 11 Apr 2009 04:57:21 +0000 (00:57 -0400)
2f894ef9c8b36a35d80709bedca276d2fc691941
in Linux-2.6.21 worked around BIOS with mangled _PRT entries:
http://bugzilla.kernel.org/show_bug.cgi?id=6859

d0e184abc5983281ef189db2c759d65d56eb1b80
worked around the same issue via ACPICA, and shipped in 2.6.27.

Unfortunately the two workarounds conflict:
http://bugzilla.kernel.org/show_bug.cgi?id=12270

So revert the Linux specific one.

Signed-off-by: Zhang Rui <rui.zhang@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
drivers/acpi/acpica/rscreate.c

index 663f692..a3c23d6 100644 (file)
@@ -191,8 +191,6 @@ acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
        user_prt = ACPI_CAST_PTR(struct acpi_pci_routing_table, buffer);
 
        for (index = 0; index < number_of_elements; index++) {
-               int source_name_index = 2;
-               int source_index_index = 3;
 
                /*
                 * Point user_prt past this current structure
@@ -261,27 +259,6 @@ acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
                        return_ACPI_STATUS(AE_BAD_DATA);
                }
 
-               /*
-                * If BIOS erroneously reversed the _PRT source_name and source_index,
-                * then reverse them back.
-                */
-               if ((sub_object_list[3])->common.type !=
-                   ACPI_TYPE_INTEGER) {
-                       if (acpi_gbl_enable_interpreter_slack) {
-                               source_name_index = 3;
-                               source_index_index = 2;
-                               printk(KERN_WARNING
-                                      "ACPI: Handling Garbled _PRT entry\n");
-                       } else {
-                               ACPI_ERROR((AE_INFO,
-                                           "(PRT[%X].source_index) Need Integer, found %s",
-                                           index,
-                                           acpi_ut_get_object_type_name
-                                           (sub_object_list[3])));
-                               return_ACPI_STATUS(AE_BAD_DATA);
-                       }
-               }
-
                user_prt->pin = (u32) obj_desc->integer.value;
 
                /*
@@ -304,7 +281,7 @@ acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
                 * 3) Third subobject: Dereference the PRT.source_name
                 * The name may be unresolved (slack mode), so allow a null object
                 */
-               obj_desc = sub_object_list[source_name_index];
+               obj_desc = sub_object_list[2];
                if (obj_desc) {
                        switch (obj_desc->common.type) {
                        case ACPI_TYPE_LOCAL_REFERENCE:
@@ -378,7 +355,7 @@ acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
 
                /* 4) Fourth subobject: Dereference the PRT.source_index */
 
-               obj_desc = sub_object_list[source_index_index];
+               obj_desc = sub_object_list[3];
                if (obj_desc->common.type != ACPI_TYPE_INTEGER) {
                        ACPI_ERROR((AE_INFO,
                                    "(PRT[%X].SourceIndex) Need Integer, found %s",