linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* OOPS 2.6.0-test2, modprobe i810fb
@ 2003-07-28 17:18 Pavel Rabel
  2003-07-29  2:19 ` S. Anderson
  0 siblings, 1 reply; 15+ messages in thread
From: Pavel Rabel @ 2003-07-28 17:18 UTC (permalink / raw)
  To: linux-kernel

[-- Attachment #1: Type: text/plain, Size: 77 bytes --]

Got this OOPS when trying "modprobe i810fb",
kernel 2.6.0-test2


-- 
Pavel


[-- Attachment #2: oops.txt --]
[-- Type: text/plain, Size: 2960 bytes --]

ksymoops 2.4.8 on i686 2.6.0-test2.  Options used
     -V (default)
     -k /proc/ksyms (default)
     -l /proc/modules (default)
     -o /lib/modules/2.6.0-test2/ (default)
     -m /boot/System.map-2.6.0-test2 (specified)

Error (regular_file): read_ksyms stat /proc/ksyms failed
No modules in ksyms, skipping objects
No ksyms, skipping lsmod
Unable to handle kernel paging request at virtual address d00fb018
c018abd9
*pde = 013be067
Oops: 0000 [#1]
CPU:    0
EIP:    0060:[<c018abd9>]    Not tainted
Using defaults from ksymoops -t elf32-i386 -a i386
EFLAGS: 00010296
eax: 00008086   ebx: c12c5000   ecx: d00fb018   edx: 00000000
esi: c12c5000   edi: d01372a0   ebp: d01372c8   esp: c2d29f28
ds: 007b   es: 007b   ss: 0068
Stack: ffffffed c018afd7 d00fae58 c12c5000 ffffffed d01372c8 c12c5054 c01b46f0 
       c12c5054 d01372c8 c12c505c c0267be4 d01372c8 c01b47e3 c12c5054 d01372c8 
       c0267b88 c0267b40 00000000 c01b4a2b d01372c8 d01372a0 00000000 d0137340 
Call Trace:
 [<c018afd7>] pci_bus_match+0x23/0xb8
 [<c01b46f0>] bus_match+0x20/0x64
 [<c01b47e3>] driver_attach+0x3f/0x54
 [<c01b4a2b>] bus_add_driver+0x6f/0x8c
 [<c01b4dac>] driver_register+0x34/0x38
 [<c018af44>] pci_register_driver+0x68/0x88
 [<d00fae1e>] init_module+0x3a/0x57 [i810fb]
 [<c0126d11>] sys_init_module+0xe5/0x1bc
 [<c0108993>] syscall_call+0x7/0xb
Code: 83 39 00 75 a2 83 79 08 00 75 9c 83 79 14 00 75 96 31 c0 5b 


>>EIP; c018abd9 <pci_match_device+69/80>   <=====

>>ebx; c12c5000 <_end+fced34/3fd07d34>
>>ecx; d00fb018 <_end+fe04d4c/3fd07d34>
>>esi; c12c5000 <_end+fced34/3fd07d34>
>>edi; d01372a0 <_end+fe40fd4/3fd07d34>
>>ebp; d01372c8 <_end+fe40ffc/3fd07d34>
>>esp; c2d29f28 <_end+2a33c5c/3fd07d34>

Trace; c018afd7 <pci_bus_match+23/b8>
Trace; c01b46f0 <bus_match+20/64>
Trace; c01b47e3 <driver_attach+3f/54>
Trace; c01b4a2b <bus_add_driver+6f/8c>
Trace; c01b4dac <driver_register+34/38>
Trace; c018af44 <pci_register_driver+68/88>
Trace; d00fae1e <_end+fe04b52/3fd07d34>
Trace; c0126d11 <sys_init_module+e5/1bc>
Trace; c0108993 <syscall_call+7/b>

Code;  c018abd9 <pci_match_device+69/80>
00000000 <_EIP>:
Code;  c018abd9 <pci_match_device+69/80>   <=====
   0:   83 39 00                  cmpl   $0x0,(%ecx)   <=====
Code;  c018abdc <pci_match_device+6c/80>
   3:   75 a2                     jne    ffffffa7 <_EIP+0xffffffa7>
Code;  c018abde <pci_match_device+6e/80>
   5:   83 79 08 00               cmpl   $0x0,0x8(%ecx)
Code;  c018abe2 <pci_match_device+72/80>
   9:   75 9c                     jne    ffffffa7 <_EIP+0xffffffa7>
Code;  c018abe4 <pci_match_device+74/80>
   b:   83 79 14 00               cmpl   $0x0,0x14(%ecx)
Code;  c018abe8 <pci_match_device+78/80>
   f:   75 96                     jne    ffffffa7 <_EIP+0xffffffa7>
Code;  c018abea <pci_match_device+7a/80>
  11:   31 c0                     xor    %eax,%eax
Code;  c018abec <pci_match_device+7c/80>
  13:   5b                        pop    %ebx


1 error issued.  Results may not be reliable.

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: OOPS 2.6.0-test2, modprobe i810fb
  2003-07-28 17:18 OOPS 2.6.0-test2, modprobe i810fb Pavel Rabel
@ 2003-07-29  2:19 ` S. Anderson
  2003-07-29  3:26   ` Andrew Morton
  0 siblings, 1 reply; 15+ messages in thread
From: S. Anderson @ 2003-07-29  2:19 UTC (permalink / raw)
  To: Pavel Rabel; +Cc: linux-kernel

On Mon, Jul 28, 2003 at 06:18:07PM +0100, Pavel Rabel wrote:
> Got this OOPS when trying "modprobe i810fb",
> kernel 2.6.0-test2
> 

I am also getting this oops, or somthing very simmillar.

I am new to kernel hacking, but I will try to explain what why I
think this is happening, and then hopefully someone will know how to fix
it :-).

basicly, in pci_bus_match(), when  *ids is assigned pci_drv->id_table
from a driver, (intel-agp, i810_audio and i810fb mabey others) the value
of ids->vendor is located at place where it cant be handled. Then further
up the line, the oops occurs at the pci_match_device() function when it 
tries to access ids->vendor. hopefully that makes sense.

I have added some debugging printks to pci_bus_match():

--- pci-driver.0.c      2003-07-27 15:40:56.000000000 -0600
+++ pci-driver.c        2003-07-28 19:51:47.000000000 -0600
@@ -48,6 +48,7 @@
 const struct pci_device_id *
 pci_match_device(const struct pci_device_id *ids, const struct pci_dev *dev)
 {
+       printk("pci_match_device: &ids->vendor = %p\n", &ids->vendor);
        while (ids->vendor || ids->subvendor || ids->class_mask) {
                if (pci_match_one_device(ids, dev))
                        return ids;
@@ -430,6 +431,12 @@
        if (!ids)
                return 0;
 
+       printk("pci_bus_match: bus=%d, devfn=%d %x %x\n",
+               pci_dev->bus->number, pci_dev->devfn, 
+               pci_dev->vendor,      pci_dev->device);
+       printk(" ^ matching? ^ (%s)  ((( &ids->vendor = %p )))\n", 
+                       pci_drv->name, &ids->vendor);
+
        found_id = pci_match_device(ids, pci_dev);
        if (found_id)
                return 1;

here is the output I get right before the oops + the oops run
through ksymoops

...
Adding 524280k swap on /swapfile.  Priority:-1 extents:209
mtrr: 0xe8000000,0x8000000 overlaps existing 0xe8000000,0x80000
 (pci_bus_add_devices) bus 3 devfn 0  1260 3890
pci_bus_match: bus=3, devfn=0 1260 3890
 ^ matching? ^ (agpgart-intel)  ((( &ids->vendor = c03f8e98 )))
pci_match_device: &ids->vendor = c03f8e98
Unable to handle kernel paging request at virtual address c03f8e98
 printing eip:
c01f7da3
... 

Error (regular_file): read_ksyms stat /proc/ksyms failed
No modules in ksyms, skipping objects
No ksyms, skipping lsmod
Unable to handle kernel paging request at virtual address c03f8e98
c01f7da3
*pde = 00102027
Oops: 0000 [#1]
CPU:    0
EIP:    0060:[<c01f7da3>]    Not tainted
Using defaults from ksymoops -t elf32-i386 -a i386
EFLAGS: 00010286
eax: 0000002a   ebx: c03f8e98   ecx: 00000001   edx: c036f238
esi: c748b004   edi: c748b004   ebp: cf5fde94   esp: cf5fde84
ds: 007b   es: 007b   ss: 0068
Stack: c0327020 c03f8e98 c03a65a0 c03f8e98 cf5fdeb4 c01f84fb c03f8e98 c748b004
       ffffffed c03a65c8 c748b058 c8f12004 cf5fded0 c022b599 c748b058 c03a65c8
       c03a6610 c03a10f4 c748b058 cf5fdeec c022b62a c748b058 c03a65c8 c03a1080
Call Trace:
 [<c01f84fb>] pci_bus_match+0x5f/0x2b0
 [<c022b599>] bus_match+0x21/0x64
 [<c022b62a>] device_attach+0x4e/0x70
 [<c022b7a2>] bus_add_device+0x72/0xb4
 [<c022a0e0>] device_add+0xd0/0x108
 [<c01f4864>] pci_bus_add_devices+0x50/0x300
 [<c026186d>] cb_alloc+0xad/0xc8
 [<c025e802>] socket_insert+0x56/0xa4
 [<c025ea11>] socket_detect_change+0x69/0x70
 [<c025ec07>] pccardd+0x1ef/0x2a0
 [<c025ea18>] pccardd+0x0/0x2a0
 [<c011ae7c>] default_wake_function+0x0/0x20
 [<c011ae7c>] default_wake_function+0x0/0x20
 [<c01070c5>] kernel_thread_helper+0x5/0xc
Code: 83 3b 00 75 a0 83 7b 08 00 75 9a 83 7b 14 00 75 94 31 c0 8d


>>EIP; c01f7da3 <pci_match_device+73/90>   <=====

>>ebx; c03f8e98 <agp_intel_pci_table+0/38>
>>edx; c036f238 <log_wait+18/20>
>>esi; c748b004 <_end+7066900/3fbd98fc>
>>edi; c748b004 <_end+7066900/3fbd98fc>
>>ebp; cf5fde94 <_end+f1d9790/3fbd98fc>
>>esp; cf5fde84 <_end+f1d9780/3fbd98fc>

Trace; c01f84fb <pci_bus_match+5f/2b0>
Trace; c022b599 <bus_match+21/64>
Trace; c022b62a <device_attach+4e/70>
Trace; c022b7a2 <bus_add_device+72/b4>
Trace; c022a0e0 <device_add+d0/108>
Trace; c01f4864 <pci_bus_add_devices+50/300>
Trace; c026186d <cb_alloc+ad/c8>
Trace; c025e802 <socket_insert+56/a4>
Trace; c025ea11 <socket_detect_change+69/70>
Trace; c025ec07 <pccardd+1ef/2a0>
Trace; c025ea18 <pccardd+0/2a0>
Trace; c011ae7c <default_wake_function+0/20>
Trace; c011ae7c <default_wake_function+0/20>
Trace; c01070c5 <kernel_thread_helper+5/c>

Code;  c01f7da3 <pci_match_device+73/90>
00000000 <_EIP>:
Code;  c01f7da3 <pci_match_device+73/90>   <=====
   0:   83 3b 00                  cmpl   $0x0,(%ebx)   <=====
Code;  c01f7da6 <pci_match_device+76/90>
   3:   75 a0                     jne    ffffffa5 <_EIP+0xffffffa5> c01f7d48 <pci_match_device+18/90>
Code;  c01f7da8 <pci_match_device+78/90>
   5:   83 7b 08 00               cmpl   $0x0,0x8(%ebx)
Code;  c01f7dac <pci_match_device+7c/90>
   9:   75 9a                     jne    ffffffa5 <_EIP+0xffffffa5> c01f7d48 <pci_match_device+18/90>
Code;  c01f7dae <pci_match_device+7e/90>
   b:   83 7b 14 00               cmpl   $0x0,0x14(%ebx)
Code;  c01f7db2 <pci_match_device+82/90>
   f:   75 94                     jne    ffffffa5 <_EIP+0xffffffa5> c01f7d48 <pci_match_device+18/90>
Code;  c01f7db4 <pci_match_device+84/90>
  11:   31 c0                     xor    %eax,%eax
Code;  c01f7db6 <pci_match_device+86/90>
  13:   8d 00                     lea    (%eax),%eax


1 warning and 1 error issued.  Results may not be reliable.


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: OOPS 2.6.0-test2, modprobe i810fb
  2003-07-29  2:19 ` S. Anderson
