Messages in this thread Patch in this message | | | Date | Fri, 25 Apr 2003 21:47:28 +0200 (MET DST) | From | Bartlomiej Zolnierkiewicz <> | Subject | Re: Lost interrupts with IDE DMA on 2.5.x |
| |
Attached patch should help, please try.
-- Bartlomiej
On Fri, 25 Apr 2003, Marek Habersack wrote:
> Hello, > > I've recently added a second drive to my workstation and since then I'm > getting the following error from time to time: > > Apr 25 20:42:06 beowulf kernel: hda: dma_timer_expiry: dma status == 0x64 > Apr 25 20:42:06 beowulf kernel: hda: lost interrupt > Apr 25 20:42:06 beowulf kernel: hda: dma_intr: bad DMA status (dma_stat=70) > Apr 25 20:42:06 beowulf kernel: hda: dma_intr: status=0x50 { DriveReady > SeekComplete } > > Both drives are new Maxtors (60 and 40GB) on the VIA KT266 chipset (the mobo > is MSI K7T266 Pro2-A mobo): > > ----------VIA BusMastering IDE Configuration---------------- > Driver Version: 3.36 > South Bridge: VIA vt8233a > Revision: ISA 0x0 IDE 0x6 > Highest DMA rate: UDMA133 > BM-DMA base: 0xfc00 > PCI clock: 33.3MHz > Master Read Cycle IRDY: 0ws > Master Write Cycle IRDY: 0ws > BM IDE Status Register Read Retry: yes > Max DRDY Pulse Width: No limit > -----------------------Primary IDE-------Secondary IDE------ > Read DMA FIFO flush: yes yes > End Sector FIFO flush: no no > Prefetch Buffer: yes yes > Post Write Buffer: yes yes > Enabled: yes yes > Simplex only: no no > Cable Type: 80w 40w > -------------------drive0----drive1----drive2----drive3----- > Transfer Mode: UDMA UDMA PIO DMA > Address Setup: 120ns 120ns 120ns 120ns > Cmd Active: 90ns 90ns 90ns 90ns > Cmd Recovery: 30ns 30ns 30ns 30ns > Data Active: 90ns 90ns 330ns 90ns > Data Recovery: 30ns 30ns 270ns 30ns > Cycle Time: 15ns 15ns 600ns 120ns > Transfer Rate: 133.3MB/s 133.3MB/s 3.3MB/s 16.6MB/s > > Of course, when the above happens, all disk I/O freezes. The above happens > only when there's simultaneous activity on both devices. It doesn't happen > when the devices are on different IDE interfaces. The transfer is always > retried and completed successfully, so it's not a bad hdd and I can only > guess the problem is somewhere in the DMA/IRQ handling by the IDE driver. If > there's not enough information to diagnose/solve the problem, I can do more > tests (run with 2.4 for a while, run with the generic IDE drive etc.). > > TIA, > > marek # Fix masked_irq arg handling for ide_do_request(). # Solves "hdx: lost interrupt" bug. # # Bartlomiej Zolnierkiewicz <bzolnier@elka.pw.edu.pl>
--- linux-2.5.68-bk6/drivers/ide/ide-io.c Fri Apr 25 16:08:53 2003 +++ linux/drivers/ide/ide-io.c Fri Apr 25 16:13:37 2003 @@ -850,14 +850,14 @@ * happens anyway when any interrupt comes in, IDE or otherwise * -- the kernel masks the IRQ while it is being handled. */ - if (hwif->irq != masked_irq) + if (masked_irq != IDE_NO_IRQ && hwif->irq != masked_irq) disable_irq_nosync(hwif->irq); spin_unlock(&ide_lock); local_irq_enable(); /* allow other IRQs while we start this request */ startstop = start_request(drive, rq); spin_lock_irq(&ide_lock); - if (hwif->irq != masked_irq) + if (masked_irq != IDE_NO_IRQ && hwif->irq != masked_irq) enable_irq(hwif->irq); if (startstop == ide_released) goto queue_next;
| |