Re: [RFC][PATCH 7/7] x86_64 code for the activemem map

From: Hariprasad Nellitheertha
Date: Thu Mar 24 2005 - 01:07:47 EST


Regards, Hari
---

This patch contains the x86_64 specific code to generate
the /proc/activemem view.
---

Signed-off-by: Hariprasad Nellitheertha <hari@xxxxxxxxxx>
---

linux-2.6.12-rc1-hari/arch/x86_64/kernel/e820.c | 37 ++++++++++++++++++++++++
1 files changed, 37 insertions(+)

diff -puN arch/x86_64/kernel/e820.c~activemem-x8664 arch/x86_64/kernel/e820.c
--- linux-2.6.12-rc1/arch/x86_64/kernel/e820.c~activemem-x8664 2005-03-23 17:48:25.000000000 +0530
+++ linux-2.6.12-rc1-hari/arch/x86_64/kernel/e820.c 2005-03-23 17:48:25.000000000 +0530
@@ -226,6 +226,42 @@ static void __init e820_reserve_physmem_
}
}

+static void __init e820_reserve_activemem_resources(void)
+{
+ int i;
+ struct resource *res, *code_resource_copy, *data_resource_copy;
+#ifdef CONFIG_KEXEC
+ struct resource *crashk_res_copy;
+
+ crashk_res_copy = alloc_bootmem_low(sizeof(struct resource));
+ memcpy(crashk_res_copy, &crashk_res, sizeof(struct resource));
+#endif
+
+ code_resource_copy = alloc_bootmem_low(2*sizeof(struct resource));
+ data_resource_copy = code_resource_copy + sizeof(struct resource);
+ memcpy(code_resource_copy, &code_resource, sizeof(struct resource));
+ memcpy(data_resource_copy, &data_resource, sizeof(struct resource));
+
+ for (i = 0; i < e820.nr_map; i++) {
+ res = alloc_e820_resource(&activemem_resource, i);
+ if (e820.map[i].type == E820_RAM) {
+ request_resource(res, code_resource_copy);
+ request_resource(res, data_resource_copy);
+#ifdef CONFIG_KEXEC
+ request_resource(res, crashk_res_copy);
+#endif
+ }
+ /* If the system has booted with less memory, reflect
+ * only those entries
+ */
+ if ((e820.map[i].addr + e820.map[i].size) > (end_user_pfn << PAGE_SHIFT)) {
+ /* Trim the last entry to reflect the actual pfn allowed */
+ res->end = (end_user_pfn << PAGE_SHIFT) - 1;
+ break;
+ }
+ }
+}
+
/*
* Mark e820 reserved areas as busy for the resource manager.
*/
@@ -233,6 +269,7 @@ void __init e820_reserve_resources(void)
{
e820_reserve_iomem_resources();
e820_reserve_physmem_resources();
+ e820_reserve_activemem_resources();
}

/*
_