- move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap.patch removed from -mm tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The patch titled

     Move vsyscall page out of fixmap into normal vma as per mmap

has been removed from the -mm tree.  Its filename is

     move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap.patch

This patch was probably dropped from -mm because
it has now been merged into a subsystem tree or
into Linus's tree, or because it was folded into
its parent patch in the -mm tree.

------------------------------------------------------
Subject: Move vsyscall page out of fixmap into normal vma as per mmap
From: Rusty Russell <rusty@xxxxxxxxxxxxxxx>


Hypervisors want to use memory at the top of the address space (eg.  64MB for
Xen, or 168MB for Xen w/ PAE).  Creating this hole means moving the vsyscall
page away from 0xffffe000.

If we create this hole statically with a config option, we give up, say, 256MB
of lowmem for the case where a hypervisor-capable kernel is actually running
on native hardware.

If we create this hole dynamically and leave the vsyscall page at the top of
kernel memory, we would have to patch up the vsyscall elf header at boot time
to reflect where we put it.

Rather than move the stack down, use get_unmapped_area for the vsyscall
page, as the exec-shield patch does.  This means we need a pointer in the
thread_info, too.

This steals half of the code from Gerd Hoffmann's patch which moves out of
fixmap, and most of the rest from Ingo Molnar's exec-shield patch for
2.6.16.

Signed-off-by: Rusty Russell <rusty@xxxxxxxxxxxxxxx>
Signed-off-by: Ingo Molnar <mingo@xxxxxxx>
Signed-off-by: Andrew Morton <akpm@xxxxxxxx>
---

 arch/i386/kernel/asm-offsets.c       |    2 
 arch/i386/kernel/entry.S             |    8 +
 arch/i386/kernel/signal.c            |    4 
 arch/i386/kernel/sysenter.c          |  101 +++++++++++++++++++++++--
 arch/i386/kernel/vsyscall-sysenter.S |    6 -
 arch/i386/kernel/vsyscall.lds.S      |    4 
 arch/i386/mm/pgtable.c               |    6 +
 fs/proc/task_mmu.c                   |   30 ++++---
 include/asm-i386/elf.h               |   28 ++++--
 include/asm-i386/fixmap.h            |   10 --
 include/asm-i386/mmu.h               |    1 
 include/asm-i386/page.h              |   10 +-
 include/asm-i386/thread_info.h       |    1 
 linux/mm.h                           |    0 
 14 files changed, 163 insertions(+), 48 deletions(-)

diff -puN arch/i386/kernel/asm-offsets.c~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap arch/i386/kernel/asm-offsets.c
--- devel/arch/i386/kernel/asm-offsets.c~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap	2006-05-24 08:20:40.000000000 -0700
+++ devel-akpm/arch/i386/kernel/asm-offsets.c	2006-05-24 08:20:40.000000000 -0700
@@ -54,6 +54,7 @@ void foo(void)
 	OFFSET(TI_preempt_count, thread_info, preempt_count);
 	OFFSET(TI_addr_limit, thread_info, addr_limit);
 	OFFSET(TI_restart_block, thread_info, restart_block);
+	OFFSET(TI_sysenter_return, thread_info, sysenter_return);
 	BLANK();
 
 	OFFSET(EXEC_DOMAIN_handler, exec_domain, handler);
@@ -69,7 +70,6 @@ void foo(void)
 		 sizeof(struct tss_struct));
 
 	DEFINE(PAGE_SIZE_asm, PAGE_SIZE);
-	DEFINE(VSYSCALL_BASE, __fix_to_virt(FIX_VSYSCALL));
 
 	OFFSET(crypto_tfm_ctx_offset, crypto_tfm, __crt_ctx);
 }
diff -puN arch/i386/kernel/entry.S~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap arch/i386/kernel/entry.S
--- devel/arch/i386/kernel/entry.S~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap	2006-05-24 08:20:40.000000000 -0700
+++ devel-akpm/arch/i386/kernel/entry.S	2006-05-24 08:20:40.000000000 -0700
@@ -191,8 +191,12 @@ sysenter_past_esp:
 	pushl %ebp
 	pushfl
 	pushl $(__USER_CS)