@ 2003-07-29  3:26   ` Andrew Morton
  2003-07-29  5:18     ` S. Anderson
  2003-07-29  9:34     ` Pavel Rabel
  0 siblings, 2 replies; 15+ messages in thread
From: Andrew Morton @ 2003-07-29  3:26 UTC (permalink / raw)
  To: S. Anderson; +Cc: pavel, linux-kernel, adaplas

"S. Anderson" <sa@xmission.com> wrote:
>
> On Mon, Jul 28, 2003 at 06:18:07PM +0100, Pavel Rabel wrote:
> > Got this OOPS when trying "modprobe i810fb",
> > kernel 2.6.0-test2
> > 
> 
> I am also getting this oops, or somthing very simmillar.

yay!  I finally fixed a bug! (sheesh, bad day).

The device table is not null-terminated so we run off the end during
matching and go oops.

I also moved all the statics out of i810_main.h and into i810_main.c. 
There is not a lot of point putting them in a header file: if any other .c
file includes the header we get multiple private instantiatiations of
all that stuff.



 drivers/video/i810/i810_main.c |   51 +++++++++++++++++++++++++++++++++++++++++
 drivers/video/i810/i810_main.h |   50 ----------------------------------------
 2 files changed, 51 insertions(+), 50 deletions(-)

diff -puN drivers/video/i810/i810_main.h~i810-fix drivers/video/i810/i810_main.h
--- 25/drivers/video/i810/i810_main.h~i810-fix	2003-07-28 20:20:15.000000000 -0700
+++ 25-akpm/drivers/video/i810/i810_main.h	2003-07-28 20:20:15.000000000 -0700
@@ -14,62 +14,12 @@
 #ifndef __I810_MAIN_H__
 #define __I810_MAIN_H__
 
-/* PCI */
-static const char *i810_pci_list[] __initdata = {
-	"Intel(R) 810 Framebuffer Device"                                 ,
-	"Intel(R) 810-DC100 Framebuffer Device"                           ,
-	"Intel(R) 810E Framebuffer Device"                                ,
-	"Intel(R) 815 (Internal Graphics 100Mhz FSB) Framebuffer Device"  ,
-	"Intel(R) 815 (Internal Graphics only) Framebuffer Device"        , 
-	"Intel(R) 815 (Internal Graphics with AGP) Framebuffer Device"  
-};
-
-static struct pci_device_id i810fb_pci_tbl[] __initdata = {
-	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810_IG1, 
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, 
-	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810_IG3,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1  },
-	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810E_IG,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2 },
-	/* mvo: added i815 PCI-ID */  
-	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82815_100,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3 },
-	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82815_NOAGP,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
-	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82815_CGC,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5 }
-};	  
-	             
 static int  __init i810fb_init_pci (struct pci_dev *dev, 
 				       const struct pci_device_id *entry);
 static void __exit i810fb_remove_pci(struct pci_dev *dev);
 static int i810fb_resume(struct pci_dev *dev);
 static int i810fb_suspend(struct pci_dev *dev, u32 state);
 
-static struct pci_driver i810fb_driver = {
-	.name     =	"i810fb",
-	.id_table =	i810fb_pci_tbl,
-	.probe    =	i810fb_init_pci,
-	.remove   =	__exit_p(i810fb_remove_pci),
-	.suspend  =     i810fb_suspend,
-	.resume   =     i810fb_resume,
-};	
-
-static int vram       __initdata = 4;
-static int bpp        __initdata = 8;
-static int mtrr       __initdata = 0;
-static int accel      __initdata = 0;
-static int hsync1     __initdata = 0;
-static int hsync2     __initdata = 0;
-static int vsync1     __initdata = 0;
-static int vsync2     __initdata = 0;
-static int xres       __initdata = 640;
-static int yres       __initdata = 480;
-static int vyres      __initdata = 0;
-static int sync       __initdata = 0;
-static int ext_vga    __initdata = 0;
-static int dcolor     __initdata = 0;
-
 /*
  * voffset - framebuffer offset in MiB from aperture start address.  In order for
  * the driver to work with X, we must try to use memory holes left untouched by X. The 
diff -puN drivers/video/i810/i810_main.c~i810-fix drivers/video/i810/i810_main.c
--- 25/drivers/video/i810/i810_main.c~i810-fix	2003-07-28 20:20:15.000000000 -0700
+++ 25-akpm/drivers/video/i810/i810_main.c	2003-07-28 20:20:15.000000000 -0700
@@ -56,6 +56,57 @@
 #include "i810.h"
 #include "i810_main.h"
 
+/* PCI */
+static const char *i810_pci_list[] __initdata = {
+	"Intel(R) 810 Framebuffer Device"                                 ,
+	"Intel(R) 810-DC100 Framebuffer Device"                           ,
+	"Intel(R) 810E Framebuffer Device"                                ,
+	"Intel(R) 815 (Internal Graphics 100Mhz FSB) Framebuffer Device"  ,
+	"Intel(R) 815 (Internal Graphics only) Framebuffer Device"        ,
+	"Intel(R) 815 (Internal Graphics with AGP) Framebuffer Device"
+};
+
+static struct pci_device_id i810fb_pci_tbl[] __initdata = {
+	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810_IG1,
+	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
+	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810_IG3,
+	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1  },
+	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810E_IG,
+	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2 },
+	/* mvo: added i815 PCI-ID */
+	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82815_100,
+	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3 },
+	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82815_NOAGP,
+	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
+	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82815_CGC,
+	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5 },
+	{ 0 },
+};
+
+static struct pci_driver i810fb_driver = {
+	.name     =	"i810fb",
+	.id_table =	i810fb_pci_tbl,
+	.probe    =	i810fb_init_pci,
+	.remove   =	__exit_p(i810fb_remove_pci),
+	.suspend  =     i810fb_suspend,
+	.resume   =     i810fb_resume,
+};
+
+static int vram       __initdata = 4;
+static int bpp        __initdata = 8;
+static int mtrr       __initdata = 0;
+static int accel      __initdata = 0;
+static int hsync1     __initdata = 0;
+static int hsync2     __initdata = 0;
+static int vsync1     __initdata = 0;
+static int vsync2     __initdata = 0;
+static int xres       __initdata = 640;
+static int yres       __initdata = 480;
+static int vyres      __initdata = 0;
+static int sync       __initdata = 0;
+static int ext_vga    __initdata = 0;
+static int dcolor     __initdata = 0;
+
 /*------------------------------------------------------------*/
 
 /**************************************************************

_


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: OOPS 2.6.0-test2, modprobe i810fb
  2003-07-29  3:26   ` Andrew Morton
