All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tang Chen <tangchen@cn.fujitsu.com>
To: tglx@linutronix.de, mingo@elte.hu, hpa@zytor.com,
	akpm@linux-foundation.org, tj@kernel.org, trenn@suse.de,
	yinghai@kernel.org, jiang.liu@huawei.com, wency@cn.fujitsu.com,
	laijs@cn.fujitsu.com, isimatu.yasuaki@jp.fujitsu.com,
	izumi.taku@jp.fujitsu.com, mgorman@suse.de, minchan@kernel.org,
	mina86@mina86.com, gong.chen@linux.intel.com,
	vasilis.liaskovitis@profitbricks.com, lwoodman@redhat.com,
	riel@redhat.com, jweiner@redhat.com, prarit@redhat.com,
	zhangyanfei@cn.fujitsu.com, yanghy@cn.fujitsu.com
Cc: x86@kernel.org, linux-doc@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	linux-acpi@vger.kernel.org
Subject: [PATCH 06/21] x86, acpi: Split acpi_boot_table_init() into two parts.
Date: Fri, 19 Jul 2013 15:59:19 +0800	[thread overview]
Message-ID: <1374220774-29974-7-git-send-email-tangchen@cn.fujitsu.com> (raw)
In-Reply-To: <1374220774-29974-1-git-send-email-tangchen@cn.fujitsu.com>

In ACPI, SRAT(System Resource Affinity Table) contains NUMA info.
The memory affinities in SRAT record every memory range in the
system, and also, flags specifying if the memory range is
hotpluggable.
(Please refer to ACPI spec 5.0 5.2.16)

memblock starts to work at very early time, and SRAT has not been
parsed. So we don't know which memory is hotpluggable. In order
to use memblock to reserve hotpluggable memory, we need to obtain
SRAT memory affinity info earlier.

In the current acpi_boot_table_init(), it does the following:
1. Parse RSDT, so that we can find all the tables.
2. Initialize acpi_gbl_root_table_list, an array of acpi table
   descriptorsused to store each table's address, length, signature,
   and so on.
3. Check if there is any table in initrd intending to override
   tables from firmware. If so, override the firmware tables.
4. Initialize all the data in acpi_gbl_root_table_list.

In order to parse SRAT at early time, we need to do similar job as
step 1 and 2 above earlier to obtain SRAT. It will be very convenient
if we have acpi_gbl_root_table_list initialized. We can use address
and signature to find SRAT.

Since step 1 and 2 allocates no memory, it is OK to do these two
steps earlier.

But step 3 will check acpi initrd table override, not just SRAT,
but also all the other tables. So it is better to keep it untouched.

This patch splits acpi_boot_table_init() into two steps:
1. Parse RSDT, which cannot be overrided, and initialize
   acpi_gbl_root_table_list. (step 1 + 2 above)
2. Install all ACPI tables into acpi_gbl_root_table_list.
   (step 3 + 4 above)

In later patches, we will do step 1 + 2 earlier.

Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
---
 drivers/acpi/acpica/tbutils.c |   25 ++++++++++++++++++++++---
 drivers/acpi/tables.c         |    2 ++
 include/acpi/acpixf.h         |    2 ++
 3 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/drivers/acpi/acpica/tbutils.c b/drivers/acpi/acpica/tbutils.c
index ce3d5db..9d68ffc 100644
--- a/drivers/acpi/acpica/tbutils.c
+++ b/drivers/acpi/acpica/tbutils.c
@@ -766,9 +766,30 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_address)
 	 */
 	acpi_os_unmap_memory(table, length);
 
+	return_ACPI_STATUS(AE_OK);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_tb_install_root_table
+ *
+ * DESCRIPTION: This function installs all the ACPI tables in RSDT into
+ *              acpi_gbl_root_table_list.
+ *
+ ******************************************************************************/
+
+void __init
+acpi_tb_install_root_table()
+{
+	int i;
+
 	/*
 	 * Complete the initialization of the root table array by examining
-	 * the header of each table
+	 * the header of each table.
+	 *
+	 * First two entries in the table array are reserved for the DSDT
+	 * and FACS, which are not actually present in the RSDT/XSDT - they
+	 * come from the FADT.
 	 */
 	for (i = 2; i < acpi_gbl_root_table_list.current_table_count; i++) {
 		acpi_tb_install_table(acpi_gbl_root_table_list.tables[i].
@@ -782,6 +803,4 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_address)
 			acpi_tb_parse_fadt(i);
 		}
 	}