-	pushl $SYSENTER_RETURN
-
+	/*
+	 * Push current_thread_info()->sysenter_return to the stack.
+	 * A tiny bit of offset fixup is necessary - 4*4 means the 4 words
+	 * pushed above; +8 corresponds to copy_thread's esp0 setting.
+	 */
+	pushl (TI_sysenter_return-THREAD_SIZE+8+4*4)(%esp)
 /*
  * Load the potential sixth argument from user stack.
  * Careful about security.
diff -puN arch/i386/kernel/signal.c~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap arch/i386/kernel/signal.c
--- devel/arch/i386/kernel/signal.c~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap	2006-05-24 08:20:40.000000000 -0700
+++ devel-akpm/arch/i386/kernel/signal.c	2006-05-24 08:20:40.000000000 -0700
@@ -351,7 +351,7 @@ static int setup_frame(int sig, struct k
 			goto give_sigsegv;
 	}
 
-	restorer = &__kernel_sigreturn;
+	restorer = current->mm->context.vdso + (long)&__kernel_sigreturn;
 	if (ka->sa.sa_flags & SA_RESTORER)
 		restorer = ka->sa.sa_restorer;
 
@@ -447,7 +447,7 @@ static int setup_rt_frame(int sig, struc
 		goto give_sigsegv;
 
 	/* Set up to return from userspace.  */
-	restorer = &__kernel_rt_sigreturn;
+	restorer = current->mm->context.vdso + (long)&__kernel_rt_sigreturn;
 	if (ka->sa.sa_flags & SA_RESTORER)
 		restorer = ka->sa.sa_restorer;
 	err |= __put_user(restorer, &frame->pretcode);
diff -puN arch/i386/kernel/sysenter.c~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap arch/i386/kernel/sysenter.c
--- devel/arch/i386/kernel/sysenter.c~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap	2006-05-24 08:20:40.000000000 -0700
+++ devel-akpm/arch/i386/kernel/sysenter.c	2006-05-24 08:20:53.000000000 -0700
@@ -2,6 +2,8 @@
  * linux/arch/i386/kernel/sysenter.c
  *
  * (C) Copyright 2002 Linus Torvalds
+ * Portions based on the vdso-randomization code from exec-shield:
+ * Copyright(C) 2005-2006, Red Hat, Inc., Ingo Molnar
  *
  * This file contains the needed initializations to support sysenter.
  */
@@ -13,6 +15,7 @@
 #include <linux/gfp.h>
 #include <linux/string.h>
 #include <linux/elf.h>
+#include <linux/mm.h>
 
 #include <asm/cpufeature.h>
 #include <asm/msr.h>
@@ -45,23 +48,111 @@ void enable_sep_cpu(void)
  */
 extern const char vsyscall_int80_start, vsyscall_int80_end;
 extern const char vsyscall_sysenter_start, vsyscall_sysenter_end;
