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 14/21] x86, acpi, numa: Reserve hotpluggable memory at early time. Date: Fri, 19 Jul 2013 15:59:27 +0800 [thread overview] Message-ID: <1374220774-29974-15-git-send-email-tangchen@cn.fujitsu.com> (raw) In-Reply-To: <1374220774-29974-1-git-send-email-tangchen@cn.fujitsu.com> As mentioned before, in order to prevent the kernel to use hotpluggable memory, we want to reserve hotpluggable memory in memblock at early time. As the previous two patches are able to find SRAT in initrd file or fireware, this patch does the following: 1. Introduces acpi_reserve_hotpluggable_memory() to parse the memory affinities in SRAT, find out which memory is hotpluggable. 2. Reserve it in memblock with MEMBLK_HOTPLUGGABLE flag. 3. Since at such an early time, nid has not been mapped, we also reserve the PXM of the hotpluggable memory range in memblock. Later we will modify it to nid. In order to setup movable node (a node who has only ZONE_MOVABLE), it will be very convenient if we can tell which memory range in memblock is hotpluggable, and belongs to which node. We will see this convenience in later patches. So we don't want memblock to merge memory ranges in different nodes together. PXM is the Proximity num provided by SRAT, used to map nid. At such an early time, we don't have nid, so we reserve PXM in memblock to prevent merging of different nodes' memory. Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com> --- drivers/acpi/osl.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++ include/linux/acpi.h | 1 + mm/memory_hotplug.c | 14 ++++++++++- 3 files changed, 79 insertions(+), 1 deletions(-) diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index a2e4596..02a39e2 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c @@ -772,6 +772,71 @@ phys_addr_t __init early_acpi_firmware_srat() return table_desc.address; } + +/* + * acpi_reserve_hotpluggable_memory - Reserve hotpluggable memory in memblock. + * @srat_vaddr: The virtual address of SRAT. + * + * This function parse memory affinities in SRAT, find out which memory is + * hotpluggable, and reserve it in memblock with MEMBLK_HOTPLUGGABLE flag. + * + * NOTE: At such an early time, we don't have nid yet. So use PXM instead of + * nid when reserving in memblock, and modify it when nids are mapped. + */ +void __init acpi_reserve_hotpluggable_memory(void *srat_vaddr) +{ + struct acpi_table_header *table_header; + struct acpi_subtable_header *entry; + struct acpi_srat_mem_affinity *ma; + unsigned long table_end; + unsigned int count = 0; + u32 pxm; + u64 base_address, length; + + table_header = (struct acpi_table_header *)srat_vaddr; + table_end = (unsigned long)table_header + table_header->length; + + entry = (struct acpi_subtable_header *) + ((unsigned long)table_header + sizeof(struct acpi_table_srat)); + + while (((unsigned long)entry) + sizeof(struct acpi_subtable_header) < + table_end) { + if (entry->length == 0) + break; + + if (entry->type != ACPI_SRAT_TYPE_MEMORY_AFFINITY || + count++ >= NR_NODE_MEMBLKS) + goto next; + + ma = (struct acpi_srat_mem_affinity *)entry; + + if (!(ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE)) + goto next; + + base_address = ma->base_address; + length = ma->length; + pxm = ma->proximity_domain; + + /* + * In such an early time, we don't have nid. We specify pxm + * instead of MAX_NUMNODES to prevent memblock merging regions + * on different nodes. And later modify pxm to nid when nid is + * mapped so that we can arrange ZONE_MOVABLE on different + * nodes. + */ + memblock_reserve_hotpluggable(base_address, length, pxm); + +next: + entry = (struct acpi_subtable_header *) + ((unsigned long)entry + entry->length); + } + + if (count > NR_NODE_MEMBLKS) { + pr_warning("[%4.4s:0x%02x] ignored %i entries of %i found\n", + ACPI_SIG_SRAT, ACPI_SRAT_TYPE_MEMORY_AFFINITY, + count - NR_NODE_MEMBLKS, count); + } +} #endif /* CONFIG_ACPI_NUMA */ static void acpi_table_taint(struct acpi_table_header *table) diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 6fa7543..21d57a8 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h @@ -99,6 +99,7 @@ static inline phys_addr_t early_acpi_override_srat(void) #ifdef CONFIG_ACPI_NUMA phys_addr_t early_acpi_firmware_srat(void); +void acpi_reserve_hotpluggable_memory(void *srat_vaddr); #endif /* CONFIG_ACPI_NUMA */ char * __acpi_map_table (unsigned long phys_addr, unsigned long size); diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 15b11d3..ba3efe9 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -104,7 +104,10 @@ static void release_memory_resource(struct resource *res) */ void __init reserve_hotpluggable_memory(void) { + void *srat_vaddr; phys_addr_t srat_paddr; + u32 length; + struct acpi_table_header *srat_header; /* Try to find out if SRAT is overrided */ srat_paddr = early_acpi_override_srat(); @@ -115,7 +118,16 @@ void __init reserve_hotpluggable_memory(void) return; } - /* Will reserve hotpluggable memory here */ + /* Map the whole SRAT */ + srat_header = early_ioremap(srat_paddr, + sizeof(struct acpi_table_header)); + length = srat_header->length; + early_iounmap(srat_header, sizeof(struct acpi_table_header)); + + /* Reserve hotpluggable memory */ + srat_vaddr = early_ioremap(srat_paddr, length); + acpi_reserve_hotpluggable_memory(srat_vaddr); + early_iounmap(srat_vaddr, length); } #endif /* CONFIG_ACPI_NUMA */ -- 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 14/21] x86, acpi, numa: Reserve hotpluggable memory at early time. Date: Fri, 19 Jul 2013 15:59:27 +0800 [thread overview] Message-ID: <1374220774-29974-15-git-send-email-tangchen@cn.fujitsu.com> (raw) In-Reply-To: <1374220774-29974-1-git-send-email-tangchen@cn.fujitsu.com> As mentioned before, in order to prevent the kernel to use hotpluggable memory, we want to reserve hotpluggable memory in memblock at early time. As the previous two patches are able to find SRAT in initrd file or fireware, this patch does the following: 1. Introduces acpi_reserve_hotpluggable_memory() to parse the memory affinities in SRAT, find out which memory is hotpluggable. 2. Reserve it in memblock with MEMBLK_HOTPLUGGABLE flag. 3. Since at such an early time, nid has not been mapped, we also reserve the PXM of the hotpluggable memory range in memblock. Later we will modify it to nid. In order to setup movable node (a node who has only ZONE_MOVABLE), it will be very convenient if we can tell which memory range in memblock is hotpluggable, and belongs to which node. We will see this convenience in later patches. So we don't want memblock to merge memory ranges in different nodes together. PXM is the Proximity num provided by SRAT, used to map nid. At such an early time, we don't have nid, so we reserve PXM in memblock to prevent merging of different nodes' memory. Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com> --- drivers/acpi/osl.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++ include/linux/acpi.h | 1 + mm/memory_hotplug.c | 14 ++++++++++- 3 files changed, 79 insertions(+), 1 deletions(-) diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index a2e4596..02a39e2 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c @@ -772,6 +772,71 @@ phys_addr_t __init early_acpi_firmware_srat() return table_desc.address; } + +/* + * acpi_reserve_hotpluggable_memory - Reserve hotpluggable memory in memblock. + * @srat_vaddr: The virtual address of SRAT. + * + * This function parse memory affinities in SRAT, find out which memory is + * hotpluggable, and reserve it in memblock with MEMBLK_HOTPLUGGABLE flag. + * + * NOTE: At such an early time, we don't have nid yet. So use PXM instead of + * nid when reserving in memblock, and modify it when nids are mapped. + */ +void __init acpi_reserve_hotpluggable_memory(void *srat_vaddr) +{ + struct acpi_table_header *table_header; + struct acpi_subtable_header *entry; + struct acpi_srat_mem_affinity *ma; + unsigned long table_end; + unsigned int count = 0; + u32 pxm; + u64 base_address, length; + + table_header = (struct acpi_table_header *)srat_vaddr; + table_end = (unsigned long)table_header + table_header->length; + + entry = (struct acpi_subtable_header *) + ((unsigned long)table_header + sizeof(struct acpi_table_srat)); + + while (((unsigned long)entry) + sizeof(struct acpi_subtable_header) < + table_end) { + if (entry->length == 0) + break; + + if (entry->type != ACPI_SRAT_TYPE_MEMORY_AFFINITY || + count++ >= NR_NODE_MEMBLKS) + goto next; + + ma = (struct acpi_srat_mem_affinity *)entry; + + if (!(ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE)) + goto next; + + base_address = ma->base_address; + length = ma->length; + pxm = ma->proximity_domain; + + /* + * In such an early time, we don't have nid. We specify pxm + * instead of MAX_NUMNODES to prevent memblock merging regions + * on different nodes. And later modify pxm to nid when nid is + * mapped so that we can arrange ZONE_MOVABLE on different + * nodes. + */ + memblock_reserve_hotpluggable(base_address, length, pxm); + +next: + entry = (struct acpi_subtable_header *) + ((unsigned long)entry + entry->length); + } + + if (count > NR_NODE_MEMBLKS) { + pr_warning("[%4.4s:0x%02x] ignored %i entries of %i found\n", + ACPI_SIG_SRAT, ACPI_SRAT_TYPE_MEMORY_AFFINITY, + count - NR_NODE_MEMBLKS, count); + } +} #endif /* CONFIG_ACPI_NUMA */ static void acpi_table_taint(struct acpi_table_header *table) diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 6fa7543..21d57a8 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h @@ -99,6 +99,7 @@ static inline phys_addr_t early_acpi_override_srat(void) #ifdef CONFIG_ACPI_NUMA phys_addr_t early_acpi_firmware_srat(void); +void acpi_reserve_hotpluggable_memory(void *srat_vaddr); #endif /* CONFIG_ACPI_NUMA */ char * __acpi_map_table (unsigned long phys_addr, unsigned long size); diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 15b11d3..ba3efe9 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -104,7 +104,10 @@ static void release_memory_resource(struct resource *res) */ void __init reserve_hotpluggable_memory(void) { + void *srat_vaddr; phys_addr_t srat_paddr; + u32 length; + struct acpi_table_header *srat_header; /* Try to find out if SRAT is overrided */ srat_paddr = early_acpi_override_srat(); @@ -115,7 +118,16 @@ void __init reserve_hotpluggable_memory(void) return; } - /* Will reserve hotpluggable memory here */ + /* Map the whole SRAT */ + srat_header = early_ioremap(srat_paddr, + sizeof(struct acpi_table_header)); + length = srat_header->length; + early_iounmap(srat_header, sizeof(struct acpi_table_header)); + + /* Reserve hotpluggable memory */ + srat_vaddr = early_ioremap(srat_paddr, length); + acpi_reserve_hotpluggable_memory(srat_vaddr); + early_iounmap(srat_vaddr, length); } #endif /* CONFIG_ACPI_NUMA */ -- 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 ` [PATCH 06/21] x86, acpi: Split acpi_boot_table_init() into two parts Tang Chen 2013-07-19 7:59 ` 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 ` Tang Chen [this message] 2013-07-19 7:59 ` [PATCH 14/21] x86, acpi, numa: Reserve hotpluggable memory at early time 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-15-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.