@ 2003-07-29  5:18     ` S. Anderson
  2003-07-29  5:32       ` Andrew Morton
  2003-07-29  5:59       ` Andrew Morton
  2003-07-29  9:34     ` Pavel Rabel
  1 sibling, 2 replies; 15+ messages in thread
From: S. Anderson @ 2003-07-29  5:18 UTC (permalink / raw)
  To: Andrew Morton; +Cc: S. Anderson, pavel, linux-kernel, adaplas

On Mon, Jul 28, 2003 at 08:26:00PM -0700, Andrew Morton wrote:
> "S. Anderson" <sa@xmission.com> wrote:
> >
> > On Mon, Jul 28, 2003 at 06:18:07PM +0100, Pavel Rabel wrote:
> > > Got this OOPS when trying "modprobe i810fb",
> > > kernel 2.6.0-test2
> > > 
> > 
> > I am also getting this oops, or somthing very simmillar.
> 
> yay!  I finally fixed a bug! (sheesh, bad day).
> 
> The device table is not null-terminated so we run off the end during
> matching and go oops.
> 

Thanks, that fixes the oops Pavel reported!

But I now realize the oops I am getting is different...

It happens only if any of these "i810fb, i810_audio or intel-agp"
are compiled in the kernel or insterted as modules.

i810fb, i810_audio or intel-agp load up fine and seem to all work
properly. I only get the oops when I put a card into my cardbus slot.