-
-	return_ACPI_STATUS(AE_OK);
 }
diff --git a/drivers/acpi/tables.c b/drivers/acpi/tables.c
index d67a1fe..8860e79 100644
--- a/drivers/acpi/tables.c
+++ b/drivers/acpi/tables.c
@@ -353,6 +353,8 @@ int __init acpi_table_init(void)
 	if (ACPI_FAILURE(status))
 		return 1;
 
+	acpi_tb_install_root_table();
+
 	check_multiple_madt();
 	return 0;
 }
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h
index 454881e..f5549b5 100644
--- a/include/acpi/acpixf.h
+++ b/include/acpi/acpixf.h
@@ -116,6 +116,8 @@ acpi_status
 acpi_initialize_tables(struct acpi_table_desc *initial_storage,
 		       u32 initial_table_count, u8 allow_resize);
 
+void acpi_tb_install_root_table(void);
+
 acpi_status __init acpi_initialize_subsystem(void);
 
 acpi_status acpi_enable_subsystem(u32 flags);
-- 
1.7.1

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Tang Chen <tangchen@cn.fujitsu.com>
To: tglx@linutronix.de, mingo@elte.hu, hpa@zytor.com,
	akpm@linux-foundation.org, tj@kernel.org, trenn@suse.de,
	yinghai@kernel.org, jiang.liu@huawei.com, wency@cn.fujitsu.com,
	laijs@cn.fujitsu.com, isimatu.yasuaki@jp.fujitsu.com,
	izumi.taku@jp.fujitsu.com, mgorman@suse.de, minchan@kernel.org,
	mina86@mina86.com, gong.chen@linux.intel.com,
	vasilis.liaskovitis@profitbricks.com, lwoodman@redhat.com,
	riel@redhat.com, jweiner@redhat.com, prarit@redhat.com,
	zhangyanfei@cn.fujitsu.com, yanghy@cn.fujitsu.com
Cc: x86@kernel.org, linux-doc@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	linux-acpi@vger.kernel.org
Subject: [PATCH 06/21] x86, acpi: Split acpi_boot_table_init() into two parts.
Date: Fri, 19 Jul 2013 15:59:19 +0800	[thread overview]
Message-ID: <1374220774-29974-7-git-send-email-tangchen@cn.fujitsu.com> (raw)
In-Reply-To: <1374220774-29974-1-git-send-email-tangchen@cn.fujitsu.com>

In ACPI, SRAT(System Resource Affinity Table) contains NUMA info.
The memory affinities in SRAT record every memory range in the
system, and also, flags specifying if the memory range is
hotpluggable.
(Please refer to ACPI spec 5.0 5.2.16)

memblock starts to work at very early time, and SRAT has not been
parsed. So we don't know which memory is hotpluggable. In order
to use memblock to reserve hotpluggable memory, we need to obtain
SRAT memory affinity info earlier.

In the current acpi_boot_table_init(), it does the following:
1. Parse RSDT, so that we can find all the tables.
2. Initialize acpi_gbl_root_table_list, an array of acpi table
   descriptorsused to store each table's address, length, signature,
   and so on.
3. Check if there is any table in initrd intending to override
   tables from firmware. If so, override the firmware tables.
4. Initialize all the data in acpi_gbl_root_table_list.

In order to parse SRAT at early time, we need to do similar job as
step 1 and 2 above earlier to obtain SRAT. It will be very convenient
if we have acpi_gbl_root_table_list initialized. We can use address
and signature to find SRAT.

Since step 1 and 2 allocates no memory, it is OK to do these two
steps earlier.

But step 3 will check acpi initrd table override, not just SRAT,
but also all the other tables. So it is better to keep it untouched.

This patch splits acpi_boot_table_init() into two steps:
1. Parse RSDT, which cannot be overrided, and initialize
   acpi_gbl_root_table_list. (step 1 + 2 above)
2. Install all ACPI tables into acpi_gbl_root_table_list.
   (step 3 + 4 above)

In later patches, we will do step 1 + 2 earlier.

Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
---
 drivers/acpi/acpica/tbutils.c |   25 ++++++++++++++++++++++---
 drivers/acpi/tables.c         |    2 ++
 include/acpi/acpixf.h         |    2 ++
 3 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/drivers/acpi/acpica/tbutils.c b/drivers/acpi/acpica/tbutils.c
