[PATCH v2 07/18] x86, acpi: Also initialize signature and length when parsing root table.

Tang Chen
2013-08-01T07:11:38Z

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 <tangchen@cn.fujitsu.com>
Reviewed-by: Zhang Yanfei <zhangyanfei@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