this is what i think happens, when I put the card in, it sets off some
functions that will try to get a driver for the card I just inserted.
when it gets to the pci_bus_match function, my cards vendor and device 
numbers are tested against a drivers id_table. when that driver is 
"i810fb, i810_audio or intel-agp" (and i810fb, i810_audio or intel-agp
is allready loaded) the id_table is at an address that cant be handled, 
thus cauing the oops. I am having trouble figuring out why 
pci_drv->id_table isnt valid in this case.

Any ideas?

Thanks,
Shawn Anderson

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: OOPS 2.6.0-test2, modprobe i810fb
  2003-07-29  5:18     ` S. Anderson
@ 2003-07-29  5:32       ` Andrew Morton
  2003-07-30  2:56         ` Bill Davidsen
  2003-07-29  5:59       ` Andrew Morton
  1 sibling, 1 reply; 15+ messages in thread
From: Andrew Morton @ 2003-07-29  5:32 UTC (permalink / raw)
  To: S. Anderson; +Cc: sa, pavel, linux-kernel, adaplas

"S. Anderson" <sa@xmission.com> wrote:
>
> when that driver is 
>  "i810fb, i810_audio or intel-agp" (and i810fb, i810_audio or intel-agp
>  is allready loaded) the id_table is at an address that cant be handled, 
>  thus cauing the oops. I am having trouble figuring out why 
>  pci_drv->id_table isnt valid in this case.

Does this fix?  I'm not sure whether that "{ }" in there will generate
another table entry...


diff -puN drivers/char/agp/intel-agp.c~intel-agp-oops-fix drivers/char/agp/intel-agp.c
--- 25/drivers/char/agp/intel-agp.c~intel-agp-oops-fix	2003-07-28 22:30:30.000000000 -0700
+++ 25-akpm/drivers/char/agp/intel-agp.c	2003-07-28 22:30:53.000000000 -0700
@@ -1426,7 +1426,7 @@ static struct pci_device_id agp_intel_pc
 	.subvendor	= PCI_ANY_ID,
 	.subdevice	= PCI_ANY_ID,
 	},
-	{ }
+	{ 0, },
 };
 
 MODULE_DEVICE_TABLE(pci, agp_intel_pci_table);

_


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: OOPS 2.6.0-test2, modprobe i810fb
  2003-07-29  5:18     ` S. Anderson
  2003-07-29  5:32       ` Andrew Morton
@ 2003-07-29  5:59       ` Andrew Morton
  2003-07-29  7:24         ` S. Anderson
  1 sibling, 1 reply; 15+ messages in thread
From: Andrew Morton @ 2003-07-29  5:59 UTC (permalink / raw)
  To: S. Anderson; +Cc: sa, pavel, linux-kernel, adaplas

"S. Anderson" <sa@xmission.com> wrote:
>
> Thanks, that fixes the oops Pavel reported!
> 
> But I now realize the oops I am getting is different...
> 
> It happens only if any of these "i810fb, i810_audio or intel-agp"
> are compiled in the kernel or insterted as modules.
> 
> i810fb, i810_audio or intel-agp load up fine and seem to all work
> properly. I only get the oops when I put a card into my cardbus slot.
> 
> this is what i think happens, when I put the card in, it sets off some
> functions that will try to get a driver for the card I just inserted.
> when it gets to the pci_bus_match function, my cards vendor and device 
> numbers are tested against a drivers id_table. when that driver is 
> "i810fb, i810_audio or intel-agp" (and i810fb, i810_audio or intel-agp
> is allready loaded) the id_table is at an address that cant be handled, 
> thus cauing the oops. I am having trouble figuring out why 
> pci_drv->id_table isnt valid in this case.

Everything seems happy here:

vmm:/home/akpm> lsmod
Module                  Size  Used by
i810fb                 31572  0 
cfbcopyarea             4700  1 i810fb
vgastate               10660  1 i810fb
cfbimgblt               4068  1 i810fb
cfbfillrect             4820  1 i810fb
intel_agp              16940  1 
agpgart                32496  1 intel_agp
i810_audio             34208  0 
ac97_codec             18932  1 i810_audio
rtc                    15744  0 