index ce3d5db..9d68ffc 100644
--- a/drivers/acpi/acpica/tbutils.c
+++ b/drivers/acpi/acpica/tbutils.c
@@ -766,9 +766,30 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_address)
 	 */
 	acpi_os_unmap_memory(table, length);
 
+	return_ACPI_STATUS(AE_OK);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_tb_install_root_table
+ *
+ * DESCRIPTION: This function installs all the ACPI tables in RSDT into
+ *              acpi_gbl_root_table_list.
+ *
+ ******************************************************************************/
+
+void __init
+acpi_tb_install_root_table()
+{
+	int i;
+
 	/*
 	 * Complete the initialization of the root table array by examining
-	 * the header of each table
+	 * the header of each table.
+	 *
+	 * First two entries in the table array are reserved for the DSDT
+	 * and FACS, which are not actually present in the RSDT/XSDT - they
+	 * come from the FADT.
 	 */
 	for (i = 2; i < acpi_gbl_root_table_list.current_table_count; i++) {
 		acpi_tb_install_table(acpi_gbl_root_table_list.tables[i].
@@ -782,6 +803,4 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_address)
 			acpi_tb_parse_fadt(i);
 		}
 	}
-
-	return_ACPI_STATUS(AE_OK);
 }
diff --git a/drivers/acpi/tables.c b/drivers/acpi/tables.c
index d67a1fe..8860e79 100644
--- a/drivers/acpi/tables.c
+++ b/drivers/acpi/tables.c
@@ -353,6 +353,8 @@ int __init acpi_table_init(void)
 	if (ACPI_FAILURE(status))
 		return 1;
 
+	acpi_tb_install_root_table();
+
 	check_multiple_madt();
 	return 0;
 }
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h
index 454881e..f5549b5 100644
--- a/include/acpi/acpixf.h
+++ b/include/acpi/acpixf.h
@@ -116,6 +116,8 @@ acpi_status
 acpi_initialize_tables(struct acpi_table_desc *initial_storage,
 		       u32 initial_table_count, u8 allow_resize);
 
+void acpi_tb_install_root_table(void);
+
 acpi_status __init acpi_initialize_subsystem(void);
 
 acpi_status acpi_enable_subsystem(u32 flags);
-- 
1.7.1


  parent reply	other threads:[~2013-07-19  7:59 UTC|newest]

