lkcd
[Top] [All Lists]

Re: Alpha lcrash initialization problem - can't access memory

To: "Matt D. Robinson" <yakker@xxxxxxxxxxxxxx>
Subject: Re: Alpha lcrash initialization problem - can't access memory
From: Brian Hall <brianw.hall@xxxxxxxxxx>
Date: Tue, 02 May 2000 15:46:49 -0600 (MDT)
Cc: Tom Morano <tjm@xxxxxxx>, lkcd@xxxxxxxxxxx
In-reply-to: <Pine.LNX.4.21.0005021114500.1500-100000@xxxxxxxxxxxxxxxxxxx>
Reply-to: Brian Hall <brianw.hall@xxxxxxxxxx>
Sender: owner-lkcd@xxxxxxxxxxx
I've commented out the "__locore_lmabegin" lookup in kl_kern.c, and I replaced
the code in kl_virtop with this (not sure if this is correct, but it seems to
work better in the second case):

#include <asm/io.h>
kaddr_t
kl_virtop(kaddr_t vaddr, void *m)
{
        /* DEBUG */
        return virt_to_phys (vaddr);
}

Running lcrash against the current system gives:
===============================================================
(gdb) run
Starting program: /CDR_UPLOAD/hallb/linux-2.2.13-1.0.3/cmd/lcrash/./lcrash
map = /boot/System.map, vmdump = /dev/mem, outfile = stdout
 
Please wait................Registering command record #0
b = 539066368   p->blklist = 20213fe8
 
Program received signal SIGSEGV, Segmentation fault.
0x12001b150 in enqueue (list=0x120213fe8, new=0x20218000) at alloc.c:57
57      alloc.c: No such file or directory.
(gdb) where full
#0  0x12001b150 in enqueue (list=0x120213fe8, new=0x20218000) at alloc.c:57
        head = (element_t *) 0x0
#1  0x12001c194 in get_page (index=4) at alloc.c:438
        i = 0
        b = (block_t *) 0x20218000
        page = (void *) 0x12001c664
        p = (page_t *) 0x120213fd0
#2  0x12001cb0c in alloc_block (size=80, flag=2, ra=0x1e) at alloc.c:695
        i = 4
        j = 1
        blk = (void *) 0xfffffffff7f7ffdb
        p = (page_t *) 0x11ffffa80
        b = (block_t *) 0x0
#3  0x120003908 in kl_block_alloc_func (size=80, flag=2, ra=0x1e) at util.c:279
        b = (void *) 0x12002bbd4
#4  0x12002bc2c in _kl_alloc_block (size=80, flags=2, ra=0x1e) at kl_alloc.c:22
        blk = (void *) 0x120003d8c
#5  0x120003dac in register_cmds (cmds=0x120144888) at command.c:17
        i = 0
        ret = 1
        max_depth = 538955536
        cmd_rec = (cmd_rec_t *) 0x0
#6  0x120002b68 in main (argc=1, argv=0x11ffffb68) at main.c:208
        i = 0
        c = 512
        errflg = 0                                                      
===============================================================


And running lcrash against map.0 and vmdump.0:
===============================================================
(gdb) run map.0 vmdump.0
Starting program: /CDR_UPLOAD/hallb/linux-2.2.13-1.0.3/cmd/lcrash/./lcrash
map.0 vmdump.0
map = map.0, vmdump = vmdump.0, outfile = stdout
 
Please wait...Attempting to load previous index "index.10" ... complete.
...............cmpreadmem(): 8 bytes, 0x584c80 (just a page)
__cmppread(): initiating search for 0x584c80
__cmppindex(): hash =  16472, addr = 0x584c80
__cmppindex(): addr = 0x584c80, tmpptr->addr = 0x584000
__cmppread(): found the page in the page index!
0x584000: 4725 -> 8192 COMPRESSED, writing 8192 bytes
__cmppinsert(): Malloc occurred! [0]
__cmppinsert(): Inserting page into cache! (0x584c80) [0]...
__cmppget(): copying page of data (nbytes = 8, offset = 3200, in_addr =
0x584c80)
__cmppread(): found the item in the hash table second time!
cmpreadmem(): 8 bytes, 0x584c90 (just a page)
__cmppread(): initiating search for 0x584c90
__cmppget(): copying page of data (nbytes = 8, offset = 3216, in_addr =
0x584c90)
__cmppread(): found the item in the hash table!
Registering command record #0
b = 540016640   p->blklist = 202fbf88
 
Program received signal SIGSEGV, Segmentation fault.
0x12001b150 in enqueue (list=0x1202fbf88, new=0x20300000) at alloc.c:57
57      alloc.c: No such file or directory.         
(gdb) where full
#0  0x12001b150 in enqueue (list=0x1202fbf88, new=0x20300000) at alloc.c:57
        head = (element_t *) 0x0
#1  0x12001c194 in get_page (index=4) at alloc.c:438
        i = 0
        b = (block_t *) 0x20300000
        page = (void *) 0x12001c664
        p = (page_t *) 0x1202fbf70
#2  0x12001cb0c in alloc_block (size=80, flag=2, ra=0x1e) at alloc.c:695
        i = 4
        j = 1
        blk = (void *) 0xfffffffff7f7ffdb
        p = (page_t *) 0x11ffffb10
        b = (block_t *) 0x0
#3  0x120003908 in kl_block_alloc_func (size=80, flag=2, ra=0x1e) at util.c:279
        b = (void *) 0x12002bbd4
#4  0x12002bc2c in _kl_alloc_block (size=80, flags=2, ra=0x1e) at kl_alloc.c:22
        blk = (void *) 0x120003d8c
#5  0x120003dac in register_cmds (cmds=0x120144888) at command.c:17
        i = 0
        ret = 1
        max_depth = 539896016
        cmd_rec = (cmd_rec_t *) 0x0
#6  0x120002b68 in main (argc=3, argv=0x11ffffbf8) at main.c:208
        i = 0
        c = 512
        errflg = 0                   
===============================================================

At least I'm finding a page now...


On 02-May-2000 Matt D. Robinson wrote:
> Off-hand, I can't tell you without looking at the dump and the code.
> Is this stuff on a system we can login to and look at?  BTW, if you
> feel there's something wrong with the index, just make sure you
> remove the call to __cmpploadindex() in kl_cmp.c, so it isn't loaded.
> 
> That shouldn't be the problem, though.
> 
> --Matt
> 
> On Tue, 2 May 2000, Brian Hall wrote:
>|>Okay, tracing things back, I see that page_index[]->next is always NULL. I
>|>assume this is incorrect, since it is used in __cmppindex. Any idea what
>|>could
>|>cause this? The index file appears to be read in correctly, possibly it is
>|>being generated with incorrect values or bad data?

-- 
http://www.bigfoot.com/~brihall
Linux Consultant

<Prev in Thread] Current Thread [Next in Thread>