From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from westrelay02.boulder.ibm.com (westrelay02.boulder.ibm.com [9.17.195.11]) by e34.co.us.ibm.com (8.12.10/8.12.9) with ESMTP id j1OHTYMN032252 for ; Thu, 24 Feb 2005 12:29:34 -0500 Received: from d03av02.boulder.ibm.com (d03av02.boulder.ibm.com [9.17.195.168]) by westrelay02.boulder.ibm.com (8.12.10/NCO/VER6.6) with ESMTP id j1OHTXov133982 for ; Thu, 24 Feb 2005 10:29:33 -0700 Received: from d03av02.boulder.ibm.com (loopback [127.0.0.1]) by d03av02.boulder.ibm.com (8.12.11/8.12.11) with ESMTP id j1OHTXKO031616 for ; Thu, 24 Feb 2005 10:29:33 -0700 Subject: [PATCH 5/5] SRAT cleanup: make calculations and indenting level more sane From: Dave Hansen Date: Thu, 24 Feb 2005 09:29:31 -0800 Message-Id: Sender: owner-linux-mm@kvack.org Return-Path: To: linux-mm@kvack.org Cc: colpatch@us.ibm.com, kravetz@us.ibm.com, mbligh@aracnet.com, anton@samba.org, Dave Hansen , ygoto@us.fujitsu.com, apw@shadowen.org, kmannth@us.ibm.com List-ID: Using the assumption that all addresses in the SRAT are ascending, the calculations can get a bit simpler, and remove the "been_here_before" variable. This also breaks that calculation out into its own function, which further simplifies the look of the code. Signed-off-by: Dave Hansen --- sparse-dave/arch/i386/kernel/srat.c | 61 ++++++++++++++++++------------------ 1 files changed, 32 insertions(+), 29 deletions(-) diff -puN arch/i386/kernel/srat.c~A3.3-srat-cleanup arch/i386/kernel/srat.c --- sparse/arch/i386/kernel/srat.c~A3.3-srat-cleanup 2005-02-24 08:56:41.000000000 -0800 +++ sparse-dave/arch/i386/kernel/srat.c 2005-02-24 08:56:41.000000000 -0800 @@ -181,6 +181,35 @@ static __init void chunk_to_zones(unsign } } +/* + * The SRAT table always lists ascending addresses, so can always + * assume that the first "start" address that you see is the real + * start of the node, and that the current "end" address is after + * the previous one. + */ +static __init void node_read_chunk(int nid, struct node_memory_chunk_s *memory_chunk) +{ + /* + * Only add present memory as told by the e820. + * There is no guarantee from the SRAT that the memory it + * enumerates is present at boot time because it represents + * *possible* memory hotplug areas the same as normal RAM. + */ + if (memory_chunk->start_pfn >= max_pfn) { + printk (KERN_INFO "Ignoring SRAT pfns: 0x%08lx -> %08lx\n", + memory_chunk->start_pfn, memory_chunk->end_pfn); + return; + } + if (memory_chunk->nid != nid) + return; + + /* is the node currently empty? */ + if (!node_start_pfn[nid] && !node_end_pfn[nid]) + node_start_pfn[nid] = memory_chunk->start_pfn; + + node_end_pfn[nid] = memory_chunk->end_pfn; +} + /* Parse the ACPI Static Resource Affinity Table */ static int __init acpi20_parse_srat(struct acpi_table_srat *sratp) { @@ -267,35 +296,9 @@ static int __init acpi20_parse_srat(stru node_memory_chunk[j].end_pfn); } - /*calculate node_start_pfn/node_end_pfn arrays*/ - for_each_online_node(nid) { - int been_here_before = 0; - - for (j = 0; j < num_memory_chunks; j++){ - /* - * Only add present memroy to node_end/start_pfn - * There is no guarantee from the srat that the memory - * is present at boot time. - */ - if (node_memory_chunk[j].start_pfn >= max_pfn) { - printk (KERN_INFO "Ignoring chunk of memory reported in the SRAT (could be hot-add zone?)\n"); - printk (KERN_INFO "chunk is reported from pfn %04x to %04x\n", - node_memory_chunk[j].start_pfn, node_memory_chunk[j].end_pfn); - continue; - } - if (node_memory_chunk[j].nid == nid) { - if (been_here_before == 0) { - node_start_pfn[nid] = node_memory_chunk[j].start_pfn; - node_end_pfn[nid] = node_memory_chunk[j].end_pfn; - been_here_before = 1; - } else { /* We've found another chunk of memory for the node */ - if (node_start_pfn[nid] < node_memory_chunk[j].start_pfn) { - node_end_pfn[nid] = node_memory_chunk[j].end_pfn; - } - } - } - } - } + for_each_online_node(nid) + for (j = 0; j < num_memory_chunks; j++) + node_read_chunk(nid, &node_memory_chunk[j]); for_each_online_node(nid) { unsigned long start = node_start_pfn[nid]; unsigned long end = node_end_pfn[nid]; _ -- 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: aart@kvack.org