diff options
| author | Ingo Molnar <mingo@elte.hu> | 2008-02-04 10:48:09 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2008-02-04 10:48:09 -0500 |
| commit | 9df84993cb3d71669894654ab257f01f6e4ed48e (patch) | |
| tree | 08e8c80dd35d465e59c002a50e1baf27f5eb1496 | |
| parent | f07333fd149eb6826da26a89c3aff90324f270b0 (diff) | |
x86: cpa, cleanups
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
| -rw-r--r-- | arch/x86/mm/pageattr.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c index 42ca3d8effad..029fb07b3f03 100644 --- a/arch/x86/mm/pageattr.c +++ b/arch/x86/mm/pageattr.c | |||
| @@ -16,6 +16,9 @@ | |||
| 16 | #include <asm/uaccess.h> | 16 | #include <asm/uaccess.h> |
| 17 | #include <asm/pgalloc.h> | 17 | #include <asm/pgalloc.h> |
| 18 | 18 | ||
| 19 | /* | ||
| 20 | * The current flushing context - we pass it instead of 5 arguments: | ||
| 21 | */ | ||
| 19 | struct cpa_data { | 22 | struct cpa_data { |
| 20 | unsigned long vaddr; | 23 | unsigned long vaddr; |
| 21 | pgprot_t mask_set; | 24 | pgprot_t mask_set; |
| @@ -206,6 +209,7 @@ pte_t *lookup_address(unsigned long address, int *level) | |||
| 206 | 209 | ||
| 207 | if (pgd_none(*pgd)) | 210 | if (pgd_none(*pgd)) |
| 208 | return NULL; | 211 | return NULL; |
| 212 | |||
| 209 | pud = pud_offset(pgd, address); | 213 | pud = pud_offset(pgd, address); |
| 210 | if (pud_none(*pud)) | 214 | if (pud_none(*pud)) |
| 211 | return NULL; | 215 | return NULL; |
| @@ -223,9 +227,13 @@ pte_t *lookup_address(unsigned long address, int *level) | |||
| 223 | return (pte_t *)pmd; | 227 | return (pte_t *)pmd; |
| 224 | 228 | ||
| 225 | *level = PG_LEVEL_4K; | 229 | *level = PG_LEVEL_4K; |
| 230 | |||
| 226 | return pte_offset_kernel(pmd, address); | 231 | return pte_offset_kernel(pmd, address); |
| 227 | } | 232 | } |
| 228 | 233 | ||
| 234 | /* | ||
| 235 | * Set the new pmd in all the pgds we know about: | ||
| 236 | */ | ||
| 229 | static void __set_pmd_pte(pte_t *kpte, unsigned long address, pte_t pte) | 237 | static void __set_pmd_pte(pte_t *kpte, unsigned long address, pte_t pte) |
| 230 | { | 238 | { |
| 231 | /* change init_mm */ | 239 | /* change init_mm */ |
| @@ -248,8 +256,9 @@ static void __set_pmd_pte(pte_t *kpte, unsigned long address, pte_t pte) | |||
| 248 | #endif | 256 | #endif |
| 249 | } | 257 | } |
| 250 | 258 | ||
| 251 | static int try_preserve_large_page(pte_t *kpte, unsigned long address, | 259 | static int |
| 252 | struct cpa_data *cpa) | 260 | try_preserve_large_page(pte_t *kpte, unsigned long address, |
| 261 | struct cpa_data *cpa) | ||
| 253 | { | 262 | { |
| 254 | unsigned long nextpage_addr, numpages, pmask, psize, flags; | 263 | unsigned long nextpage_addr, numpages, pmask, psize, flags; |
| 255 | pte_t new_pte, old_pte, *tmp; | 264 | pte_t new_pte, old_pte, *tmp; |
| @@ -341,17 +350,18 @@ static int try_preserve_large_page(pte_t *kpte, unsigned long address, | |||
| 341 | 350 | ||
| 342 | out_unlock: | 351 | out_unlock: |
| 343 | spin_unlock_irqrestore(&pgd_lock, flags); | 352 | spin_unlock_irqrestore(&pgd_lock, flags); |
| 353 | |||
| 344 | return res; | 354 | return res; |
| 345 | } | 355 | } |
| 346 | 356 | ||
| 347 | static int split_large_page(pte_t *kpte, unsigned long address) | 357 | static int split_large_page(pte_t *kpte, unsigned long address) |
| 348 | { | 358 | { |
| 349 | pgprot_t ref_prot; | ||
| 350 | gfp_t gfp_flags = GFP_KERNEL; | ||
| 351 | unsigned long flags, addr, pfn, pfninc = 1; | 359 | unsigned long flags, addr, pfn, pfninc = 1; |
| 360 | gfp_t gfp_flags = GFP_KERNEL; | ||
| 361 | unsigned int i, level; | ||
| 352 | pte_t *pbase, *tmp; | 362 | pte_t *pbase, *tmp; |
| 363 | pgprot_t ref_prot; | ||
| 353 | struct page *base; | 364 | struct page *base; |
| 354 | unsigned int i, level; | ||
| 355 | 365 | ||
| 356 | #ifdef CONFIG_DEBUG_PAGEALLOC | 366 | #ifdef CONFIG_DEBUG_PAGEALLOC |
| 357 | gfp_flags = GFP_ATOMIC | __GFP_NOWARN; | 367 | gfp_flags = GFP_ATOMIC | __GFP_NOWARN; |
| @@ -505,7 +515,6 @@ repeat: | |||
| 505 | * | 515 | * |
| 506 | * Modules and drivers should use the set_memory_* APIs instead. | 516 | * Modules and drivers should use the set_memory_* APIs instead. |
| 507 | */ | 517 | */ |
| 508 | |||
| 509 | static int change_page_attr_addr(struct cpa_data *cpa) | 518 | static int change_page_attr_addr(struct cpa_data *cpa) |
| 510 | { | 519 | { |
| 511 | int err; | 520 | int err; |
