[PATCH] ACPI: fix vendor resource length computation
[safe/jmp/linux-2.6] / drivers / acpi / resources / rscalc.c
index 1dfa690..4038dbf 100644 (file)
@@ -391,8 +391,7 @@ acpi_rs_get_list_length(u8 * aml_buffer,
                         * Ensure a 32-bit boundary for the structure
                         */
                        extra_struct_bytes =
-                           ACPI_ROUND_UP_to_32_bITS(resource_length) -
-                           resource_length;
+                           ACPI_ROUND_UP_to_32_bITS(resource_length);
                        break;
 
                case ACPI_RESOURCE_NAME_END_TAG:
@@ -408,8 +407,7 @@ acpi_rs_get_list_length(u8 * aml_buffer,
                         * Add vendor data and ensure a 32-bit boundary for the structure
                         */
                        extra_struct_bytes =
-                           ACPI_ROUND_UP_to_32_bITS(resource_length) -
-                           resource_length;
+                           ACPI_ROUND_UP_to_32_bITS(resource_length);
                        break;
 
                case ACPI_RESOURCE_NAME_ADDRESS32:
@@ -541,13 +539,13 @@ acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
 
                for (table_index = 0; table_index < 4 && !name_found;
                     table_index++) {
-                       if ((ACPI_TYPE_STRING ==
-                            ACPI_GET_OBJECT_TYPE(*sub_object_list))
-                           ||
-                           ((ACPI_TYPE_LOCAL_REFERENCE ==
-                             ACPI_GET_OBJECT_TYPE(*sub_object_list))
-                            && ((*sub_object_list)->reference.opcode ==
-                                AML_INT_NAMEPATH_OP))) {
+                       if (*sub_object_list && /* Null object allowed */
+                           ((ACPI_TYPE_STRING ==
+                             ACPI_GET_OBJECT_TYPE(*sub_object_list)) ||
+                            ((ACPI_TYPE_LOCAL_REFERENCE ==
+                              ACPI_GET_OBJECT_TYPE(*sub_object_list)) &&
+                             ((*sub_object_list)->reference.opcode ==
+                              AML_INT_NAMEPATH_OP)))) {
                                name_found = TRUE;
                        } else {
                                /* Look at the next element */