* [PATCH] FRV pagetable handling fixes
@ 2004-12-17 13:27 David Howells
0 siblings, 0 replies; only message in thread
From: David Howells @ 2004-12-17 13:27 UTC (permalink / raw)
To: akpm; +Cc: linux-kernel
The attached patch makes the following fixes to the frv arch:
(1) pte_offset() should no longer be around; the fault handler should use
pte_offset_kernel() instead when fixing up vmalloc misses.
(2) The PGEs/PMEs do not hold PTEs. They have greater address resolution and
fewer control bits.
(3) The data access error pattern in ESR15.EC should be 10000 not 10100.
Signed-Off-By: David Howells <dhowells@redhat.com>
---
warthog>diffstat frv-pagetable-fixes-2610rc3mm1.diff
arch/frv/mm/fault.c | 2 +-
arch/frv/mm/pgalloc.c | 2 +-
include/asm-frv/pgtable.h | 3 +--
include/asm-frv/spr-regs.h | 2 +-
4 files changed, 4 insertions(+), 5 deletions(-)
diff -uNrp linux-2.6.10-rc3-mm1-asmoffsets/arch/frv/mm/fault.c linux-2.6.10-rc3-mm1-debug/arch/frv/mm/fault.c
--- linux-2.6.10-rc3-mm1-asmoffsets/arch/frv/mm/fault.c 2004-12-13 17:33:50.000000000 +0000
+++ linux-2.6.10-rc3-mm1-debug/arch/frv/mm/fault.c 2004-12-17 12:25:20.000000000 +0000
@@ -315,7 +315,7 @@ asmlinkage void do_page_fault(int datamm
goto no_context;
set_pmd(pmd, *pmd_k);
- pte_k = pte_offset(pmd_k, ear0);
+ pte_k = pte_offset_kernel(pmd_k, ear0);
if (!pte_present(*pte_k))
goto no_context;
return;
diff -uNrp linux-2.6.10-rc3-mm1-asmoffsets/arch/frv/mm/pgalloc.c linux-2.6.10-rc3-mm1-debug/arch/frv/mm/pgalloc.c
--- linux-2.6.10-rc3-mm1-asmoffsets/arch/frv/mm/pgalloc.c 2004-12-13 17:33:50.000000000 +0000
+++ linux-2.6.10-rc3-mm1-debug/arch/frv/mm/pgalloc.c 2004-12-17 11:40:57.000000000 +0000
@@ -52,7 +52,7 @@ void __set_pmd(pmd_t *pmdptr, unsigned l
memset(__ste_p, 0, PME_SIZE);
}
else {
- BUG_ON(pmd & xAMPRx_SS);
+ BUG_ON(pmd & (0x3f00 | xAMPRx_SS | 0xe));
for (loop = PME_SIZE; loop > 0; loop -= 4) {
*__ste_p++ = pmd;
diff -uNrp linux-2.6.10-rc3-mm1-asmoffsets/include/asm-frv/pgtable.h linux-2.6.10-rc3-mm1-debug/include/asm-frv/pgtable.h
--- linux-2.6.10-rc3-mm1-asmoffsets/include/asm-frv/pgtable.h 2004-12-13 17:34:20.000000000 +0000
+++ linux-2.6.10-rc3-mm1-debug/include/asm-frv/pgtable.h 2004-12-17 12:25:46.976552819 +0000
@@ -255,7 +255,7 @@ static inline pmd_t *pmd_offset(pgd_t *d
#define PAGE_KERNEL_RO MAKE_GLOBAL(__PAGE_KERNEL_RO)
#define PAGE_KERNEL_NOCACHE MAKE_GLOBAL(__PAGE_KERNEL_NOCACHE)
-#define _PAGE_TABLE (_PAGE_PRESENT | xAMPRx_SS_16Kb | xAMPRx_D | _PAGE_ACCESSED)
+#define _PAGE_TABLE (_PAGE_PRESENT | xAMPRx_SS_16Kb)
#ifndef __ASSEMBLY__
@@ -385,7 +385,6 @@ static inline pte_t pte_modify(pte_t pte
/* Find an entry in the third-level page table.. */
#define __pte_index(address) ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
-#define pte_offset(dir, address) ((pte_t *) pmd_page(*(dir)) + __pte_index(address))
/*
* the pte page can be thought of an array like this: pte_t[PTRS_PER_PTE]
diff -uNrp linux-2.6.10-rc3-mm1-asmoffsets/include/asm-frv/spr-regs.h linux-2.6.10-rc3-mm1-debug/include/asm-frv/spr-regs.h
--- linux-2.6.10-rc3-mm1-asmoffsets/include/asm-frv/spr-regs.h 2004-12-13 17:34:21.000000000 +0000
+++ linux-2.6.10-rc3-mm1-debug/include/asm-frv/spr-regs.h 2004-12-17 13:10:24.651384378 +0000
@@ -204,7 +204,7 @@
#define ESRx_EC_PRIV_INSN 0x00000008 /* - privileged_instruction */
#define ESRx_EC_ILL_INSN 0x0000000a /* - illegal_instruction */
#define ESRx_EC_MP_EXCEP 0x0000001c /* - mp_exception */
-#define ESRx_EC_DATA_ACCESS 0x00000024 /* - data_access_error */
+#define ESRx_EC_DATA_ACCESS 0x00000020 /* - data_access_error */
#define ESRx_EC_DIVISION 0x00000026 /* - division_exception */
#define ESRx_EC_ITLB_MISS 0x00000034 /* - instruction_access_TLB_miss */
#define ESRx_EC_DTLB_MISS 0x00000036 /* - data_access_TLB_miss */
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2004-12-17 13:28 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-12-17 13:27 [PATCH] FRV pagetable handling fixes David Howells
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.