diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2009-04-25 05:25:34 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2009-05-14 08:50:29 -0400 |
commit | bb86bf28aec6d0a207ae09f38a43e94133d4d6db (patch) | |
tree | 34bd8f653eb10dc4eb82aa8ef2576475346070e1 /arch/mips/include | |
parent | 0b54352600b820a6d25f151cbd8975ed9b2aeb09 (diff) |
MIPS: Fix highmem.
Commit 351336929ccf222ae38ff0cb7a8dd5fd5c6236a0 (kernel.org) rsp.
b3594a089f1c17ff919f8f78505c3f20e1f6f8ce (linux-mips.org):
> From: Chris Dearman <chris@mips.com>
> Date: Wed, 19 Sep 2007 00:58:24 +0100
> Subject: [PATCH] [MIPS] Allow setting of the cache attribute at run time.
>
> Slightly tacky, but there is a precedent in the sparc archirecture code.
introduces the variable _page_cachable_default, which defaults to zero and.
is used to create the prototype PTE for __kmap_atomic in
arch/mips/mm/init.c:kmap_init before initialization in
arch/mips/mm/c-r4k.c:coherency_setup, so the default value of 0 will be
used as the CCA of kmap atomic pages which on many processors is not a
defined CCA value and may result in writes to kmap_atomic pages getting
corrupted. Debugged by Jon Fraser (jfraser@broadcom.com).
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/include')
-rw-r--r-- | arch/mips/include/asm/fixmap.h | 3 | ||||
-rw-r--r-- | arch/mips/include/asm/highmem.h | 6 |
2 files changed, 7 insertions, 2 deletions
diff --git a/arch/mips/include/asm/fixmap.h b/arch/mips/include/asm/fixmap.h index 9cc8522a394f..0f5caa1307f1 100644 --- a/arch/mips/include/asm/fixmap.h +++ b/arch/mips/include/asm/fixmap.h | |||
@@ -108,6 +108,9 @@ static inline unsigned long virt_to_fix(const unsigned long vaddr) | |||
108 | return __virt_to_fix(vaddr); | 108 | return __virt_to_fix(vaddr); |
109 | } | 109 | } |
110 | 110 | ||
111 | #define kmap_get_fixmap_pte(vaddr) \ | ||
112 | pte_offset_kernel(pmd_offset(pud_offset(pgd_offset_k(vaddr), (vaddr)), (vaddr)), (vaddr)) | ||
113 | |||
111 | /* | 114 | /* |
112 | * Called from pgtable_init() | 115 | * Called from pgtable_init() |
113 | */ | 116 | */ |
diff --git a/arch/mips/include/asm/highmem.h b/arch/mips/include/asm/highmem.h index 4374ab2adc75..25adfb02923d 100644 --- a/arch/mips/include/asm/highmem.h +++ b/arch/mips/include/asm/highmem.h | |||
@@ -30,8 +30,6 @@ | |||
30 | /* declarations for highmem.c */ | 30 | /* declarations for highmem.c */ |
31 | extern unsigned long highstart_pfn, highend_pfn; | 31 | extern unsigned long highstart_pfn, highend_pfn; |
32 | 32 | ||
33 | extern pte_t *kmap_pte; | ||
34 | extern pgprot_t kmap_prot; | ||
35 | extern pte_t *pkmap_page_table; | 33 | extern pte_t *pkmap_page_table; |
36 | 34 | ||
37 | /* | 35 | /* |
@@ -62,6 +60,10 @@ extern struct page *__kmap_atomic_to_page(void *ptr); | |||
62 | 60 | ||
63 | #define flush_cache_kmaps() flush_cache_all() | 61 | #define flush_cache_kmaps() flush_cache_all() |
64 | 62 | ||
63 | extern void kmap_init(void); | ||
64 | |||
65 | #define kmap_prot PAGE_KERNEL | ||
66 | |||
65 | #endif /* __KERNEL__ */ | 67 | #endif /* __KERNEL__ */ |
66 | 68 | ||
67 | #endif /* _ASM_HIGHMEM_H */ | 69 | #endif /* _ASM_HIGHMEM_H */ |