Can you do modprobe-by-hand, see which one causes the oops?

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: OOPS 2.6.0-test2, modprobe i810fb
  2003-07-29  5:59       ` Andrew Morton
@ 2003-07-29  7:24         ` S. Anderson
  2003-07-29  7:54           ` Andrew Morton
  0 siblings, 1 reply; 15+ messages in thread
From: S. Anderson @ 2003-07-29  7:24 UTC (permalink / raw)
  To: Andrew Morton; +Cc: S. Anderson, pavel, linux-kernel, adaplas

On Mon, Jul 28, 2003 at 10:59:14PM -0700, Andrew Morton wrote:
> "S. Anderson" <sa@xmission.com> wrote:
> >
> > Thanks, that fixes the oops Pavel reported!
> > 
> > But I now realize the oops I am getting is different...
> > 
> > It happens only if any of these "i810fb, i810_audio or intel-agp"
> > are compiled in the kernel or insterted as modules.
> > 
> > i810fb, i810_audio or intel-agp load up fine and seem to all work
> > properly. I only get the oops when I put a card into my cardbus slot.
> > 
> > this is what i think happens, when I put the card in, it sets off some
> > functions that will try to get a driver for the card I just inserted.
> > when it gets to the pci_bus_match function, my cards vendor and device 
> > numbers are tested against a drivers id_table. when that driver is 
> > "i810fb, i810_audio or intel-agp" (and i810fb, i810_audio or intel-agp
> > is allready loaded) the id_table is at an address that cant be handled, 
> > thus cauing the oops. I am having trouble figuring out why 
> > pci_drv->id_table isnt valid in this case.
> 
> Everything seems happy here:
> 
> vmm:/home/akpm> lsmod
> Module                  Size  Used by
> i810fb                 31572  0 
> cfbcopyarea             4700  1 i810fb
> vgastate               10660  1 i810fb
> cfbimgblt               4068  1 i810fb
> cfbfillrect             4820  1 i810fb
> intel_agp              16940  1 
> agpgart                32496  1 intel_agp
> i810_audio             34208  0 
> ac97_codec             18932  1 i810_audio
> rtc                    15744  0 
> 
> Can you do modprobe-by-hand, see which one causes the oops?

I will try to explain the problem better.

First of all, I can modprobe all three of these modules with no problems.

the oops only occurs when one of these modules are modprobed
_before_ I insert a card into my cardbus.

With no modules inserted, I can insert my card into the cardbus slot 
with no problems. This is what my log looks like. (with my debugging printk)

Jul 29 00:28:48 localhost kernel:  (pci_bus_add_devices) bus 3 devfn 0  1260 3890
Jul 29 00:28:48 localhost kernel: pci_bus_match: bus=3, devfn=0 1260 3890
Jul 29 00:28:48 localhost kernel:  ^ matching? ^ (serial)  ((( &ids->vendor = c0397314 )))
Jul 29 00:28:48 localhost kernel: pci_match_device: &ids->vendor = c0397314
Jul 29 00:28:48 localhost kernel: pci_bus_match: bus=3, devfn=0 1260 3890
Jul 29 00:28:48 localhost kernel:  ^ matching? ^ (eepro100)  ((( &ids->vendor = c0398a60 )))
Jul 29 00:28:48 localhost kernel: pci_match_device: &ids->vendor = c0398a60
Jul 29 00:28:48 localhost kernel: pci_bus_match: bus=3, devfn=0 1260 3890
Jul 29 00:28:48 localhost kernel:  ^ matching? ^ (PCI IDE)  ((( &ids->vendor = c039a630 )))
Jul 29 00:28:48 localhost kernel: pci_match_device: &ids->vendor = c039a630
Jul 29 00:28:48 localhost kernel: pci_bus_match: bus=3, devfn=0 1260 3890
Jul 29 00:28:48 localhost kernel:  ^ matching? ^ (yenta_cardbus)  ((( &ids->vendor = c039df98 )))
Jul 29 00:28:48 localhost kernel: pci_match_device: &ids->vendor = c039df98
Jul 29 00:28:48 localhost pci.agent: ... no modules for PCI slot 0000:03:00.0

then I take my card out of its slot and 
then modprobe i810fb (I could modprobe i810_audio or intel-agp or 
all three at the same time)

Jul 29 00:33:48 localhost kernel: pci_bus_match: bus=0, devfn=0 8086 3575
Jul 29 00:33:48 localhost kernel:  ^ matching? ^ (i810fb)  ((( &ids->vendor = d094ee7c )))
Jul 29 00:33:48 localhost kernel: pci_match_device: &ids->vendor = d094ee7c
Jul 29 00:33:48 localhost kernel: pci_bus_match: bus=0, devfn=16 8086 3577
Jul 29 00:33:48 localhost kernel:  ^ matching? ^ (i810fb)  ((( &ids->vendor = d094ee7c )))
Jul 29 00:33:48 localhost kernel: pci_match_device: &ids->vendor = d094ee7c
Jul 29 00:33:48 localhost kernel: pci_bus_match: bus=0, devfn=17 8086 3577
Jul 29 00:33:48 localhost kernel:  ^ matching? ^ (i810fb)  ((( &ids->vendor = d094ee7c )))
Jul 29 00:33:48 localhost kernel: pci_match_device: &ids->vendor = d094ee7c
Jul 29 00:33:48 localhost kernel: pci_bus_match: bus=0, devfn=232 8086 2482
Jul 29 00:33:48 localhost kernel:  ^ matching? ^ (i810fb)  ((( &ids->vendor = d094ee7c )))
Jul 29 00:33:48 localhost kernel: pci_match_device: &ids->vendor = d094ee7c
[..snip..]

then when i insert my card again this is when the oops occurs:

Jul 29 00:40:12 localhost kernel:  (pci_bus_add_devices) bus 3 devfn 0  1260 3890
Jul 29 00:40:12 localhost kernel: pci_bus_match: bus=3, devfn=0 1260 3890
Jul 29 00:40:12 localhost kernel:  ^ matching? ^ (serial)  ((( &ids->vendor = c0397314 )))
Jul 29 00:40:12 localhost kernel: pci_match_device: &ids->vendor = c0397314
Jul 29 00:40:12 localhost kernel: pci_bus_match: bus=3, devfn=0 1260 3890
Jul 29 00:40:12 localhost kernel:  ^ matching? ^ (eepro100)  ((( &ids->vendor = c0398a60 )))
Jul 29 00:40:12 localhost kernel: pci_match_device: &ids->vendor = c0398a60
Jul 29 00:40:12 localhost kernel: pci_bus_match: bus=3, devfn=0 1260 3890
Jul 29 00:40:12 localhost kernel:  ^ matching? ^ (PCI IDE)  ((( &ids->vendor = c039a630 )))
Jul 29 00:40:12 localhost kernel: pci_match_device: &ids->vendor = c039a630
Jul 29 00:40:12 localhost kernel: pci_bus_match: bus=3, devfn=0 1260 3890
Jul 29 00:40:12 localhost kernel:  ^ matching? ^ (yenta_cardbus)  ((( &ids->vendor = c039df98 )))
Jul 29 00:40:12 localhost kernel: pci_match_device: &ids->vendor = c039df98
Jul 29 00:40:12 localhost pci.agent: ... no modules for PCI slot 0000:03:00.0
Jul 29 00:40:12 localhost kernel: pci_bus_match: bus=3, devfn=0 1260 3890
Jul 29 00:40:12 localhost kernel:  ^ matching? ^ (i810fb)  ((( &ids->vendor = d094ee7c )))
Jul 29 00:40:12 localhost kernel: pci_match_device: &ids->vendor = d094ee7c
Jul 29 00:40:12 localhost kernel: Unable to handle kernel paging request at virtual address d094ee7c
Jul 29 00:40:12 localhost kernel:  printing eip:
Jul 29 00:40:12 localhost kernel: c01f7da3
Jul 29 00:40:12 localhost kernel: *pde = 0f913067
Jul 29 00:40:12 localhost kernel: *pte = 00000000
Jul 29 00:40:12 localhost kernel: Oops: 0000 [#1]
Jul 29 00:40:12 localhost kernel: CPU:    0
Jul 29 00:40:12 localhost kernel: EIP:    0060:[quirk_transparent_bridge+15/20]    Not tainted
Jul 29 00:40:12 localhost kernel: EIP:    0060:[<c01f7da3>]    Not tainted
Jul 29 00:40:12 localhost kernel: EFLAGS: 00010286
Jul 29 00:40:12 localhost kernel: EIP is at pci_match_device+0x73/0x90
Jul 29 00:40:12 localhost kernel: eax: 0000002a   ebx: d094ee7c   ecx: 00000001   edx: c035fa38
Jul 29 00:40:12 localhost kernel: esi: c67c4004   edi: c67c4004   ebp: cf619e94   esp: cf619e84
Jul 29 00:40:12 localhost kernel: ds: 007b   es: 007b   ss: 0068
Jul 29 00:40:12 localhost kernel: Process pccardd (pid: 9, threadinfo=cf618000 task=cf636000)
Jul 29 00:40:12 localhost kernel: Stack: c031aa20 d094ee7c d096e800 d094ee7c cf619eb4 c01f84fb d094ee7c c67c4004 
Jul 29 00:40:12 localhost kernel:        ffffffed d096e828 c67c4058 c039e09c cf619ed0 c021f0f9 c67c4058 d096e828 
Jul 29 00:40:12 localhost kernel:        d096e870 c03918f4 c67c4058 cf619eec c021f18a c67c4058 d096e828 c0391880 
Jul 29 00:40:12 localhost kernel: Call Trace:
Jul 29 00:40:12 localhost kernel:  [pci_free_dynids+3/360] pci_bus_match+0x5f/0x2b0
Jul 29 00:40:12 localhost kernel:  [<c01f84fb>] pci_bus_match+0x5f/0x2b0
Jul 29 00:40:12 localhost kernel:  [acpi_tb_verify_table_checksum+113/148] bus_match+0x21/0x64
Jul 29 00:40:12 localhost kernel:  [<c021f0f9>] bus_match+0x21/0x64
Jul 29 00:40:12 localhost kernel:  [acpi_tb_find_table+58/308] device_attach+0x4e/0x70
Jul 29 00:40:12 localhost kernel:  [<c021f18a>] device_attach+0x4e/0x70
Jul 29 00:40:12 localhost kernel:  [acpi_get_firmware_table+126/848] bus_add_device+0x72/0xb4
Jul 29 00:40:12 localhost kernel:  [<c021f302>] bus_add_device+0x72/0xb4
Jul 29 00:40:12 localhost kernel:  [acpi_tb_verify_rsdp+320/344] device_add+0xd0/0x108
Jul 29 00:40:12 localhost kernel:  [<c021dc40>] device_add+0xd0/0x108
Jul 29 00:40:12 localhost kernel:  [pci_bus_write_config_word+100/324] pci_bus_add_devices+0x50/0x300
Jul 29 00:40:12 localhost kernel:  [<c01f4864>] pci_bus_add_devices+0x50/0x300
Jul 29 00:40:12 localhost kernel:  [i830_cleanup_buf_error+121/184] cb_alloc+0xad/0xc8
Jul 29 00:40:12 localhost kernel:  [<c02553cd>] cb_alloc+0xad/0xc8
Jul 29 00:40:12 localhost kernel:  [agp_3_5_isochronous_node_enable+342/1020] socket_insert+0x56/0xa4
Jul 29 00:40:12 localhost kernel:  [<c0252362>] socket_insert+0x56/0xa4
Jul 29 00:40:12 localhost kernel:  [agp_3_5_isochronous_node_enable+869/1020] socket_detect_change+0x69/0x70
Jul 29 00:40:13 localhost kernel:  [<c0252571>] socket_detect_change+0x69/0x70
Jul 29 00:40:13 localhost kernel:  [agp_3_5_enable+167/704] pccardd+0x1ef/0x2a0
Jul 29 00:40:13 localhost kernel:  [<c0252767>] pccardd+0x1ef/0x2a0
Jul 29 00:40:13 localhost kernel:  [agp_3_5_isochronous_node_enable+876/1020] pccardd+0x0/0x2a0
Jul 29 00:40:13 localhost kernel:  [<c0252578>] pccardd+0x0/0x2a0
Jul 29 00:40:13 localhost kernel:  [schedule+404/1156] default_wake_function+0x0/0x20
Jul 29 00:40:13 localhost kernel:  [<c011ae7c>] default_wake_function+0x0/0x20
Jul 29 00:40:13 localhost kernel:  [schedule+404/1156] default_wake_function+0x0/0x20
Jul 29 00:40:13 localhost kernel:  [<c011ae7c>] default_wake_function+0x0/0x20
Jul 29 00:40:13 localhost kernel:  [kernel_thread_helper+5/12] kernel_thread_helper+0x5/0xc
Jul 29 00:40:13 localhost kernel:  [<c01070c5>] kernel_thread_helper+0x5/0xc
Jul 29 00:40:13 localhost kernel: 
Jul 29 00:40:13 localhost kernel: Code: 83 3b 00 75 a0 83 7b 08 00 75 9a 83 7b 14 00 75 94 31 c0 8d 

I hope this makes sense.

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: OOPS 2.6.0-test2, modprobe i810fb
  2003-07-29  7:24         ` S. Anderson
