Hi, 

Upgraded from kernel 2.4.26 to 2.4.31 and got problems with SATA SIL
controller.

This is the patch that fixes the problem (kernel VM access violation,
ksymoops output and this patch also attached):

========================================================================
--- linux-2.4.31/drivers/scsi/sata_sil.c        2005-06-01
04:56:56.000000000 +0400
+++ linux-2.4.31-lml/drivers/scsi/sata_sil.c    2005-08-16
00:27:43.000000000 +0400
@@ -427,7 +427,7 @@
                writeb(cls, mmio_base + SIL_FIFO_R0);
                writeb(cls, mmio_base + SIL_FIFO_W0);
                writeb(cls, mmio_base + SIL_FIFO_R1);
-               writeb(cls, mmio_base + SIL_FIFO_W2);
+               writeb(cls, mmio_base + SIL_FIFO_W1);
        } else
                printk(KERN_WARNING DRV_NAME "(%s): cache line size not
set.  Driver may not function\n",
                        pci_name(pdev));
=========================================================================

I don't understand too much about the mechanics of this driver, but it
seems that symmetry is violated by sequence R0,W0,R1,W2
After replacing it with R0,W0,R1,W1 I got the driver working so far.

This is my lspci for the card:

00:0b.0 RAID bus controller: CMD Technology Inc Silicon Image SiI 3112
SATARaid Controller (rev 01)

Thank you,

-- 
V.L.
--
Linux Media Labs
[EMAIL PROTECTED] http://linuxmedialabs.com
ksymoops 2.4.4 on i686 2.4.31smp.  Options used
     -V (default)
     -k /proc/ksyms (default)
     -l /proc/modules (default)
     -o /lib/modules/2.4.31smp/ (default)
     -m /boot/System.map-2.4.31smp (default)

Warning: You did not tell me where to find symbol information.  I will
assume that the log matches the kernel and modules that are running
right now and I'll use the default options above for symbol resolution.
If the current kernel and/or modules do not match the log, you can get
more accurate output by telling me the kernel version and where to find
map, modules, ksyms etc.  ksymoops -h explains the options.

Unable to handle kernel paging request at virtual address d882b041
d8825672
*pde = 014f2067
Oops: 0002
CPU:    1
EIP:    0010:[<d8825672>]    Not tainted
Using defaults from ksymoops -t elf32-i386 -a i386
EFLAGS: 00010216
eax: d882b041   ebx: 00000002   ecx: 00000008   edx: 00000000
esi: 00000002   edi: d49ef478   ebp: c554bea8   esp: c554be84
ds: 0018   es: 0018   ss: 0018
Process modprobe (pid: 18207, stackpage=c554b000)
Stack: d882b041 d8825982 000001ae c02b41e0 d882ae00 d49ef400 d88260c0 d88261a0 
       d7fe3800 c554bec8 c01f1ff4 d7fe3800 d88260c0 00000000 d7fe3800 d88261a0 
       00000000 c554bee4 c01f209c d88261a0 d7fe3800 ffffffea 00000002 00000002 
Call Trace:    [<d8825982>] [<d88260c0>] [<d88261a0>] [<c01f1ff4>] [<d88260c0>]
  [<d88261a0>] [<c01f209c>] [<d88261a0>] [<d8825825>] [<d88261a0>] [<c01229b9>]
  [<d8825060>] [<d8825060>] [<d8825c68>] [<d8825060>] [<d8825c80>] [<c0126f22>]
  [<d8825060>] [<c01095f7>]
Code: 88 18 8b 4d 0c 83 79 18 01 0f 84 cd 00 00 00 bf 00 00 c0 00 

>>EIP; d8825672 <[sata_sil]sil_init_one+2c2/460>   <=====
Trace; d8825982 <[sata_sil].text.end+c9/107>
Trace; d88260c0 <[sata_sil]sil_pci_tbl+0/0>
Trace; d88261a0 <[sata_sil]sil_pci_driver+0/40>
Trace; c01f1ff4 <pci_announce_device+34/70>
Trace; d88260c0 <[sata_sil]sil_pci_tbl+0/0>
Trace; d88261a0 <[sata_sil]sil_pci_driver+0/40>
Trace; c01f209c <pci_register_driver+6c/70>
Trace; d88261a0 <[sata_sil]sil_pci_driver+0/40>
Trace; d8825825 <[sata_sil]sil_init+15/80>
Trace; d88261a0 <[sata_sil]sil_pci_driver+0/40>
Trace; c01229b9 <sys_init_module+6c9/840>
Trace; d8825060 <[sata_sil]sil_get_device_cache_line+0/30>
Trace; d8825060 <[sata_sil]sil_get_device_cache_line+0/30>
Trace; d8825c68 <[sata_sil].rodata.end+1a5/5fd>
Trace; d8825060 <[sata_sil]sil_get_device_cache_line+0/30>
Trace; d8825c80 <[sata_sil].rodata.end+1bd/5fd>
Trace; c0126f22 <bh_action+82/e0>
Trace; d8825060 <[sata_sil]sil_get_device_cache_line+0/30>
Trace; c01095f7 <system_call+33/38>
Code;  d8825672 <[sata_sil]sil_init_one+2c2/460>
00000000 <_EIP>:
Code;  d8825672 <[sata_sil]sil_init_one+2c2/460>   <=====
   0:   88 18                     mov    %bl,(%eax)   <=====
Code;  d8825674 <[sata_sil]sil_init_one+2c4/460>
   2:   8b 4d 0c                  mov    0xc(%ebp),%ecx
Code;  d8825677 <[sata_sil]sil_init_one+2c7/460>
   5:   83 79 18 01               cmpl   $0x1,0x18(%ecx)
Code;  d882567b <[sata_sil]sil_init_one+2cb/460>
   9:   0f 84 cd 00 00 00         je     dc <_EIP+0xdc>
Code;  d8825681 <[sata_sil]sil_init_one+2d1/460>
   f:   bf 00 00 c0 00            mov    $0xc00000,%edi


1 warning issued.  Results may not be reliable.
--- linux-2.4.31/drivers/scsi/sata_sil.c        2005-06-01 04:56:56.000000000 
+0400
+++ linux-2.4.31-lml/drivers/scsi/sata_sil.c    2005-08-16 00:27:43.000000000 
+0400
@@ -427,7 +427,7 @@
                writeb(cls, mmio_base + SIL_FIFO_R0);
                writeb(cls, mmio_base + SIL_FIFO_W0);
                writeb(cls, mmio_base + SIL_FIFO_R1);
-               writeb(cls, mmio_base + SIL_FIFO_W2);
+               writeb(cls, mmio_base + SIL_FIFO_W1);
        } else
                printk(KERN_WARNING DRV_NAME "(%s): cache line size not set.  
Driver may not function\n",
                        pci_name(pdev));

Reply via email to