lkml.org 
[lkml]   [2008]   [Jun]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Subject[PATCH 2/5] x86_64 boot: reserve highmem pages via reserve_early
From
Date
This patch makes early reserved highmem pages become reserved
pages. This can be used for highmem pages allocated by bootloader such
as EFI memory map, linked list of setup_data, etc.

Signed-off-by: Huang Ying <ying.huang@intel.com>

---
arch/x86/kernel/e820.c | 11 +++++++++++
arch/x86/mm/init_32.c | 3 ++-
include/asm-x86/e820.h | 1 +
3 files changed, 14 insertions(+), 1 deletion(-)

--- a/arch/x86/kernel/e820.c
+++ b/arch/x86/kernel/e820.c
@@ -612,6 +612,17 @@ void __init free_early(u64 start, u64 en
early_res[j - 1].end = 0;
}

+int __init page_is_reserved_early(unsigned long pagenr)
+{
+ u64 start = (u64)pagenr << PAGE_SHIFT;
+ int i;
+ struct early_res *r;
+
+ i = find_overlapped_early(start, start + PAGE_SIZE);
+ r = &early_res[i];
+ return (i < MAX_EARLY_RES && r->end);
+}
+
void __init early_res_to_bootmem(u64 start, u64 end)
{
int i;
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -294,7 +294,8 @@ static void __init permanent_kmaps_init(

void __init add_one_highpage_init(struct page *page, int pfn, int bad_ppro)
{
- if (page_is_ram(pfn) && !(bad_ppro && page_kills_ppro(pfn))) {
+ if (page_is_ram(pfn) && !(bad_ppro && page_kills_ppro(pfn)) &&
+ !page_is_reserved_early(pfn)) {
ClearPageReserved(page);
init_page_count(page);
__free_page(page);
--- a/include/asm-x86/e820.h
+++ b/include/asm-x86/e820.h
@@ -83,6 +83,7 @@ extern u64 find_e820_area(u64 start, u64
extern u64 find_e820_area_size(u64 start, u64 *sizep, u64 align);
extern void reserve_early(u64 start, u64 end, char *name);
extern void free_early(u64 start, u64 end);
+extern int page_is_reserved_early(unsigned long pagenr);
extern void early_res_to_bootmem(u64 start, u64 end);

#endif /* __ASSEMBLY__ */


\
 
 \ /
  Last update: 2008-06-02 08:27    [W:0.030 / U:0.828 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site