Thread overview: 152+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-19  7:59 [PATCH 00/21] Arrange hotpluggable memory as ZONE_MOVABLE Tang Chen
2013-07-19  7:59 ` Tang Chen
2013-07-19  7:59 ` [PATCH 01/21] acpi: Print Hot-Pluggable Field in SRAT Tang Chen
2013-07-19  7:59   ` Tang Chen
2013-07-23 18:48   ` Tejun Heo
2013-07-23 18:48     ` Tejun Heo
2013-07-23 19:15     ` Joe Perches
2013-07-23 19:15       ` Joe Perches
2013-07-23 19:20       ` Tejun Heo
2013-07-23 19:20         ` Tejun Heo
2013-07-23 19:26         ` Joe Perches
2013-07-23 19:26           ` Joe Perches
2013-07-24  1:46     ` Tang Chen
2013-07-24  1:46       ` Tang Chen
2013-07-19  7:59 ` [PATCH 02/21] memblock, numa: Introduce flag into memblock Tang Chen
2013-07-19  7:59   ` Tang Chen
2013-07-23 19:09   ` Tejun Heo
2013-07-23 19:09     ` Tejun Heo
2013-07-24  2:53     ` Tang Chen
2013-07-24  2:53       ` Tang Chen
2013-07-24 15:54       ` Tejun Heo
2013-07-24 15:54         ` Tejun Heo
2013-07-25  6:42         ` Tang Chen
2013-07-25  6:42           ` Tang Chen
2013-07-19  7:59 ` [PATCH 03/21] x86, acpi, numa, mem-hotplug: Introduce MEMBLK_HOTPLUGGABLE to reserve hotpluggable memory Tang Chen
2013-07-19  7:59   ` Tang Chen
2013-07-23 19:19   ` Tejun Heo
2013-07-23 19:19     ` Tejun Heo
2013-07-24  2:55     ` Tang Chen
2013-07-24  2:55       ` Tang Chen
2013-07-19  7:59 ` [PATCH 04/21] acpi: Remove "continue" in macro INVALID_TABLE() Tang Chen
2013-07-19  7:59   ` Tang Chen
2013-07-23 19:15   ` Tejun Heo
2013-07-23 19:15     ` Tejun Heo
2013-07-19  7:59 ` [PATCH 05/21] acpi: Introduce acpi_invalid_table() to check if a table is invalid Tang Chen
2013-07-19  7:59   ` Tang Chen
2013-07-19  7:59 ` Tang Chen [this message]
2013-07-19  7:59   ` [PATCH 06/21] x86, acpi: Split acpi_boot_table_init() into two parts Tang Chen
2013-07-19  7:59 ` [PATCH 07/21] x86, acpi: Initialize ACPI root table list earlier Tang Chen
2013-07-19  7:59   ` Tang Chen
2013-07-19  7:59 ` [PATCH 08/21] x86, acpi: Also initialize signature and length when parsing root table Tang Chen
2013-07-19  7:59   ` Tang Chen
2013-07-23 19:45   ` Tejun Heo
2013-07-23 19:45     ` Tejun Heo
2013-07-25  6:50     ` Tang Chen
2013-07-25  6:50       ` Tang Chen
2013-07-19  7:59 ` [PATCH 09/21] x86: Make get_ramdisk_{image|size}() global Tang Chen
2013-07-19  7:59   ` Tang Chen
2013-07-23 19:56   ` Tejun Heo
2013-07-23 19:56     ` Tejun Heo
2013-07-24  3:12     ` Tang Chen
2013-07-24  3:12       ` Tang Chen
2013-07-19  7:59 ` [PATCH 10/21] earlycpio.c: Fix the confusing comment of find_cpio_data() Tang Chen
2013-07-19  7:59   ` Tang Chen
2013-07-23 20:02   ` Tejun Heo
2013-07-23 20:02     ` Tejun Heo
2013-07-24  3:20     ` Tang Chen
2013-07-24  3:20       ` Tang Chen
2013-07-19  7:59 ` [PATCH 11/21] x86: get pg_data_t's memory from other node Tang Chen
2013-07-19  7:59   ` Tang Chen
2013-07-23 20:09   ` Tejun Heo
2013-07-23 20:09     ` Tejun Heo
2013-07-24  3:52     ` Tang Chen
2013-07-24  3:52       ` Tang Chen
2013-07-24 16:03       ` Tejun Heo
2013-07-24 16:03         ` Tejun Heo
2013-07-19  7:59 ` [PATCH 12/21] x86, acpi: Try to find if SRAT is overrided earlier Tang Chen
2013-07-19  7:59   ` Tang Chen
2013-07-23 20:27   ` Tejun Heo
2013-07-23 20:27     ` Tejun Heo
2013-07-24  6:57     ` Tang Chen
2013-07-24  6:57       ` Tang Chen
2013-07-19  7:59 ` [PATCH 13/21] x86, acpi: Try to find SRAT in firmware earlier Tang Chen
2013-07-19  7:59   ` Tang Chen
2013-07-23 20:49   ` Tejun Heo
2013-07-23 20:49     ` Tejun Heo
2013-07-24 10:12     ` Tang Chen
2013-07-24 10:12       ` Tang Chen
2013-07-24 15:55       ` Tejun Heo
2013-07-24 15:55         ` Tejun Heo
2013-07-23 23:26   ` Cody P Schafer
2013-07-23 23:26     ` Cody P Schafer
2013-07-24 10:16     ` Tang Chen
2013-07-24 10:16       ` Tang Chen
2013-07-19  7:59 ` [PATCH 14/21] x86, acpi, numa: Reserve hotpluggable memory at early time Tang Chen
2013-07-19  7:59   ` Tang Chen
2013-07-23 20:55   ` Tejun Heo
2013-07-23 20:55     ` Tejun Heo
2013-07-23 21:32     ` Tejun Heo
2013-07-23 21:32       ` Tejun Heo
2013-07-25  2:13       ` Tang Chen
2013-07-25  2:13         ` Tang Chen
2013-07-25 15:17         ` Tejun Heo
2013-07-25 15:17           ` Tejun Heo
2013-07-26  3:45           ` Tang Chen
2013-07-26  3:45             ` Tang Chen
2013-07-26 10:26             ` Tejun Heo
2013-07-26 10:26               ` Tejun Heo
2013-07-26 10:27               ` Tejun Heo
2013-07-26 10:27                 ` Tejun Heo
2013-07-29  2:12               ` Tang Chen
2013-07-29  2:12                 ` Tang Chen
2013-07-29 17:10                 ` Tejun Heo
2013-07-29 17:10                   ` Tejun Heo
2013-07-19  7:59 ` [PATCH 15/21] x86, acpi, numa: Don't reserve memory on nodes the kernel resides in Tang Chen
2013-07-19  7:59   ` Tang Chen
2013-07-23 20:59   ` Tejun Heo
2013-07-23 20:59     ` Tejun Heo
2013-07-25  2:34     ` Tang Chen
2013-07-25  2:34       ` Tang Chen
2013-07-19  7:59 ` [PATCH 16/21] x86, memblock, mem-hotplug: Free hotpluggable memory reserved by memblock Tang Chen
2013-07-19  7:59   ` Tang Chen
2013-07-23 21:00   ` Tejun Heo
2013-07-23 21:00     ` Tejun Heo
2013-07-25  2:35     ` Tang Chen
2013-07-25  2:35       ` Tang Chen
2013-07-19  7:59 ` [PATCH 17/21] page_alloc, mem-hotplug: Improve movablecore to {en|dis}able using SRAT Tang Chen
2013-07-19  7:59   ` Tang Chen
2013-07-23 21:04   ` Tejun Heo
2013-07-23 21:04     ` Tejun Heo
2013-07-23 21:11     ` Tejun Heo
2013-07-23 21:11       ` Tejun Heo
2013-07-25  3:50       ` Tang Chen
2013-07-25  3:50         ` Tang Chen
2013-07-25 15:09         ` Tejun Heo
2013-07-25 15:09           ` Tejun Heo
2013-07-26  3:58           ` Tang Chen
2013-07-26  3:58             ` Tang Chen
2013-07-19  7:59 ` [PATCH 18/21] x86, numa: Synchronize nid info in memblock.reserve with numa_meminfo Tang Chen
2013-07-19  7:59   ` Tang Chen
2013-07-23 21:25   ` Tejun Heo
2013-07-23 21:25     ` Tejun Heo
2013-07-25  4:09     ` Tang Chen
2013-07-25  4:09       ` Tang Chen
2013-07-25 15:05       ` Tejun Heo
2013-07-25 15:05         ` Tejun Heo
2013-07-26  4:00         ` Tang Chen
2013-07-26  4:00           ` Tang Chen
2013-07-19  7:59 ` [PATCH 19/21] x86, numa: Save nid when reserve memory into memblock.reserved[] Tang Chen
2013-07-19  7:59   ` Tang Chen
2013-07-19  7:59 ` [PATCH 20/21] x86, numa, acpi, memory-hotplug: Make movablecore=acpi have higher priority Tang Chen
2013-07-19  7:59   ` Tang Chen
2013-07-23 21:21   ` Tejun Heo
2013-07-23 21:21     ` Tejun Heo
2013-07-19  7:59 ` [PATCH 21/21] doc, page_alloc, acpi, mem-hotplug: Add doc for movablecore=acpi boot option Tang Chen
2013-07-19  7:59   ` Tang Chen
2013-07-23 21:21   ` Tejun Heo
2013-07-23 21:21     ` Tejun Heo
2013-07-25  3:53     ` Tang Chen
2013-07-25  3:53       ` Tang Chen
2013-07-22  2:48 ` [PATCH 00/21] Arrange hotpluggable memory as ZONE_MOVABLE Tang Chen
2013-07-22  2:48   ` Tang Chen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1374220774-29974-7-git-send-email-tangchen@cn.fujitsu.com \
    --to=tangchen@cn.fujitsu.com \
    --cc=akpm@linux-foundation.org \
    --cc=gong.chen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=isimatu.yasuaki@jp.fujitsu.com \
    --cc=izumi.taku@jp.fujitsu.com \
    --cc=jiang.liu@huawei.com \
    --cc=jweiner@redhat.com \
    --cc=laijs@cn.fujitsu.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=lwoodman@redhat.com \
    --cc=mgorman@suse.de \
    --cc=mina86@mina86.com \
    --cc=minchan@kernel.org \
    --cc=mingo@elte.hu \
    --cc=prarit@redhat.com \
    --cc=riel@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=tj@kernel.org \
    --cc=trenn@suse.de \
    --cc=vasilis.liaskovitis@profitbricks.com \
    --cc=wency@cn.fujitsu.com \
    --cc=x86@kernel.org \
    --cc=yanghy@cn.fujitsu.com \
    --cc=yinghai@kernel.org \
    --cc=zhangyanfei@cn.fujitsu.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.