lkml.org 
[lkml]   [2008]   [Jan]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH x86] [6/16] Add a new arch_early_alloc() interface for x86-64
Date

This allows to allocate memory really early before bootmem is setup.

And a symbol that can be tested by the preprocessor.

pgtable.h is probably not the best include for it, but also not the worst.

Cc: peterz@infradead.org

Signed-off-by: Andi Kleen <ak@suse.de>

---
arch/x86/kernel/e820_64.c | 14 ++++++++++++++
include/asm-x86/pgtable_64.h | 3 +++
2 files changed, 17 insertions(+)

Index: linux/arch/x86/kernel/e820_64.c
===================================================================
--- linux.orig/arch/x86/kernel/e820_64.c
+++ linux/arch/x86/kernel/e820_64.c
@@ -819,3 +819,17 @@ int __init arch_get_ram_range(int slot,
max_pfn << PAGE_SHIFT) - *addr;
return i + 1;
}
+
+#define EARLY_ALLOC_START (32<<20)
+__init void *arch_early_alloc(unsigned long size)
+{
+ unsigned long p = find_e820_area(EARLY_ALLOC_START, -1UL, size);
+ if (p == -1ULL) {
+ /* Risk filling the DMA zone */
+ p = find_e820_area(EARLY_ALLOC_START, -1UL, size);
+ if (p == -1ULL)
+ panic("arch_early_alloc %lu failed", size);
+ }
+ reserve_early(p, p + size);
+ return __va(p);
+}
Index: linux/include/asm-x86/pgtable_64.h
===================================================================
--- linux.orig/include/asm-x86/pgtable_64.h
+++ linux/include/asm-x86/pgtable_64.h
@@ -436,6 +436,9 @@ pte_t *lookup_address(unsigned long addr
#define kc_offset_to_vaddr(o) \
(((o) & (1UL << (__VIRTUAL_MASK_SHIFT-1))) ? ((o) | (~__VIRTUAL_MASK)) : (o))

+#define ARCH_HAS_EARLY_ALLOC
+extern void *arch_early_alloc(unsigned long size);
+
#define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG
#define __HAVE_ARCH_PTEP_GET_AND_CLEAR
#define __HAVE_ARCH_PTEP_GET_AND_CLEAR_FULL

\
 
 \ /
  Last update: 2008-01-03 16:47    [W:0.254 / U:0.072 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site