Besides the phys addr of the acpi tables, it will be very convenient if
we also have the signature of each table in acpi_gbl_root_table_list at
early time. We can find SRAT easily by comparing the signature.

This patch alse record signature and some other info in
acpi_gbl_root_table_list at early time.

Signed-off-by: Tang Chen <tangc...@cn.fujitsu.com>
Reviewed-by: Zhang Yanfei <zhangyan...@cn.fujitsu.com>
---
 drivers/acpi/acpica/tbutils.c |   22 ++++++++++++++++++++++
 1 files changed, 22 insertions(+), 0 deletions(-)

diff --git a/drivers/acpi/acpica/tbutils.c b/drivers/acpi/acpica/tbutils.c
index 9d68ffc..5d31887 100644
--- a/drivers/acpi/acpica/tbutils.c
+++ b/drivers/acpi/acpica/tbutils.c
@@ -627,6 +627,7 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_address)
        u32 i;
        u32 table_count;
        struct acpi_table_header *table;
+       struct acpi_table_desc *table_desc;
        acpi_physical_address address;
        acpi_physical_address uninitialized_var(rsdt_address);
        u32 length;
@@ -766,6 +767,27 @@ acpi_tb_parse_root_table(acpi_physical_address 
rsdp_address)
         */
        acpi_os_unmap_memory(table, length);
 
+       /*
+        * Also initialize the table entries here, so that later we can use them
+        * to find SRAT at very eraly time to reserve hotpluggable memory.
+        */
+       for (i = 2; i < acpi_gbl_root_table_list.current_table_count; i++) {
+               table = acpi_os_map_memory(
+                               acpi_gbl_root_table_list.tables[i].address,
+                               sizeof(struct acpi_table_header));
+               if (!table)
+                       return_ACPI_STATUS(AE_NO_MEMORY);
+
+               table_desc = &acpi_gbl_root_table_list.tables[i];
+
+               table_desc->pointer = NULL;
+               table_desc->length = table->length;
+               table_desc->flags = ACPI_TABLE_ORIGIN_MAPPED;
+               ACPI_MOVE_32_TO_32(table_desc->signature.ascii, 
table->signature);
+
+               acpi_os_unmap_memory(table, sizeof(struct acpi_table_header));
+       }
+
        return_ACPI_STATUS(AE_OK);
 }
 
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to