Date: Sat, 25 Jun 2005 17:35:02 +1000 From: Johny Mattsson <lonewolf-freebsd@earthmagic.org> To: freebsd-stable@freebsd.org Cc: twesky@gmail.com, sos@freebsd.org Subject: Re: ATA_DMA errors - [ workaround for me ] Message-ID: <42BD0926.8000804@earthmagic.org> In-Reply-To: <8d02aed005062412001c7903b3@mail.gmail.com> References: <8d02aed00506181404642100b9@mail.gmail.com> <42BC5353.1090807@earthmagic.org> <8d02aed005062412001c7903b3@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi all, Today I've taken a fresh stab at the problem (I'm never at my best at 5am in the morning having worked through the night), and I have managed to come up with what appears to amount to a successful workaround. It would be good if my observations could be confirmed by someone else. Basically, the problem seems to be related to using more than one channel on the IDE controller. Data points for this are: [ SiI 0680 ] Channel 1: 40 GB Seagate Channel 2: 60 GB Seagate + 160 GB Western Digital Result: 200k worth of "DMA_READ timed out" and "DMA_WRITE UDMA ICRC error" messages, inability to obtain SMART info from the WD drive, WD drive info garbled, and WD drive being removed/detached from the config. The errors only appeared after a few hours operation, but once they were there, no amount of reboots would get rid of them/improve the situation. To attempt to save the data on the WD disk before the FS got completely hammered, I pulled it out, and observed the following: [ SiI 0680 ] Channel 1: 40 GB Seagate Channel 2: 60 GB Seagate Result: DMA_READ timed out errors for both drives, and "DMA_WRITE UDMA ICRC error" messages for the 60 GB Seagate. Since I had an older ATA-100 controller available, I tried with it (it can't handle >120GB drives though, so I couldn't as many combinations as I would have liked): [ CMD 649 ] Channel 1: 40 GB Seagate Channel 2: 60 GB Seagate Result: DMA_READ timed out errors, but only when both drives are in use at the same time. Running fsck on a slice on either drive in parallell reliably reproduced the DMA_READ errors. Whenever an error was reported for one drive, another error for the other drive always followed right after. [ CMD 649 ] Channel 1: Channel 2: 40 GB Seagate + 60 GB Seagate Result: No error messages. [ CMD 649 ] Channel 1: 40 GB Seagate + 60 GB Seagate Channel 2: Result: No error messages. Encouraged by these findings, I swapped back to the SiI controller to test the 160 GB drive: [ SiI 0680 ] Channel 1: Channel 2: 160 GB WD Result: No error messages [ SiI 0680 ] Channel 1: 160 GB WD Channel 2: Result: No error messages Finally, I tried everything together: [ SiI 0680 ] Channel 1: 160 GB WD Channel 2: [ CMD 649 ] Channel 1: 40 GB Seagate + 60 GB Seagate Channel 2: Result: No errors messages. What I haven't mentioned in the above is that I also tried some combinations with different cables, and also at reduced speed (UDM66 vs UDMA100). Neither changes had any effect on the behaviour. With the WD drive alone on the SiI 0680, I was also able to retrieve SMART information from it, and it's showing no errors for the drive at all. Likewise so for the 60 GB Seagate drive. All drives pass their self-tests without any errors. As mentioned in my previous email, my system drive is hanging off the built-in PIIX4 controller, as a single drive and only one channel on the controller used. I never saw any errors for that drive throughout my testing. My conclusion is thusly that there is something that's crept in that's affecting stability when multiple channels are used on the same controller. I'm not versed enough in driver internals to know if it's IRQ, DMA, ISR or anything-else related though. Below are my latest dmesg and pciconf listings - hopefully this will help someone locate the culprit. (Soren?) So, now I'm stuck with a system with three IDE controllers and one SCSI controller, and a motherboard that is utterly confused when I ask it boot off an external controller... (i.e. I can only boot off the built-in controller now). Please let me know if there's some other info I can get for you; I'll have limited ability to move drives around since this is the file server and people get annoyed when it's unavailable, but do ask if you think it will help you! :) Cheers, /Johny ======= dmesg ======== Copyright (c) 1992-2005 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD 5.4-RELEASE #0: Sun May 8 10:21:06 UTC 2005 root@harlow.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC Timecounter "i8254" frequency 1193182 Hz quality 0 CPU: Pentium II/Pentium II Xeon/Celeron (467.73-MHz 686-class CPU) Origin = "GenuineIntel" Id = 0x665 Stepping = 5 Features=0x183f9ff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,SEP,MTRR,PGE,MCA,CMOV,PA T,PSE36,MMX,FXSR> real memory = 805240832 (767 MB) avail memory = 778231808 (742 MB) npx0: <math processor> on motherboard npx0: INT 16 interface acpi0: <AWARD AWRDACPI> on motherboard acpi0: Power Button (fixed) Timecounter "ACPI-safe" frequency 3579545 Hz quality 1000 acpi_timer0: <24-bit timer at 3.579545MHz> port 0x4008-0x400b on acpi0 cpu0: <ACPI CPU (3 Cx states)> on acpi0 acpi_throttle0: <ACPI CPU Throttling> on cpu0 acpi_button0: <Power Button> on acpi0 pcib0: <ACPI Host-PCI bridge> port 0x5000-0x500f,0x4000-0x4041,0xcf8-0xcff on acpi0 pci0: <ACPI PCI bus> on pcib0 agp0: <Intel 82443BX (440 BX) host to PCI bridge> mem 0xe0000000-0xe3ffffff at device 0.0 on pci0 pcib1: <PCI-PCI bridge> at device 1.0 on pci0 pci1: <PCI bus> on pcib1 isab0: <PCI-ISA bridge> at device 7.0 on pci0 isa0: <ISA bus> on isab0 atapci0: <Intel PIIX4 UDMA33 controller> port 0xf000-0xf00f,0x376,0x170-0x177,0x 3f6,0x1f0-0x1f7 at device 7.1 on pci0 ata0: channel #0 on atapci0 ata1: channel #1 on atapci0 uhci0: <Intel 82371AB/EB (PIIX4) USB controller> port 0x9000-0x901f irq 11 at device 7.2 on pci0 usb0: <Intel 82371AB/EB (PIIX4) USB controller> on uhci0 usb0: USB revision 1.0 uhub0: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1 uhub0: 2 ports with 2 removable, self powered pci0: <bridge> at device 7.3 (no driver attached) atapci1: <SiI 0680 UDMA133 controller> port 0xa400-0xa40f,0xa000-0xa003,0x9c00-0 x9c07,0x9800-0x9803,0x9400-0x9407 mem 0xea001000-0xea0010ff irq 11 at device 9.0 on pci0 ata2: channel #0 on atapci1 ata3: channel #1 on atapci1 atapci2: <CMD 649 UDMA100 controller> port 0xb800-0xb80f,0xb400-0xb403,0xb000-0xb007,0xac00-0xac03,0xa800-0xa807 irq 9 at device 10.0 on pci0 ata4: channel #0 on atapci2 ata5: channel #1 on atapci2 pci0: <display, VGA> at device 11.0 (no driver attached) ahc0: <Adaptec 2940 Ultra SCSI adapter> port 0xbc00-0xbcff mem 0xea000000-0xea000fff irq 10 at device 12.0 on pci0 aic7880: Ultra Wide Channel A, SCSI Id=7, 16/253 SCBs rl0: <RealTek 8139 10/100BaseTX> port 0xc000-0xc0ff mem 0xea002000-0xea0020ff irq 11 at device 13.0 on pci0 miibus0: <MII bus> on rl0 rlphy0: <RealTek internal media interface> on miibus0 rlphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto rl0: Ethernet address: 00:40:f4:28:9d:20 sio0: <16550A-compatible COM port> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0 sio0: type 16550A sio1: <16550A-compatible COM port> port 0x2f8-0x2ff irq 3 on acpi0 sio1: type 16550A ppc0: <ECP parallel printer port> port 0x778-0x77b,0x378-0x37b irq 7 drq 3 on acpi0 ppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode ppc0: FIFO with 16/16/16 bytes threshold ppbus0: <Parallel port bus> on ppc0 plip0: <PLIP network interface> on ppbus0 lpt0: <Printer> on ppbus0 lpt0: Interrupt-driven port ppi0: <Parallel I/O> on ppbus0 atkbdc0: <Keyboard controller (i8042)> port 0x64,0x60 irq 1 on acpi0 atkbd0: <AT Keyboard> irq 1 on atkbdc0 kbd0 at atkbd0 psm0: <PS/2 Mouse> irq 12 on atkbdc0 psm0: model IntelliMouse Explorer, device ID 4 orm0: <ISA Option ROMs> at iomem 0xd0000-0xd07ff,0xc0000-0xc7fff on isa0 pmtimer0 on isa0 fdc0: cannot allocate I/O port (6 ports) sc0: <System console> at flags 0x100 on isa0 sc0: VGA <16 virtual consoles, flags=0x300> Timecounter "TSC" frequency 467728754 Hz quality 800 Timecounters tick every 10.000 msec ad0: 8207MB <ST38641A/3.29> [16676/16/63] at ata0-master UDMA33 ad4: 152627MB <WDC WD1600JB-00DUA3/75.13B75> [310101/16/63] at ata2-master UDMA100 ad8: 57241MB <ST360021A/3.05> [116301/16/63] at ata4-master UDMA100 ad9: 76319MB <ST380021A/3.19> [155061/16/63] at ata4-slave UDMA100 Waiting 15 seconds for SCSI devices to settle sa0 at ahc0 bus 0 target 4 lun 0 sa0: <HP HP35470A 1009> Removable Sequential Access SCSI-2 device sa0: 5.000MB/s transfers (5.000MHz, offset 8) sa1 at ahc0 bus 0 target 6 lun 0 sa1: <SUN DLT4000 CC2E> Removable Sequential Access SCSI-2 device sa1: 10.000MB/s transfers (10.000MHz, offset 15) cd0 at ahc0 bus 0 target 5 lun 0 cd0: <TEAC CD-ROM CD-532S 1.0A> Removable CD-ROM SCSI-2 device cd0: 20.000MB/s transfers (20.000MHz, offset 15) cd0: Attempt to query device size failed: NOT READY, Medium not present Mounting root from ufs:/dev/ad0s1a ----------------------- ======= pciconf -lv ========== # pciconf -lv agp0@pci0:0:0: class=0x060000 card=0x00000000 chip=0x71908086 rev=0x02 hdr=0x00 vendor = 'Intel Corporation' device = '82443BX/ZX 440BX/ZX CPU to PCI Bridge (AGP Implemented)' class = bridge subclass = HOST-PCI pcib1@pci0:1:0: class=0x060400 card=0x00000000 chip=0x71918086 rev=0x02 hdr=0x01 vendor = 'Intel Corporation' device = '82443BX/ZX 440BX/ZX AGPset PCI-to-PCI bridge' class = bridge subclass = PCI-PCI isab0@pci0:7:0: class=0x060100 card=0x00000000 chip=0x71108086 rev=0x02 hdr=0x00 vendor = 'Intel Corporation' device = '82371AB/EB/MB PIIX4/4E/4M ISA Bridge' class = bridge subclass = PCI-ISA atapci0@pci0:7:1: class=0x010180 card=0x00000000 chip=0x71118086 rev=0x01 hdr=0x00 vendor = 'Intel Corporation' device = '82371AB/EB/MB PIIX4/4E/4M IDE Controller' class = mass storage subclass = ATA uhci0@pci0:7:2: class=0x0c0300 card=0x00000000 chip=0x71128086 rev=0x01 hdr=0x00 vendor = 'Intel Corporation' device = '82371AB/EB/MB PIIX4/4E/4M USB Interface' class = serial bus subclass = USB none0@pci0:7:3: class=0x068000 card=0x00000000 chip=0x71138086 rev=0x02 hdr=0x00 vendor = 'Intel Corporation' device = '82371AB/EB/MB PIIX4/4E/4M Power Management Controller' class = bridge atapci1@pci0:9:0: class=0x010400 card=0x36801095 chip=0x06801095 rev=0x02 hdr=0x00 vendor = 'Silicon Image Inc (Was: CMD Technology Inc)' device = 'SiI 0680 (Was: PCI-0680) Ultra ATA133 EIDE Controller' class = mass storage subclass = RAID atapci2@pci0:10:0: class=0x010400 card=0xf5ffffff chip=0x06491095 rev=0x02 hdr=0x00 vendor = 'Silicon Image Inc (Was: CMD Technology Inc)' device = 'PCI-649 Ultra ATA/100 PCI to IDE/ATA Controller' class = mass storage subclass = RAID none1@pci0:11:0: class=0x030000 card=0x00000000 chip=0x0519102b rev=0x01 hdr=0x00 vendor = 'Matrox Electronic Systems Ltd.' device = 'MGA-2064W Storm (Millennium board)' class = display subclass = VGA ahc0@pci0:12:0: class=0x010000 card=0x00000000 chip=0x81789004 rev=0x00 hdr=0x00 vendor = 'Adaptec Inc' device = 'AHA-2940U/UW/2940D Ultra/Ultra Wide/Dual SCSI Host Adapter' class = mass storage subclass = SCSI rl0@pci0:13:0: class=0x020000 card=0x813910ec chip=0x813910ec rev=0x10 hdr=0x00 vendor = 'Realtek Semiconductor' device = 'RT8139 (A/B/C/810x/813x/C+) Fast Ethernet Adapter' class = network subclass = ethernet -------------------------- -- Johny Mattsson - Making IT work ,-. ,-. ,-. When all else fails, http://www.earthmagic.org _.' `-' `-' Murphy's Law still works!
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?42BD0926.8000804>