ACPICA: _CST repair: Handle null package entries
authorLv Zheng <lv.zheng@intel.com>
Sat, 8 Jun 2013 01:01:19 +0000 (09:01 +0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 19 Jun 2013 23:43:15 +0000 (01:43 +0200)
Sort package only after null/bad elements have been removed.

Fixes a problem where the _CST sort was performed too early.  This
change sorts the package only after null/bad elements have been
removed.

Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/acpica/nsrepair2.c

index 029816edd39246599cdd41d9866dd16ad5168486..c84603ee83ae084312f3936324a1bfb524b64f08 100644 (file)
@@ -452,18 +452,7 @@ acpi_ns_repair_CST(struct acpi_evaluate_info *info,
        ACPI_FUNCTION_NAME(ns_repair_CST);
 
        /*
-        * Entries (subpackages) in the _CST Package must be sorted by the
-        * C-state type, in ascending order.
-        */
-       status = acpi_ns_check_sorted_list(info, return_object, 1, 4, 1,
-                                          ACPI_SORT_ASCENDING, "C-State Type");
-       if (ACPI_FAILURE(status)) {
-               return (status);
-       }
-
-       /*
-        * We now know the list is correctly sorted by C-state type. Check if
-        * the C-state type values are proportional.
+        * Check if the C-state type values are proportional.
         */
        outer_element_count = return_object->package.count - 1;
        i = 0;
@@ -502,6 +491,17 @@ acpi_ns_repair_CST(struct acpi_evaluate_info *info,
 
        obj_desc = return_object->package.elements[0];
        obj_desc->integer.value = outer_element_count;
+
+       /*
+        * Entries (subpackages) in the _CST Package must be sorted by the
+        * C-state type, in ascending order.
+        */
+       status = acpi_ns_check_sorted_list(info, return_object, 1, 4, 1,
+                                          ACPI_SORT_ASCENDING, "C-State Type");
+       if (ACPI_FAILURE(status)) {
+               return (status);
+       }
+
        return (AE_OK);
 }