Hello buddies, I am working on linux-2.4.20 support for a MIPS4Kc based reference design board. For some reason, I need to load and execute kernel at a non-standard address 0x91xxxxxx instead of 0x80xxxxxx. Regarding the memory management/paging stuff, I tried changing the PAGE_OFFSET variable to 0x91000000 in page.h, the UNCAC_BASE variable was changed to 0xb1000000 at the same time. So far the physical RAM map looks fine to me, the memory initialization works fine. The RAMDISK seems like to be loaded to correct address and the size is correct. But I got a "length error" when the kernel tried to decompress the RAMDISK, the original length seemed to be corrupted. The bytes_out value matched with the size of uncompressed RAMDISK size. Then I got a "Reserved instruction in kernel code in traps.c::do_ri, line 652:" kernel panic. I don't know whether it is the PAGE_OFFSET change caused this problem. Probably some page alignment issue. In addition to the PAGE_OFFSET value change, any other place I should change to fix this problem? Can anybody enlighten me? The log message is attched. Thanks a lot. Leo **************************************************************** Determined physical RAM map: memory: 00001000 @ 11000000 (reserved) memory: 000ef000 @ 11001000 (ROM data) memory: 00010000 @ 110f0000 (ROM data) memory: 001ac000 @ 11100000 (reserved) memory: 03d54000 @ 112ac000 (usable) Initial ramdisk at: 0x912ac000 (1002027 bytes) On node 0 totalpages: 16384 zone(0): 16384 pages. zone(1): 0 pages. zone(2): 0 pages. Kernel command line: console=ttyS0,38400 calculating r4koff... 000f422a(999978) CPU frequency 200.00 MHz Calibrating delay loop... 199.47 BogoMIPS Memory: 61108k/62800k available (1376k kernel code, 1692k reserved, 92k data, 72k init, 0k highmem) Dentry cache hash table entries: 8192 (order: 4, 65536 bytes) Inode cache hash table entries: 4096 (order: 3, 32768 bytes) Mount-cache hash table entries: 1024 (order: 1, 8192 bytes) Buffer-cache hash table entries: 4096 (order: 2, 16384 bytes) Page-cache hash table entries: 16384 (order: 4, 65536 bytes) Checking for 'wait' instruction... available. POSIX conformance testing by UNIFIX Autoconfig PCI channel 0x91286db0 ...................................... RAMDISK: Compressed image found at block 0 orig_len: ff74a400 bytes_out: 74a400 Freeing initrd memory: 978k freed VFS: Mounted root (ext2 filesystem) readonly. Freeing prom memory: 1020kb freed Freeing unused kernel memory: 72k freed Reserved instruction in kernel code in traps.c::do_ri, line 652: $0 : 00000000 1050ff00 2ab07ff8 2ab07ff8 2ab05748 00000000 000008f8 000008f8 $8 : 00000038 2ab05fc8 2ab05708 00001000 00000005 00000080 913abb70 000008fa $16: 2ab05000 913abc70 00000080 2ab05708 913d61a0 00000001 2ab05730 2aac0000 $24: 00000000 00000080 913aa000 913abbb0 913abcd4 91156384 Hi : 00000000 Lo : 00000180 epc : 91230d34 Not tainted Status: 1050ff03 Cause : 30800028 The kernel hung just after the interrupt was first time opened, after sti(), before calibrate_delay() in init/main.c. It was weird that I didn't see any problem if I put interrupt vector to location 0x80000200 while all other exception vectors to 0x91xxxxxx. Was interrupt vector location hardcode to the address 0x80000200? Or some other place I need to change to walk around it. Any idea? Thanks a bunch for your help. Leo