Browse Source

m32r: fix tme_handler

Fix pmd_bad check code of tme_handler (TLB Miss Exception handler).
The correct _KERNPG_TABLE value is not 0x263(=611) but 0x163.

Signed-off-by: Hirokazu Takata <takata@linux-m32r.org>
Hirokazu Takata 16 years ago
parent
commit
2cff5e1a83
1 changed files with 8 additions and 4 deletions
  1. 8 4
      arch/m32r/mm/mmu.S

+ 8 - 4
arch/m32r/mm/mmu.S

@@ -150,9 +150,13 @@ ENTRY(tme_handler)
 
 
 	; pmd = pmd_offset(pgd, address);
 	; pmd = pmd_offset(pgd, address);
 	ld	r3, @r3			; r3: pmd data
 	ld	r3, @r3			; r3: pmd data
-	ldi	r2, #-4096
 	beqz	r3, 3f			; pmd_none(*pmd) ?
 	beqz	r3, 3f			; pmd_none(*pmd) ?
 
 
+	and3	r2, r3, #0xfff
+	add3	r2, r2, #-355		; _KERNPG_TABLE(=0x163)
+	bnez	r2, 3f			; pmd_bad(*pmd) ?
+	ldi	r2, #-4096
+
 	; pte = pte_offset(pmd, address);
 	; pte = pte_offset(pmd, address);
 	and	r2, r3			; r2: pte base addr
 	and	r2, r3			; r2: pte base addr
 	srl3	r3, r0, #10
 	srl3	r3, r0, #10
@@ -263,9 +267,9 @@ ENTRY(tme_handler)
 	ld	r1, @r3			; r1: pmd
 	ld	r1, @r3			; r1: pmd
 	beqz	r1, 3f			; pmd_none(*pmd) ?
 	beqz	r1, 3f			; pmd_none(*pmd) ?
 ;
 ;
-	and3	r1, r1, #0xeff
-	ldi	r4, #611		; _KERNPG_TABLE(=611)
-	bne	r1, r4, 3f		; !pmd_bad(*pmd) ?
+	and3	r1, r1, #0x3ff
+	ldi	r4, #0x163		; _KERNPG_TABLE(=0x163)
+	bne	r1, r4, 3f		; pmd_bad(*pmd) ?
 
 
 	.fillinsn
 	.fillinsn
 4:
 4: