PCI oops in 2.1.51

David Woodhouse (D.W.Woodhouse@nortel.co.uk)
Wed, 20 Aug 1997 14:17:18 +0100


I was investigating why the 3c59x driver was only detecting one card instead
of two, when `cat /proc/pci` generated the following:

Unable to handle kernel NULL pointer dereference at virtual address 00000000
current->tss.cr3 = 00892000, ^Xr3 = 00892000
*pde = 00000000
Oops: 0000
CPU: 0
EIP: 0010:[<c01a67ab>]
EFLAGS: 00010246
eax: 00000000 ebx: 0000008f ecx: ffffffff edx: 00000000
esi: 00000068 edi: 00000000 ebp: c022ac00 esp: c0891ed0
ds: 0018 es: 0018 ss: 0018
Process cat (pid: 300, process nr: 22, stackpage=c0891000)
Stack: 00000013 c089a013 c01bbe5c c089a000 c089a000 00000073 c1009000 c0873000
c0891f48 c01bbe6e 00000068 00000001 00000293 ffff3cc0 ffffffff 10b6ffff
02000000 c01a6af9 c022ac00 c089a013 00000fc9 00000000 c0891f98 c0c195a0
Call Trace: [<c01bbe5c>] [<c01bbe6e>] [<c01a6af9>] [<c014760e>] [<c014780e>]
[<c01109bb>] [<c012776f>]
[<c01098d6>]
Code: f2 ae f7 d1 49 01 d9 89 4c 24 14 8b 44 24 50 39 c1 0f 87 c0

Using `../System.map' to map addresses to symbols.

>>EIP: c01a67ab <sprint_dev_config+203/4f8>
Trace: c01bbe5c <NR_TYPES+1e30/1f5f>
Trace: c01bbe6e <NR_TYPES+1e42/1f5f>
Trace: c01a6af9 <get_pci_list+59/94>
Trace: c014760e <get_root_array+d6/1a0>
Trace: c014780e <array_read+ae/238>
Trace: c01109bb <do_page_fault+18f/384>
Trace: c012776f <sys_read+10f/178>
Trace: c01098d6 <system_call+3a/40>

Code: c01a67ab <sprint_dev_config+203/4f8>
Code: c01a67ab <sprint_dev_config+203/4f8> f2 ae repnz scasb
%es:(%edi),%al
Code: c01a67ad <sprint_dev_config+205/4f8> f7 d1 notl %ecx
Code: c01a67af <sprint_dev_config+207/4f8> 49 decl %ecx
Code: c01a67b0 <sprint_dev_config+208/4f8> 01 d9 addl
%ebx,%ecx
Code: c01a67b2 <sprint_dev_config+20a/4f8> 89 4c 24 14 movl
%ecx,0x14(%esp,1)
Code: c01a67bc <sprint_dev_config+214/4f8> 8b 44 24 50 movl
0x50(%esp,1),%eax
Code: c01a67c0 <sprint_dev_config+218/4f8> 39 c1 cmpl
%eax,%ecx
Code: c01a67c2 <sprint_dev_config+21a/4f8> 0f 87 c0 00 90 ja
909000d7 <_EIP+909000d7>
Code: c01a67cd <sprint_dev_config+225/4f8> 90
Code: c01a67ce <sprint_dev_config+226/4f8> 90 nop

(That's odd: Note the corruption of the second "cr3" in the oops message...)

passport_simulator /usr/src/linux/scripts # cat /var/log/messages | grep cr3
Aug 20 12:15:33 passport_simulator kernel: current->tss.cr3 = 0095b000, <r3 =
0095b000
Aug 20 12:15:40 passport_simulator kernel: current->tss.cr3 = 0095b000, <r3 =
0095b000
Aug 20 12:15:41 passport_simulator kernel: current->tss.cr3 = 007c0000, <r3 =
007c0000
Aug 20 12:15:41 passport_simulator kernel: current->tss.cr3 = 007c0000, <r3 =
007c0000
Aug 20 12:47:20 passport_simulator kernel: current->tss.cr3 = 00aa8000, ^Xr3 =
00aa8000
Aug 20 14:24:43 passport_simulator kernel: current->tss.cr3 = 00892000, ^Xr3 =
00892000

This machine is a Toshiba laptop, which complains of three unknown PCI devices
at boot. Could it be that the device info structures aren't set up correctly
for unknown devices, triggering the oops later when the device list is
traversed?

I'd look into it further before asking, but someone's using the machine at the
moment, and I can't find any more of them with Linux on.

-- 
David Woodhouse,	CB3 9AN		http://dwmw2.robinson.cam.ac.uk/
	dwmw2@cam.ac.uk 		 Tel: 0976 658355        
	D.W.Woodhouse@nortel.co.uk	 Tel: 01279 402332