This may be related to something I just found -- in pmd_populate_kernel,
a physical address is installed in the pmd instead of a virtual
address. The patch I sent Ralf 30 minutes ago is attached :-)
Kip
Brian Murphy wrote:
>
> Hi,
>
> I get this now when my system (working well with 2.4) attempts to
> read from the disk on my system:
>
> Freeing unused kernel memory: 88k freed
> Unable to handle kernel paging request at virtual address 07cac000, epc
> == 8005c
> Oops in arch/mips/mm/fault.c::do_page_fault, line
> 205[#1]:
> Cpu 0
> $ 0 : 00000000 b0008400 00000000 fffffff4
> $ 4 : 07cac000 00000000 00011000 000007df
> $ 8 : 07cac000 801e4ab8 811375e0 00000001
> $12 : 00000001 00100100 ffffffff 87fff284
> $16 : 00000000 07cac000 00000000 87ce5e98
> $20 : 00011000 ffffffbf 000007df 00008075
> $24 : 87fff28c 00000001
> $28 : 87ce4000 87ce5de8 87f1c720 80059e2c
> Hi : 00000000
> Lo : 00000000
> epc : 80059cb0 Not tainted
> Status: b0008403
> Cause : 00001008
> KERNEL EXL IE Process swapon (pid: 19, stackpage=87d22ac0)
> Stack: 8004ee28 80106b68 811377e8 00000000 00000000 801d7c00 00011000
> ffc000000
> 8006a2d8 87ce5e98 00000201 c0000000 801d7c00 c0011000 ffc00000
> 87ce5e988
> 87f0a120 00000044 87f0a120 87f0b4e0 00000011 000000d2 00000020
> 000007df.
> Call
> Trace:
> [<8004ee28>] pte_alloc_kernel+0x74/0x158
> [<80106b68>] blk_remove_plug+0x78/0x98
> [<80059e2c>] map_area_pmd+0x84/0xd0
> [<8006a2d8>] blkdev_readpage+0x0/0x28
> [<80059f98>] map_vm_area+0x74/0xe0
> [<8005a4f8>] __vmalloc+0x140/0x178
> [<800228c0>] autoremove_wake_function+0x0/0x44
> [<8006a150>] blkdev_get_block+0x0/0x74
> [<8005a544>] vmalloc+0x14/0x20
> [<8005e1bc>] sys_swapon+0x6ec/0x84c
> [<8005dee4>] sys_swapon+0x414/0x84c
> [<8021b000>] pci_scan_device+0xf0/0x1a8
> [<8000cc20>] stack_done+0x18/0x34
> [<80008413>] handle_ades_int+0x27/0x34
>
>
> Code: 8fb30040 3c140040 2415ffbf <8e220000> 8e630000 3c04801b
> 2484cb6c 005
>
>
> Any pointers? I'm running in 32 bit mode.
>
> /Brian
Index: include/asm-mips/pgalloc.h
===================================================================
RCS file: /home/cvs/linux/include/asm-mips/pgalloc.h,v
retrieving revision 1.27
diff -u -r1.27 pgalloc.h
--- include/asm-mips/pgalloc.h 26 Jun 2003 20:19:44 -0000 1.27
+++ include/asm-mips/pgalloc.h 1 Jul 2003 17:26:05 -0000
@@ -17,7 +17,7 @@
static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd,
pte_t *pte)
{
- set_pmd(pmd, __pmd(__pa(pte)));
+ set_pmd(pmd, __pmd((unsigned long)pte));
}
static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd,
Index: include/asm-mips64/pgalloc.h
===================================================================
RCS file: /home/cvs/linux/include/asm-mips64/pgalloc.h,v
retrieving revision 1.29
diff -u -r1.29 pgalloc.h
--- include/asm-mips64/pgalloc.h 26 Jun 2003 20:19:44 -0000 1.29
+++ include/asm-mips64/pgalloc.h 1 Jul 2003 17:26:05 -0000
@@ -19,7 +19,7 @@
static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd,
pte_t *pte)
{
- set_pmd(pmd, __pmd(__pa(pte)));
+ set_pmd(pmd, __pmd((unsigned long)pte));
}
static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd,