From 6bc93d48ff6b85ed7bafe7dbda449ec1c9072f28 Mon Sep 17 00:00:00 2001 From: "Huang, Ying" Date: Fri, 28 Mar 2008 10:49:42 +0800 Subject: [PATCH] --- yaml --- r: 93615 b: refs/heads/master c: 50eae2a7c9862afe263a2003c12f457ecfc9e6a2 h: refs/heads/master i: 93613: 8873e7d7287a875ddf81f9c7aa1ac6c1bcf04c65 93611: b434d90d5da4f365d5d2a4732b4a77e3b0d86198 93607: 5a3d806874cd3672c09b7af6bf3ca5785d36ad89 93599: 4fe989725b4407f4e98aa666085ea8cb529b5317 v: v3 --- [refs] | 2 +- trunk/arch/x86/kernel/e820_64.c | 22 ++++++++++++++++++++++ trunk/arch/x86/mm/pat.c | 31 ------------------------------- trunk/include/asm-x86/e820_64.h | 1 + 4 files changed, 24 insertions(+), 32 deletions(-) diff --git a/[refs] b/[refs] index 5ede8ee396b1..d683d6494e3e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0124cecfc85a6664b1ad5f1d28cf0ab8df66fc42 +refs/heads/master: 50eae2a7c9862afe263a2003c12f457ecfc9e6a2 diff --git a/trunk/arch/x86/kernel/e820_64.c b/trunk/arch/x86/kernel/e820_64.c index cbd42e51cb08..79f0d52fa99a 100644 --- a/trunk/arch/x86/kernel/e820_64.c +++ b/trunk/arch/x86/kernel/e820_64.c @@ -84,6 +84,28 @@ void __init reserve_early(unsigned long start, unsigned long end, char *name) strncpy(r->name, name, sizeof(r->name) - 1); } +void __init free_early(unsigned long start, unsigned long end) +{ + struct early_res *r; + int i, j; + + for (i = 0; i < MAX_EARLY_RES && early_res[i].end; i++) { + r = &early_res[i]; + if (start == r->start && end == r->end) + break; + } + if (i >= MAX_EARLY_RES || !early_res[i].end) + panic("free_early on not reserved area: %lx-%lx!", start, end); + + for (j = i + 1; j < MAX_EARLY_RES && early_res[j].end; j++) + ; + + memcpy(&early_res[i], &early_res[i + 1], + (j - 1 - i) * sizeof(struct early_res)); + + early_res[j - 1].end = 0; +} + void __init early_res_to_bootmem(void) { int i; diff --git a/trunk/arch/x86/mm/pat.c b/trunk/arch/x86/mm/pat.c index e7ca7fc48d12..9851265e4d65 100644 --- a/trunk/arch/x86/mm/pat.c +++ b/trunk/arch/x86/mm/pat.c @@ -16,7 +16,6 @@ #include #include #include -#include #include #include #include @@ -478,33 +477,6 @@ pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn, return vma_prot; } -#ifdef CONFIG_NONPROMISC_DEVMEM -/* This check is done in drivers/char/mem.c in case of NONPROMISC_DEVMEM*/ -static inline int range_is_allowed(unsigned long pfn, unsigned long size) -{ - return 1; -} -#else -static inline int range_is_allowed(unsigned long pfn, unsigned long size) -{ - u64 from = ((u64)pfn) << PAGE_SHIFT; - u64 to = from + size; - u64 cursor = from; - - while (cursor < to) { - if (!devmem_is_allowed(pfn)) { - printk(KERN_INFO - "Program %s tried to access /dev/mem between %Lx->%Lx.\n", - current->comm, from, to); - return 0; - } - cursor += PAGE_SIZE; - pfn++; - } - return 1; -} -#endif /* CONFIG_NONPROMISC_DEVMEM */ - int phys_mem_access_prot_allowed(struct file *file, unsigned long pfn, unsigned long size, pgprot_t *vma_prot) { @@ -513,9 +485,6 @@ int phys_mem_access_prot_allowed(struct file *file, unsigned long pfn, unsigned long ret_flags; int retval; - if (!range_is_allowed(pfn, size)) - return 0; - if (file->f_flags & O_SYNC) { flags = _PAGE_CACHE_UC; } diff --git a/trunk/include/asm-x86/e820_64.h b/trunk/include/asm-x86/e820_64.h index f478c57eb060..b5e02e379af3 100644 --- a/trunk/include/asm-x86/e820_64.h +++ b/trunk/include/asm-x86/e820_64.h @@ -48,6 +48,7 @@ extern struct e820map e820; extern void update_e820(void); extern void reserve_early(unsigned long start, unsigned long end, char *name); +extern void free_early(unsigned long start, unsigned long end); extern void early_res_to_bootmem(void); #endif/*!__ASSEMBLY__*/