The following reply was made to PR kernel/6631; it has been noted by GNATS.
From: Mark Kettenis <mark.kette...@xs4all.nl> To: and...@afresh1.com Cc: gn...@openbsd.org Subject: Re: kernel/6631: DDB during boot on Dell Dimension E521 Date: Thu, 9 Jun 2011 23:13:09 +0200 (CEST) > Date: Thu, 9 Jun 2011 12:50:55 -0700 > From: Andrew Fresh <and...@afresh1.com> > > On Thu, Jun 09, 2011 at 09:26:04PM +0200, Mark Kettenis wrote: > > Can you send me pcidump -vxx output for that machine? > > Sure can. > > 0:0:5: NVIDIA C51 Memory > 0x0000: Vendor ID: 10de Product ID: 02ff > 0x0004: Command: 0006 Status ID: 00b0 > 0x0008: Class: 05 Subclass: 00 Interface: 00 Revision: a2 > 0x000c: BIST: 00 Header Type: 80 Latency Timer: 00 Cache Line Size: 00 > 0x0010: BAR empty (00000000) > 0x0014: BAR empty (00000000) > 0x0018: BAR empty (00000000) > 0x001c: BAR empty (00000000) > 0x0020: BAR empty (00000000) > 0x0024: BAR empty (00000000) > 0x0028: Cardbus CIS: 00000000 > 0x002c: Subsystem Vendor ID: 10de Product ID: 02ff > 0x0030: Expansion ROM Base Address: 00000000 > 0x0038: 00000000 > 0x003c: Interrupt Pin: 00 Line: ff Min Gnt: 00 Max Lat: 00 > 0x0044: Capability 0x00: Reserved > 0x0000: 02ff10de 00b00006 050000a2 00800000 > 0x0010: 00000000 00000000 00000000 00000000 > 0x0020: 00000000 00000000 00000000 02ff10de > 0x0030: 00000000 00000044 00000000 000000ff > 0x0040: 00000017 00fefe00 00fefe00 00fefe00 That PCI device has a broken Capabilities List. Can you try the diff below? Index: pci.c =================================================================== RCS file: /cvs/src/sys/dev/pci/pci.c,v retrieving revision 1.92 diff -u -p -r1.92 pci.c --- pci.c 30 May 2011 19:09:46 -0000 1.92 +++ pci.c 9 Jun 2011 21:10:22 -0000 @@ -564,10 +564,13 @@ pci_get_capability(pci_chipset_tag_t pc, ofs = PCI_CAPLIST_PTR(pci_conf_read(pc, tag, ofs)); while (ofs != 0) { -#ifdef DIAGNOSTIC + /* + * Some devices, like parts of the NVIDIA C51 chipset, + * have a broken Capabilities List. So we need to do + * a sanity check here. + */ if ((ofs & 3) || (ofs < 0x40)) - panic("pci_get_capability"); -#endif + return (0); reg = pci_conf_read(pc, tag, ofs); if (PCI_CAPLIST_CAP(reg) == capid) { if (offset)