Port-i386 archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: pcibios(4) related crash during boot on system with General Software BIOS



At Wed, 2 Jun 2010 15:34:16 -0500, David Young <dyoung%pobox.com@localhost> 
wrote:
Subject: Re: pcibios(4) related crash during boot on system with General 
Software BIOS
> 
> On Wed, Jun 02, 2010 at 03:52:14PM -0400, Greg A. Woods wrote:
> > PCI BIOS rev. 2.1 found at 0xff686
> > pcibios: config mechanism [1][x], special cycles [x][x], last bus 3
> > uvm_fault(0xc0ab0b60, 0xf1000, 1) -> 0xe
> > kernel: supervisor trap page fault, code=0
> > Stopped in pid 0.1 (swapper) at 0xc0c01617:     repe movsb      
> > (%esi),%es:(%edi
> > )
> > db{0}> trace
> > _prop_array_pool(c3855a00,c0ab5924,c0ab590a,c045f945,c0a1bf6c) at 0xc0c01617
> 
> Maybe pcibios_pir_init() jumped through an uninitialized function
> pointer, or your symtab is too small.

Weird.  I think you mean the symtab loaded at boot for use by ddb,
right?  My kernel prints the following at that time:

        Loaded initial symtab at 0xc0ac5270, strtab at 0xc0b31ad4, # entries 
26185, NKSYMS=1

How do I tell if it's big enough or not?


> > pcibios_pir_init(c09e8bc4,c0984103,c09840ff,c09840ff,c09840ff) at 
> > netbsd:pcibios
> > _pir_init+0x163
> 
> What line is that?  If you've compiled your kernel with debugging
> symbols, then gdb can tell you, 'l *(pcibios_pir_init+0x163)'.

Well, I recompiled what I believe is substantially the same sources with
"-g", and pcibios.c itself has not been modified in my tree since
Feb. 10, 2007, and this is what GDB says from the result:

(gdb) l *(pcibios_pir_init+0x163)
0xc064ebd3 is in pcibios_pir_init 
(/rest/work/woods/m-NetBSD-4/sys/arch/i386/pci/pcibios.c:336).
331                 sizeof(*pcibios_pir_table), M_DEVBUF, M_NOWAIT);
332             if (pcibios_pir_table == NULL) {
333                     aprint_error("pcibios_pir_init: no memory for $PIR\n");
334                     return;
335             }
336             if (pcibios_get_intr_routing(pcibios_pir_table,
337                 &pcibios_pir_table_nentries,
338                 &pcibios_pir_header.exclusive_irq) != PCIBIOS_SUCCESS) {
339                     aprint_normal("No PCI IRQ Routing information 
available.\n");
340                     free(pcibios_pir_table, M_DEVBUF);

-- 
                                                Greg A. Woods
                                                Planix, Inc.

<woods%planix.com@localhost>       +1 416 218 0099        http://www.planix.com/

Attachment: pgpeEkT0DZAH7.pgp
Description: PGP signature



Home | Main Index | Thread Index | Old Index