@ 2003-07-29  7:54           ` Andrew Morton
  2003-07-29  8:18             ` S. Anderson
  2003-07-29 12:00             ` Alan Cox
  0 siblings, 2 replies; 15+ messages in thread
From: Andrew Morton @ 2003-07-29  7:54 UTC (permalink / raw)
  To: S. Anderson; +Cc: sa, pavel, linux-kernel, adaplas

"S. Anderson" <sa@xmission.com> wrote:
>
> Jul 29 00:33:48 localhost kernel: pci_bus_match: bus=0, devfn=232 8086 2482
>  Jul 29 00:33:48 localhost kernel:  ^ matching? ^ (i810fb)  ((( &ids->vendor = d094ee7c )))
>  Jul 29 00:33:48 localhost kernel: pci_match_device: &ids->vendor = d094ee7c
>  [..snip..]
> 
>  then when i insert my card again this is when the oops occurs:
> 
>  Jul 29 00:40:12 localhost kernel:  (pci_bus_add_devices) bus 3 devfn 0  1260 3890
>  Jul 29 00:40:12 localhost kernel: pci_bus_match: bus=3, devfn=0 1260 3890
>  Jul 29 00:40:12 localhost kernel:  ^ matching? ^ (serial)  ((( &ids->vendor = c0397314 )))
>  Jul 29 00:40:12 localhost kernel: pci_match_device: &ids->vendor = c0397314
>  Jul 29 00:40:12 localhost kernel: pci_bus_match: bus=3, devfn=0 1260 3890
>  Jul 29 00:40:12 localhost kernel:  ^ matching? ^ (eepro100)  ((( &ids->vendor = c0398a60 )))
>  Jul 29 00:40:12 localhost kernel: pci_match_device: &ids->vendor = c0398a60
>  Jul 29 00:40:12 localhost kernel: pci_bus_match: bus=3, devfn=0 1260 3890
>  Jul 29 00:40:12 localhost kernel:  ^ matching? ^ (PCI IDE)  ((( &ids->vendor = c039a630 )))
>  Jul 29 00:40:12 localhost kernel: pci_match_device: &ids->vendor = c039a630
>  Jul 29 00:40:12 localhost kernel: pci_bus_match: bus=3, devfn=0 1260 3890
>  Jul 29 00:40:12 localhost kernel:  ^ matching? ^ (yenta_cardbus)  ((( &ids->vendor = c039df98 )))
>  Jul 29 00:40:12 localhost kernel: pci_match_device: &ids->vendor = c039df98
>  Jul 29 00:40:12 localhost pci.agent: ... no modules for PCI slot 0000:03:00.0
>  Jul 29 00:40:12 localhost kernel: pci_bus_match: bus=3, devfn=0 1260 3890
>  Jul 29 00:40:12 localhost kernel:  ^ matching? ^ (i810fb)  ((( &ids->vendor = d094ee7c )))
>  Jul 29 00:40:12 localhost kernel: pci_match_device: &ids->vendor = d094ee7c
>  Jul 29 00:40:12 localhost kernel: Unable to handle kernel paging request at virtual address d094ee7c

wtf?  So the memory at d094ee7c (which contains i810fb's pci table) became
unmapped from kernel virtual address space as a result of you inserting
your carbus card.

I am impressed.

Jsut as a crazy test, could you delete /sbin/rmmod and see if it still
happens?  Maybe something is removing the module at an embarrassing time or
something.


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: OOPS 2.6.0-test2, modprobe i810fb
  2003-07-29  7:54           ` Andrew Morton
