diff options
| author | Steven Whitehouse <swhiteho@redhat.com> | 2006-09-28 08:29:59 -0400 |
|---|---|---|
| committer | Steven Whitehouse <swhiteho@redhat.com> | 2006-09-28 08:29:59 -0400 |
| commit | 185a257f2f73bcd89050ad02da5bedbc28fc43fa (patch) | |
| tree | 5e32586114534ed3f2165614cba3d578f5d87307 /arch/i386/mm/pgtable.c | |
| parent | 3f1a9aaeffd8d1cbc5ab9776c45cbd66af1c9699 (diff) | |
| parent | a77c64c1a641950626181b4857abb701d8f38ccc (diff) | |
Merge branch 'master' into gfs2
Diffstat (limited to 'arch/i386/mm/pgtable.c')
| -rw-r--r-- | arch/i386/mm/pgtable.c | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/arch/i386/mm/pgtable.c b/arch/i386/mm/pgtable.c index bd98768d8764..10126e3f8174 100644 --- a/arch/i386/mm/pgtable.c +++ b/arch/i386/mm/pgtable.c | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | #include <linux/slab.h> | 12 | #include <linux/slab.h> |
| 13 | #include <linux/pagemap.h> | 13 | #include <linux/pagemap.h> |
| 14 | #include <linux/spinlock.h> | 14 | #include <linux/spinlock.h> |
| 15 | #include <linux/module.h> | ||
| 15 | 16 | ||
| 16 | #include <asm/system.h> | 17 | #include <asm/system.h> |
| 17 | #include <asm/pgtable.h> | 18 | #include <asm/pgtable.h> |
| @@ -60,7 +61,9 @@ void show_mem(void) | |||
| 60 | printk(KERN_INFO "%lu pages writeback\n", | 61 | printk(KERN_INFO "%lu pages writeback\n", |
| 61 | global_page_state(NR_WRITEBACK)); | 62 | global_page_state(NR_WRITEBACK)); |
| 62 | printk(KERN_INFO "%lu pages mapped\n", global_page_state(NR_FILE_MAPPED)); | 63 | printk(KERN_INFO "%lu pages mapped\n", global_page_state(NR_FILE_MAPPED)); |
| 63 | printk(KERN_INFO "%lu pages slab\n", global_page_state(NR_SLAB)); | 64 | printk(KERN_INFO "%lu pages slab\n", |
| 65 | global_page_state(NR_SLAB_RECLAIMABLE) + | ||
| 66 | global_page_state(NR_SLAB_UNRECLAIMABLE)); | ||
| 64 | printk(KERN_INFO "%lu pages pagetables\n", | 67 | printk(KERN_INFO "%lu pages pagetables\n", |
| 65 | global_page_state(NR_PAGETABLE)); | 68 | global_page_state(NR_PAGETABLE)); |
| 66 | } | 69 | } |
| @@ -137,6 +140,12 @@ void set_pmd_pfn(unsigned long vaddr, unsigned long pfn, pgprot_t flags) | |||
| 137 | __flush_tlb_one(vaddr); | 140 | __flush_tlb_one(vaddr); |
| 138 | } | 141 | } |
| 139 | 142 | ||
| 143 | static int fixmaps; | ||
| 144 | #ifndef CONFIG_COMPAT_VDSO | ||
| 145 | unsigned long __FIXADDR_TOP = 0xfffff000; | ||
| 146 | EXPORT_SYMBOL(__FIXADDR_TOP); | ||
| 147 | #endif | ||
| 148 | |||
| 140 | void __set_fixmap (enum fixed_addresses idx, unsigned long phys, pgprot_t flags) | 149 | void __set_fixmap (enum fixed_addresses idx, unsigned long phys, pgprot_t flags) |
| 141 | { | 150 | { |
| 142 | unsigned long address = __fix_to_virt(idx); | 151 | unsigned long address = __fix_to_virt(idx); |
| @@ -146,6 +155,25 @@ void __set_fixmap (enum fixed_addresses idx, unsigned long phys, pgprot_t flags) | |||
| 146 | return; | 155 | return; |
| 147 | } | 156 | } |
| 148 | set_pte_pfn(address, phys >> PAGE_SHIFT, flags); | 157 | set_pte_pfn(address, phys >> PAGE_SHIFT, flags); |
| 158 | fixmaps++; | ||
| 159 | } | ||
| 160 | |||
| 161 | /** | ||
| 162 | * reserve_top_address - reserves a hole in the top of kernel address space | ||
| 163 | * @reserve - size of hole to reserve | ||
| 164 | * | ||
| 165 | * Can be used to relocate the fixmap area and poke a hole in the top | ||
| 166 | * of kernel address space to make room for a hypervisor. | ||
| 167 | */ | ||
| 168 | void reserve_top_address(unsigned long reserve) | ||
| 169 | { | ||
| 170 | BUG_ON(fixmaps > 0); | ||
| 171 | #ifdef CONFIG_COMPAT_VDSO | ||
| 172 | BUG_ON(reserve != 0); | ||
| 173 | #else | ||
| 174 | __FIXADDR_TOP = -reserve - PAGE_SIZE; | ||
| 175 | __VMALLOC_RESERVE += reserve; | ||
| 176 | #endif | ||
| 149 | } | 177 | } |
| 150 | 178 | ||
| 151 | pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) | 179 | pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) |
