diff options
Diffstat (limited to 'arch/x86/mm/pageattr.c')
| -rw-r--r-- | arch/x86/mm/pageattr.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c index 7233bd7e357..1280565670e 100644 --- a/arch/x86/mm/pageattr.c +++ b/arch/x86/mm/pageattr.c | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | #include <asm/processor.h> | 16 | #include <asm/processor.h> |
| 17 | #include <asm/tlbflush.h> | 17 | #include <asm/tlbflush.h> |
| 18 | #include <asm/sections.h> | 18 | #include <asm/sections.h> |
| 19 | #include <asm/setup.h> | ||
| 19 | #include <asm/uaccess.h> | 20 | #include <asm/uaccess.h> |
| 20 | #include <asm/pgalloc.h> | 21 | #include <asm/pgalloc.h> |
| 21 | #include <asm/proto.h> | 22 | #include <asm/proto.h> |
| @@ -95,7 +96,7 @@ static inline unsigned long highmap_start_pfn(void) | |||
| 95 | 96 | ||
| 96 | static inline unsigned long highmap_end_pfn(void) | 97 | static inline unsigned long highmap_end_pfn(void) |
| 97 | { | 98 | { |
| 98 | return __pa(roundup((unsigned long)_end, PMD_SIZE)) >> PAGE_SHIFT; | 99 | return __pa(roundup(_brk_end, PMD_SIZE)) >> PAGE_SHIFT; |
| 99 | } | 100 | } |
| 100 | 101 | ||
| 101 | #endif | 102 | #endif |
| @@ -482,6 +483,13 @@ static int split_large_page(pte_t *kpte, unsigned long address) | |||
| 482 | pbase = (pte_t *)page_address(base); | 483 | pbase = (pte_t *)page_address(base); |
| 483 | paravirt_alloc_pte(&init_mm, page_to_pfn(base)); | 484 | paravirt_alloc_pte(&init_mm, page_to_pfn(base)); |
| 484 | ref_prot = pte_pgprot(pte_clrhuge(*kpte)); | 485 | ref_prot = pte_pgprot(pte_clrhuge(*kpte)); |
| 486 | /* | ||
| 487 | * If we ever want to utilize the PAT bit, we need to | ||
| 488 | * update this function to make sure it's converted from | ||
| 489 | * bit 12 to bit 7 when we cross from the 2MB level to | ||
| 490 | * the 4K level: | ||
| 491 | */ | ||
| 492 | WARN_ON_ONCE(pgprot_val(ref_prot) & _PAGE_PAT_LARGE); | ||
| 485 | 493 | ||
| 486 | #ifdef CONFIG_X86_64 | 494 | #ifdef CONFIG_X86_64 |
| 487 | if (level == PG_LEVEL_1G) { | 495 | if (level == PG_LEVEL_1G) { |
| @@ -704,7 +712,7 @@ static int cpa_process_alias(struct cpa_data *cpa) | |||
| 704 | * No need to redo, when the primary call touched the high | 712 | * No need to redo, when the primary call touched the high |
| 705 | * mapping already: | 713 | * mapping already: |
| 706 | */ | 714 | */ |
| 707 | if (within(vaddr, (unsigned long) _text, (unsigned long) _end)) | 715 | if (within(vaddr, (unsigned long) _text, _brk_end)) |
| 708 | return 0; | 716 | return 0; |
| 709 | 717 | ||
| 710 | /* | 718 | /* |
