]> git.karo-electronics.de Git - linux-beck.git/commitdiff
ACPICA: Table Manager: Merge duplicate code (root table)
authorLv Zheng <lv.zheng@intel.com>
Thu, 13 Sep 2012 16:29:06 +0000 (09:29 -0700)
committerLen Brown <len.brown@intel.com>
Fri, 21 Sep 2012 04:35:12 +0000 (00:35 -0400)
Merge/remove duplicate code in the root table resize functions
One function is external, the other is internal.  Lv Zheng,

ACPICA BZ 846:
https://acpica.org/bugzilla/show_bug.cgi?id=846

Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
drivers/acpi/acpica/tbinstal.c
drivers/acpi/acpica/tbxface.c

index 74f97d74db1c7772bf79bc39eb0daea11ebf3049..70f9d787c82cd9e8af9ae6fbd19d4d5a7cee2ac0 100644 (file)
@@ -350,6 +350,7 @@ struct acpi_table_header *acpi_tb_table_override(struct acpi_table_header
 acpi_status acpi_tb_resize_root_table_list(void)
 {
        struct acpi_table_desc *tables;
+       u32 table_count;
 
        ACPI_FUNCTION_TRACE(tb_resize_root_table_list);
 
@@ -363,8 +364,13 @@ acpi_status acpi_tb_resize_root_table_list(void)
 
        /* Increase the Table Array size */
 
-       tables = ACPI_ALLOCATE_ZEROED(((acpi_size) acpi_gbl_root_table_list.
-                                      max_table_count +
+       if (acpi_gbl_root_table_list.flags & ACPI_ROOT_ORIGIN_ALLOCATED) {
+               table_count = acpi_gbl_root_table_list.max_table_count;
+       } else {
+               table_count = acpi_gbl_root_table_list.current_table_count;
+       }
+
+       tables = ACPI_ALLOCATE_ZEROED(((acpi_size) table_count +
                                       ACPI_ROOT_TABLE_SIZE_INCREMENT) *
                                      sizeof(struct acpi_table_desc));
        if (!tables) {
@@ -377,8 +383,8 @@ acpi_status acpi_tb_resize_root_table_list(void)
 
        if (acpi_gbl_root_table_list.tables) {
                ACPI_MEMCPY(tables, acpi_gbl_root_table_list.tables,
-                           (acpi_size) acpi_gbl_root_table_list.
-                           max_table_count * sizeof(struct acpi_table_desc));
+                           (acpi_size) table_count *
+                           sizeof(struct acpi_table_desc));
 
                if (acpi_gbl_root_table_list.flags & ACPI_ROOT_ORIGIN_ALLOCATED) {
                        ACPI_FREE(acpi_gbl_root_table_list.tables);
@@ -386,9 +392,9 @@ acpi_status acpi_tb_resize_root_table_list(void)
        }
 
        acpi_gbl_root_table_list.tables = tables;
-       acpi_gbl_root_table_list.max_table_count +=
-           ACPI_ROOT_TABLE_SIZE_INCREMENT;
-       acpi_gbl_root_table_list.flags |= (u8)ACPI_ROOT_ORIGIN_ALLOCATED;
+       acpi_gbl_root_table_list.max_table_count =
+           table_count + ACPI_ROOT_TABLE_SIZE_INCREMENT;
+       acpi_gbl_root_table_list.flags |= ACPI_ROOT_ORIGIN_ALLOCATED;
 
        return_ACPI_STATUS(AE_OK);
 }
index 29e51bc013838c5d33cf1df0089331ae3380951b..21101262e47a1a4fd33f7cdf1b4973647571e435 100644 (file)
@@ -159,14 +159,12 @@ acpi_initialize_tables(struct acpi_table_desc * initial_table_array,
  * DESCRIPTION: Reallocate Root Table List into dynamic memory. Copies the
  *              root list from the previously provided scratch area. Should
  *              be called once dynamic memory allocation is available in the
- *              kernel
+ *              kernel.
  *
  ******************************************************************************/
 acpi_status acpi_reallocate_root_table(void)
 {
-       struct acpi_table_desc *tables;
-       acpi_size new_size;
-       acpi_size current_size;
+       acpi_status status;
 
        ACPI_FUNCTION_TRACE(acpi_reallocate_root_table);
 
@@ -178,39 +176,10 @@ acpi_status acpi_reallocate_root_table(void)
                return_ACPI_STATUS(AE_SUPPORT);
        }
 
-       /*
-        * Get the current size of the root table and add the default
-        * increment to create the new table size.
-        */
-       current_size = (acpi_size)
-           acpi_gbl_root_table_list.current_table_count *
-           sizeof(struct acpi_table_desc);
-
-       new_size = current_size +
-           (ACPI_ROOT_TABLE_SIZE_INCREMENT * sizeof(struct acpi_table_desc));
-
-       /* Create new array and copy the old array */
-
-       tables = ACPI_ALLOCATE_ZEROED(new_size);
-       if (!tables) {
-               return_ACPI_STATUS(AE_NO_MEMORY);
-       }
+       acpi_gbl_root_table_list.flags |= ACPI_ROOT_ALLOW_RESIZE;
 
-       ACPI_MEMCPY(tables, acpi_gbl_root_table_list.tables, current_size);
-
-       /*
-        * Update the root table descriptor. The new size will be the current
-        * number of tables plus the increment, independent of the reserved
-        * size of the original table list.
-        */
-       acpi_gbl_root_table_list.tables = tables;
-       acpi_gbl_root_table_list.max_table_count =
-           acpi_gbl_root_table_list.current_table_count +
-           ACPI_ROOT_TABLE_SIZE_INCREMENT;
-       acpi_gbl_root_table_list.flags =
-           ACPI_ROOT_ORIGIN_ALLOCATED | ACPI_ROOT_ALLOW_RESIZE;
-
-       return_ACPI_STATUS(AE_OK);
+       status = acpi_tb_resize_root_table_list();
+       return_ACPI_STATUS(status);
 }
 
 /*******************************************************************************