@ 2003-07-29  8:18             ` S. Anderson
  2003-07-29 12:00             ` Alan Cox
  1 sibling, 0 replies; 15+ messages in thread
From: S. Anderson @ 2003-07-29  8:18 UTC (permalink / raw)
  To: Andrew Morton; +Cc: S. Anderson, pavel, linux-kernel, adaplas

On Tue, Jul 29, 2003 at 12:54:56AM -0700, Andrew Morton wrote:
> "S. Anderson" <sa@xmission.com> wrote:
> >
> >  Jul 29 00:40:12 localhost kernel: pci_match_device: &ids->vendor = d094ee7c
> >  Jul 29 00:40:12 localhost kernel: Unable to handle kernel paging request at virtual address d094ee7c
> 
> wtf?  So the memory at d094ee7c (which contains i810fb's pci table) became
> unmapped from kernel virtual address space as a result of you inserting
> your carbus card.
> 
> I am impressed.
> 
> Jsut as a crazy test, could you delete /sbin/rmmod and see if it still
> happens?  Maybe something is removing the module at an embarrassing time or
> something.
> 

I moved /sbin/rmmod* out of my path and I still get the oop. :-)

I will try to hack something together to find out if inserting a carbus
card unmaps i810fb's pci table, or if something else is doing it.

thanks,
Shawn Anderson

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: OOPS 2.6.0-test2, modprobe i810fb
  2003-07-29  3:26   ` Andrew Morton
  2003-07-29  5:18     ` S. Anderson
@ 2003-07-29  9:34     ` Pavel Rabel
  1 sibling, 0 replies; 15+ messages in thread
From: Pavel Rabel @ 2003-07-29  9:34 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-kernel

Applied the patch, no OOPSing now, thanks.

Pavel

On Mon, Jul 28, 2003 at 08:26:00PM -0700, Andrew Morton wrote:
> "S. Anderson" <sa@xmission.com> wrote:
> >
> > On Mon, Jul 28, 2003 at 06:18:07PM +0100, Pavel Rabel wrote:
> > > Got this OOPS when trying "modprobe i810fb",
> > > kernel 2.6.0-test2
> > > 
> > 
> > I am also getting this oops, or somthing very simmillar.
> 
> yay!  I finally fixed a bug! (sheesh, bad day).
> 
> The device table is not null-terminated so we run off the end during
> matching and go oops.
> 
> I also moved all the statics out of i810_main.h and into i810_main.c. 
> There is not a lot of point putting them in a header file: if any other .c
> file includes the header we get multiple private instantiatiations of
> all that stuff.


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: OOPS 2.6.0-test2, modprobe i810fb
  2003-07-29  7:54           ` Andrew Morton
  2003-07-29  8:18             ` S. Anderson
@ 2003-07-29 12:00             ` Alan Cox
  2003-07-29 19:59               ` Andrew Morton
  2003-07-29 23:04               ` S. Anderson
  1 sibling, 2 replies; 15+ messages in thread
From: Alan Cox @ 2003-07-29 12:00 UTC (permalink / raw)
  To: Andrew Morton; +Cc: S. Anderson, pavel, Linux Kernel Mailing List, adaplas

