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
next prev 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: linkBe 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.