+static void *syscall_page;
 
 int __init sysenter_setup(void)
 {
-	void *page = (void *)get_zeroed_page(GFP_ATOMIC);
-
-	__set_fixmap(FIX_VSYSCALL, __pa(page), PAGE_READONLY_EXEC);
+	syscall_page = (void *)get_zeroed_page(GFP_ATOMIC);
 
 	if (!boot_cpu_has(X86_FEATURE_SEP)) {
-		memcpy(page,
+		memcpy(syscall_page,
 		       &vsyscall_int80_start,
 		       &vsyscall_int80_end - &vsyscall_int80_start);
 		return 0;
 	}
 
-	memcpy(page,
+	memcpy(syscall_page,
 	       &vsyscall_sysenter_start,
 	       &vsyscall_sysenter_end - &vsyscall_sysenter_start);
 
 	return 0;
 }
+
+static struct page *syscall_nopage(struct vm_area_struct *vma,
+				unsigned long adr, int *type)
+{
+	struct page *p = virt_to_page(adr - vma->vm_start + syscall_page);
+	get_page(p);
+	return p;
+}
+
+/* Prevent VMA merging */
+static void syscall_vma_close(struct vm_area_struct *vma)
+{
+}
+
+static struct vm_operations_struct syscall_vm_ops = {
+	.close = syscall_vma_close,
+	.nopage = syscall_nopage,
+};
+
+/* Defined in vsyscall-sysenter.S */
+extern char SYSENTER_RETURN_OFFSET[];
+
+/* Setup a VMA at program startup for the vsyscall page */
+int arch_setup_additional_pages(struct linux_binprm *bprm, int exstack)
+{
+	struct vm_area_struct *vma;
+	struct mm_struct *mm = current->mm;
+	unsigned long addr;
+	int ret;
+
+	down_write(&mm->mmap_sem);
+	addr = get_unmapped_area(NULL, 0, PAGE_SIZE, 0, 0);
+	if (IS_ERR_VALUE(addr)) {
+		ret = addr;
+		goto up_fail;
+	}
+
+	vma = kmem_cache_zalloc(vm_area_cachep, SLAB_KERNEL);
+	if (!vma) {
+		ret = -ENOMEM;
+		goto up_fail;
+	}
+
+	vma->vm_start = addr;
+	vma->vm_end = addr + PAGE_SIZE;
+	/* MAYWRITE to allow gdb to COW and set breakpoints */
+	vma->vm_flags = VM_READ|VM_EXEC|VM_MAYREAD|VM_MAYEXEC|VM_MAYWRITE;
+	vma->vm_flags |= mm->def_flags;
+	vma->vm_page_prot = protection_map[vma->vm_flags & 7];
+	vma->vm_ops = &syscall_vm_ops;
+	vma->vm_mm = mm;
+
+	ret = insert_vm_struct(mm, vma);
+	if (ret)
+		goto free_vma;
+	current->mm->context.vdso = (void *)addr;
+	current_thread_info()->sysenter_return = SYSENTER_RETURN_OFFSET + addr;
+	mm->total_vm++;
+	up_write(&mm->mmap_sem);
+	return 0;
+
+free_vma:
+	kmem_cache_free(vm_area_cachep, vma);
+up_fail:
+	up_write(&mm->mmap_sem);
+	return ret;
+}
+
+const char *arch_vma_name(struct vm_area_struct *vma)
+{
+	if (vma->vm_mm && vma->vm_start == (long)vma->vm_mm->context.vdso)
+		return "[vdso]";
+	return NULL;
+}
+
+struct vm_area_struct *get_gate_vma(struct task_struct *tsk)
+{
+	return NULL;
+}
+
+int in_gate_area(struct task_struct *task, unsigned long addr)
+{
+	return 0;
+}
+
+int in_gate_area_no_task(unsigned long addr)
+{
+	return 0;
+}
diff -puN arch/i386/kernel/vsyscall.lds.S~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap arch/i386/kernel/vsyscall.lds.S
--- devel/arch/i386/kernel/vsyscall.lds.S~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap	2006-05-24 08:20:40.000000000 -0700
+++ devel-akpm/arch/i386/kernel/vsyscall.lds.S	2006-05-24 08:20:40.000000000 -0700
@@ -7,7 +7,7 @@
 
 SECTIONS
 {
-  . = VSYSCALL_BASE + SIZEOF_HEADERS;
+  . = SIZEOF_HEADERS;
 
   .hash           : { *(.hash) }		:text
   .dynsym         : { *(.dynsym) }
@@ -20,7 +20,7 @@ SECTIONS
      For the layouts to match, we need to skip more than enough
      space for the dynamic symbol table et al.  If this amount
      is insufficient, ld -shared will barf.  Just increase it here.  */
-  . = VSYSCALL_BASE + 0x400;
+  . = 0x400;
 
   .text           : { *(.text) }		:text =0x90909090
   .note		  : { *(.note.*) }		:text :note
diff -puN arch/i386/kernel/vsyscall-sysenter.S~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap arch/i386/kernel/vsyscall-sysenter.S
--- devel/arch/i386/kernel/vsyscall-sysenter.S~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap	2006-05-24 08:20:40.000000000 -0700
+++ devel-akpm/arch/i386/kernel/vsyscall-sysenter.S	2006-05-24 08:20:40.000000000 -0700
@@ -42,11 +42,11 @@ __kernel_vsyscall:
 	/* 7: align return point with nop's to make disassembly easier */
 	.space 7,0x90
 
-	/* 14: System call restart point is here! (SYSENTER_RETURN - 2) */
+	/* 14: System call restart point is here! (SYSENTER_RETURN_OFFSET-2) */
 	jmp .Lenter_kernel
 	/* 16: System call normal return point is here! */
-	.globl SYSENTER_RETURN	/* Symbol used by entry.S.  */
-SYSENTER_RETURN:
+	.globl SYSENTER_RETURN_OFFSET	/* Symbol used by sysenter.c  */
+SYSENTER_RETURN_OFFSET:
 	pop %ebp
 .Lpop_ebp:
 	pop %edx
diff -puN arch/i386/mm/pgtable.c~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap arch/i386/mm/pgtable.c
--- devel/arch/i386/mm/pgtable.c~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap	2006-05-24 08:20:40.000000000 -0700
+++ devel-akpm/arch/i386/mm/pgtable.c	2006-05-24 08:20:45.000000000 -0700
@@ -13,6 +13,7 @@
 #include <linux/slab.h>
 #include <linux/pagemap.h>
 #include <linux/spinlock.h>
+#include <linux/module.h>
 
 #include <asm/system.h>
 #include <asm/pgtable.h>
@@ -138,6 +139,10 @@ void set_pmd_pfn(unsigned long vaddr, un
 	__flush_tlb_one(vaddr);
 }
 
+static int nr_fixmaps;
+unsigned long __FIXADDR_TOP = 0xfffff000;
+EXPORT_SYMBOL(__FIXADDR_TOP);
+
 void __set_fixmap (enum fixed_addresses idx, unsigned long phys, pgprot_t flags)
 {
 	unsigned long address = __fix_to_virt(idx);
@@ -147,6 +152,7 @@ void __set_fixmap (enum fixed_addresses 
 		return;
 	}
 	set_pte_pfn(address, phys >> PAGE_SHIFT, flags);
+	nr_fixmaps++;
 }
 
 pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
diff -puN fs/proc/task_mmu.c~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap fs/proc/task_mmu.c
--- devel/fs/proc/task_mmu.c~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap	2006-05-24 08:20:40.000000000 -0700
+++ devel-akpm/fs/proc/task_mmu.c	2006-05-24 08:20:45.000000000 -0700
@@ -118,6 +118,11 @@ struct mem_size_stats
 	unsigned long private_dirty;
 };
 
+__attribute__((weak)) const char *arch_vma_name(struct vm_area_struct *vma)
+{
+	return NULL;
+}
+
 static int show_map_internal(struct seq_file *m, void *v, struct mem_size_stats *mss)
 {
 	struct task_struct *task = m->private;
@@ -153,22 +158,23 @@ static int show_map_internal(struct seq_
 		pad_len_spaces(m, len);
 		seq_path(m, file->f_vfsmnt, file->f_dentry, "\n");
 	} else {
-		if (mm) {
-			if (vma->vm_start <= mm->start_brk &&
+		const char *name = arch_vma_name(vma);
+		if (!name) {
+			if (mm) {
+				if (vma->vm_start <= mm->start_brk &&
 						vma->vm_end >= mm->brk) {
-				pad_len_spaces(m, len);
-				seq_puts(m, "[heap]");
-			} else {
-				if (vma->vm_start <= mm->start_stack &&
-					vma->vm_end >= mm->start_stack) {
-
-					pad_len_spaces(m, len);
-					seq_puts(m, "[stack]");
+					name = "[heap]";
+				} else if (vma->vm_start <= mm->start_stack &&
+					   vma->vm_end >= mm->start_stack) {
+					name = "[stack]";
 				}
+			} else {
+				name = "[vdso]";
 			}
-		} else {
+		}
+		if (name) {
 			pad_len_spaces(m, len);
-			seq_puts(m, "[vdso]");
+			seq_puts(m, name);
 		}
 	}
 	seq_putc(m, '\n');
diff -puN include/asm-i386/elf.h~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap include/asm-i386/elf.h
--- devel/include/asm-i386/elf.h~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap	2006-05-24 08:20:40.000000000 -0700
+++ devel-akpm/include/asm-i386/elf.h	2006-05-24 08:20:40.000000000 -0700
@@ -10,6 +10,7 @@
 #include <asm/processor.h>
 #include <asm/system.h>		/* for savesegment */
 #include <asm/auxvec.h>
+#include <asm/desc.h>
 
 #include <linux/utsname.h>
 
@@ -129,11 +130,20 @@ extern int dump_task_extended_fpu (struc
 #define ELF_CORE_COPY_FPREGS(tsk, elf_fpregs) dump_task_fpu(tsk, elf_fpregs)
 #define ELF_CORE_COPY_XFPREGS(tsk, elf_xfpregs) dump_task_extended_fpu(tsk, elf_xfpregs)
 
-#define VSYSCALL_BASE	(__fix_to_virt(FIX_VSYSCALL))
+#define VSYSCALL_BASE	((unsigned long)current->mm->context.vdso)
 #define VSYSCALL_EHDR	((const struct elfhdr *) VSYSCALL_BASE)
-#define VSYSCALL_ENTRY	((unsigned long) &__kernel_vsyscall)
+#define VSYSCALL_OFFSET	((unsigned long) &__kernel_vsyscall)
+#define VSYSCALL_ENTRY	(VSYSCALL_BASE + VSYSCALL_OFFSET)
+/* kernel-internal fixmap address: */
+#define __VSYSCALL_BASE	(__fix_to_virt(FIX_VSYSCALL))
+#define __VSYSCALL_EHDR	((const struct elfhdr *) __VSYSCALL_BASE)
 extern void __kernel_vsyscall;
 
+#define ARCH_HAS_SETUP_ADDITIONAL_PAGES
+struct linux_binprm;
+extern int arch_setup_additional_pages(struct linux_binprm *bprm,
+                                       int executable_stack);
+
 #define ARCH_DLINFO						\
 do {								\
 		NEW_AUX_ENT(AT_SYSINFO,	VSYSCALL_ENTRY);	\
@@ -148,15 +158,15 @@ do {								\
  * Dumping its extra ELF program headers includes all the other information
  * a debugger needs to easily find how the vsyscall DSO was being used.
  */
-#define ELF_CORE_EXTRA_PHDRS		(VSYSCALL_EHDR->e_phnum)
+#define ELF_CORE_EXTRA_PHDRS		(__VSYSCALL_EHDR->e_phnum)
 #define ELF_CORE_WRITE_EXTRA_PHDRS					      \
 do {									      \
 	const struct elf_phdr *const vsyscall_phdrs =			      \
-		(const struct elf_phdr *) (VSYSCALL_BASE		      \
-					   + VSYSCALL_EHDR->e_phoff);	      \
+		(const struct elf_phdr *) (__VSYSCALL_BASE		      \
+					   + __VSYSCALL_EHDR->e_phoff);	      \
 	int i;								      \
 	Elf32_Off ofs = 0;						      \
-	for (i = 0; i < VSYSCALL_EHDR->e_phnum; ++i) {			      \
+	for (i = 0; i < __VSYSCALL_EHDR->e_phnum; ++i) {		      \
 		struct elf_phdr phdr = vsyscall_phdrs[i];		      \
 		if (phdr.p_type == PT_LOAD) {				      \
 			BUG_ON(ofs != 0);				      \
@@ -174,10 +184,10 @@ do {									      \
 #define ELF_CORE_WRITE_EXTRA_DATA					      \
 do {									      \
 	const struct elf_phdr *const vsyscall_phdrs =			      \
-		(const struct elf_phdr *) (VSYSCALL_BASE		      \
-					   + VSYSCALL_EHDR->e_phoff);	      \
+		(const struct elf_phdr *) (__VSYSCALL_BASE		      \
+					   + __VSYSCALL_EHDR->e_phoff);	      \
 	int i;								      \
-	for (i = 0; i < VSYSCALL_EHDR->e_phnum; ++i) {			      \
+	for (i = 0; i < __VSYSCALL_EHDR->e_phnum; ++i) {		      \
 		if (vsyscall_phdrs[i].p_type == PT_LOAD)		      \
 			DUMP_WRITE((void *) vsyscall_phdrs[i].p_vaddr,	      \
 				   PAGE_ALIGN(vsyscall_phdrs[i].p_memsz));    \
diff -puN include/asm-i386/fixmap.h~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap include/asm-i386/fixmap.h
--- devel/include/asm-i386/fixmap.h~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap	2006-05-24 08:20:40.000000000 -0700
+++ devel-akpm/include/asm-i386/fixmap.h	2006-05-24 08:20:45.000000000 -0700
@@ -19,7 +19,7 @@
  * Leave one empty page between vmalloc'ed areas and
  * the start of the fixmap.
  */
-#define __FIXADDR_TOP	0xfffff000
+extern unsigned long __FIXADDR_TOP;
 
 #ifndef __ASSEMBLY__
 #include <linux/kernel.h>
@@ -115,14 +115,6 @@ extern void __set_fixmap (enum fixed_add
 #define __fix_to_virt(x)	(FIXADDR_TOP - ((x) << PAGE_SHIFT))
 #define __virt_to_fix(x)	((FIXADDR_TOP - ((x)&PAGE_MASK)) >> PAGE_SHIFT)
 
-/*
- * This is the range that is readable by user mode, and things
- * acting like user mode such as get_user_pages.
- */
-#define FIXADDR_USER_START	(__fix_to_virt(FIX_VSYSCALL))
-#define FIXADDR_USER_END	(FIXADDR_USER_START + PAGE_SIZE)
-
-
 extern void __this_fixmap_does_not_exist(void);
 
 /*
diff -puN include/asm-i386/mmu.h~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap include/asm-i386/mmu.h
--- devel/include/asm-i386/mmu.h~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap	2006-05-24 08:20:40.000000000 -0700
+++ devel-akpm/include/asm-i386/mmu.h	2006-05-24 08:20:40.000000000 -0700
@@ -12,6 +12,7 @@ typedef struct { 
 	int size;
 	struct semaphore sem;
 	void *ldt;
+	void *vdso;
 } mm_context_t;
 
 #endif
diff -puN include/asm-i386/page.h~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap include/asm-i386/page.h
--- devel/include/asm-i386/page.h~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap	2006-05-24 08:20:40.000000000 -0700
+++ devel-akpm/include/asm-i386/page.h	2006-05-24 08:20:45.000000000 -0700
@@ -12,7 +12,6 @@
 #ifdef __KERNEL__
 #ifndef __ASSEMBLY__
 
-
 #ifdef CONFIG_X86_USE_3DNOW
 
 #include <asm/mmx.h>
@@ -96,6 +95,8 @@ typedef struct { unsigned long pgprot; }
 
 #ifndef __ASSEMBLY__
 
+struct vm_area_struct;
+
 /*
  * This much address space is reserved for vmalloc() and iomap()
  * as well as fixmap mappings.
@@ -106,7 +107,9 @@ extern int sysctl_legacy_va_layout;
 
 extern int page_is_ram(unsigned long pagenr);
 
-#endif /* __ASSEMBLY__ */
+const char *arch_vma_name(struct vm_area_struct *vma);
+
+#endif	/* __ASSEMBLY__ */
 
 #ifdef __ASSEMBLY__
 #define __PAGE_OFFSET		CONFIG_PAGE_OFFSET
@@ -120,7 +123,7 @@ extern int page_is_ram(unsigned long pag
 
 #define PAGE_OFFSET		((unsigned long)__PAGE_OFFSET)
 #define VMALLOC_RESERVE		((unsigned long)__VMALLOC_RESERVE)
-#define MAXMEM			(-__PAGE_OFFSET-__VMALLOC_RESERVE)
+#define MAXMEM			(__FIXADDR_TOP-__PAGE_OFFSET-__VMALLOC_RESERVE)
 #define __pa(x)			((unsigned long)(x)-PAGE_OFFSET)
 #define __va(x)			((void *)((unsigned long)(x)+PAGE_OFFSET))
 #define pfn_to_kaddr(pfn)      __va((pfn) << PAGE_SHIFT)
@@ -139,6 +142,7 @@ extern int page_is_ram(unsigned long pag
 #include <asm-generic/memory_model.h>
 #include <asm-generic/page.h>
 
+#define __HAVE_ARCH_GATE_AREA 1
 #endif /* __KERNEL__ */
 
 #endif /* _I386_PAGE_H */
diff -puN include/asm-i386/thread_info.h~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap include/asm-i386/thread_info.h
--- devel/include/asm-i386/thread_info.h~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap	2006-05-24 08:20:40.000000000 -0700
+++ devel-akpm/include/asm-i386/thread_info.h	2006-05-24 08:20:40.000000000 -0700
@@ -37,6 +37,7 @@ struct thread_info {
 					 	   0-0xBFFFFFFF for user-thead
 						   0-0xFFFFFFFF for kernel-thread
 						*/
+	void			*sysenter_return;
 	struct restart_block    restart_block;
 
 	unsigned long           previous_esp;   /* ESP of the previous stack in case
diff -puN include/linux/mm.h~move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap include/linux/mm.h
_

Patches currently in -mm which might be from rusty@xxxxxxxxxxxxxxx are

origin.patch
x86-increase-interrupt-vector-range.patch
move-vsyscall-page-out-of-fixmap-into-normal-vma-as-per-mmap.patch
x86-move-vsyscall-page-out-of-fixmap-above-stack.patch
kernel-kernel-cpuc-to-mutexes.patch
ensure-null-deref-cant-possibly-happen-in-is_exported.patch
define-__raw_get_cpu_var-and-use-it.patch
allow-for-per-cpu-data-being-in-tdata-and-tbss-sections.patch
allow-for-per-cpu-data-being-in-tdata-and-tbss-sections-fix.patch
allow-for-per-cpu-data-being-in-tdata-and-tbss-sections-tidy.patch

-
To unsubscribe from this list: send the line "unsubscribe mm-commits" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Kernel Newbies FAQ]     [Kernel Archive]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Photo]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]

  Powered by Linux