On Maw, 2003-07-29 at 08:54, Andrew Morton wrote:
> wtf?  So the memory at d094ee7c (which contains i810fb's pci table) became
> unmapped from kernel virtual address space as a result of you inserting
> your carbus card.
> 
> I am impressed.

This makes complete sense actually - its marked __initdata. Remove the
__initdata and try again or mark it __devinitdata ?


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: OOPS 2.6.0-test2, modprobe i810fb
  2003-07-29 12:00             ` Alan Cox
@ 2003-07-29 19:59               ` Andrew Morton
  2003-07-29 23:04               ` S. Anderson
  1 sibling, 0 replies; 15+ messages in thread
From: Andrew Morton @ 2003-07-29 19:59 UTC (permalink / raw)
  To: Alan Cox; +Cc: sa, pavel, linux-kernel, adaplas

Alan Cox <alan@lxorguk.ukuu.org.uk> wrote:
>
> On Maw, 2003-07-29 at 08:54, Andrew Morton wrote:
> > wtf?  So the memory at d094ee7c (which contains i810fb's pci table) became
> > unmapped from kernel virtual address space as a result of you inserting
> > your carbus card.
> > 
> > I am impressed.
> 
> This makes complete sense actually - its marked __initdata. Remove the
> __initdata and try again or mark it __devinitdata ?

hmm, that's a bug if the driver is statically linked, but afaik we're not
dropping the __init sections from modules yet.  Or did that change?

Still.  A grep finds forty-odd instances of "pci_device_id.*__initdata".  I
think I'll go convert them all to __devinitdata.


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: OOPS 2.6.0-test2, modprobe i810fb
  2003-07-29 12:00             ` Alan Cox
  2003-07-29 19:59               ` Andrew Morton
@ 2003-07-29 23:04               ` S. Anderson
  1 sibling, 0 replies; 15+ messages in thread
From: S. Anderson @ 2003-07-29 23:04 UTC (permalink / raw)
  To: Alan Cox
  Cc: Andrew Morton, S. Anderson, pavel, Linux Kernel Mailing List, adaplas

On Tue, Jul 29, 2003 at 01:00:40PM +0100, Alan Cox wrote:
> On Maw, 2003-07-29 at 08:54, Andrew Morton wrote:
> > wtf?  So the memory at d094ee7c (which contains i810fb's pci table) became
> > unmapped from kernel virtual address space as a result of you inserting
> > your carbus card.
> > 
> > I am impressed.
> 
> This makes complete sense actually - its marked __initdata. Remove the
> __initdata and try again or mark it __devinitdata ?
> 

Just to confirm your findings:
Changing __initdata to __devinitdata fixes the oops for me.

Thanks!
sa

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: OOPS 2.6.0-test2, modprobe i810fb
  2003-07-29  5:32       ` Andrew Morton
@ 2003-07-30  2:56         ` Bill Davidsen
  2003-07-30 20:56           ` Michael Driscoll
  0 siblings, 1 reply; 15+ messages in thread
From: Bill Davidsen @ 2003-07-30  2:56 UTC (permalink / raw)
  To: Andrew Morton; +Cc: S. Anderson, pavel, linux-kernel, adaplas

On Mon, 28 Jul 2003, Andrew Morton wrote:

> "S. Anderson" <sa@xmission.com> wrote:
> >
> > when that driver is 
> >  "i810fb, i810_audio or intel-agp" (and i810fb, i810_audio or intel-agp
> >  is allready loaded) the id_table is at an address that cant be handled, 
> >  thus cauing the oops. I am having trouble figuring out why 
> >  pci_drv->id_table isnt valid in this case.
> 
> Does this fix?  I'm not sure whether that "{ }" in there will generate
> another table entry...
> 
> 
> diff -puN drivers/char/agp/intel-agp.c~intel-agp-oops-fix drivers/char/agp/intel-agp.c
> --- 25/drivers/char/agp/intel-agp.c~intel-agp-oops-fix	2003-07-28 22:30:30.000000000 -0700
> +++ 25-akpm/drivers/char/agp/intel-agp.c	2003-07-28 22:30:53.000000000 -0700
> @@ -1426,7 +1426,7 @@ static struct pci_device_id agp_intel_pc
>  	.subvendor	= PCI_ANY_ID,
>  	.subdevice	= PCI_ANY_ID,
>  	},
> -	{ }
> +	{ 0, },
>  };
>  
>  MODULE_DEVICE_TABLE(pci, agp_intel_pci_table);
> 
> _

Sure about that last comma? Any compiler version issues?

-- 
bill davidsen <davidsen@tmr.com>
  CTO, TMR Associates, Inc
Doing interesting things with little computers since 1979.


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: OOPS 2.6.0-test2, modprobe i810fb
  2003-07-30  2:56         ` Bill Davidsen
@ 2003-07-30 20:56           ` Michael Driscoll
  0 siblings, 0 replies; 15+ messages in thread
From: Michael Driscoll @ 2003-07-30 20:56 UTC (permalink / raw)
  To: linux-kernel

On Tuesday 29 July 2003 20:56, Bill Davidsen wrote:
> > diff -puN drivers/char/agp/intel-agp.c~intel-agp-oops-fix
> > drivers/char/agp/intel-agp.c ---
> > 25/drivers/char/agp/intel-agp.c~intel-agp-oops-fix	2003-07-28
> > 22:30:30.000000000 -0700 +++
> > 25-akpm/drivers/char/agp/intel-agp.c	2003-07-28 22:30:53.000000000 -0700
> > @@ -1426,7 +1426,7 @@ static struct pci_device_id agp_intel_pc
> >  	.subvendor	= PCI_ANY_ID,
> >  	.subdevice	= PCI_ANY_ID,
> >  	},
> > -	{ }
> > +	{ 0, },
> >  };
> >
> >  MODULE_DEVICE_TABLE(pci, agp_intel_pci_table);
> >
> > _
>
> Sure about that last comma? Any compiler version issues?

It's allowed in K&R2 (and explicitly marked as a feature, see pp.218-219).

I don't have C99 handy but I'm pretty sure it's still legal.

-- 
Michael Driscoll, fenris@ulfheim.net
"A noble spirit embiggens the smallest man" -- J. Springfield

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2003-07-30 20:57 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-07-28 17:18 OOPS 2.6.0-test2, modprobe i810fb Pavel Rabel
2003-07-29  2:19 ` S. Anderson
2003-07-29  3:26   ` Andrew Morton
2003-07-29  5:18     ` S. Anderson
2003-07-29  5:32       ` Andrew Morton
2003-07-30  2:56         ` Bill Davidsen
2003-07-30 20:56           ` Michael Driscoll
2003-07-29  5:59       ` Andrew Morton
2003-07-29  7:24         ` S. Anderson
2003-07-29  7:54           ` Andrew Morton
2003-07-29  8:18             ` S. Anderson
2003-07-29 12:00             ` Alan Cox
2003-07-29 19:59               ` Andrew Morton
2003-07-29 23:04               ` S. Anderson
2003-07-29  9:34     ` Pavel Rabel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).