Skip to contentSkip to conversation

Lost interrupts with IDE DMA on 2.5.x

DISCUSSION Marek Habersack 3 participants 3 messages Apr 25, 2003 – Apr 26, 2003

lore
Share & tools
lore
#0 lore raw

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

#1 lore raw

Attached patch should help, please try.

--
Bartlomiej

Quoted 51 lines · Marek Habersack

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.).

Quoted 3 lines

TIA,

marek

# Fix masked_irq arg handling for ide_do_request(). # Solves "hdx: lost interrupt" bug.
#
# Bartlomiej Zolnierkiewicz <[email protected]>

drivers/ide/ide-io.c +2 -2
@@ -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;
#2 lore raw

Hi Bartlomiej,

It seems the patch is missing :-(

Regards,
Paul

Quoted 72 lines

Attached patch should help, please try.

--
Bartlomiej

Quoted 3 lines · Marek Habersack

Hello,

I've recently added a second drive to my workstation and

since then

Quoted 3 lines

I'm getting the following error from time to time:

  Apr 25 20:42:06 beowulf kernel: hda: dma_timer_expiry: 

dma status == 0x64

Quoted 2 lines
  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)

Quoted 1 line
  Apr 25 20:42:06 beowulf kernel: hda: dma_intr: 

status=0x50 { DriveReady

Quoted 34 lines
   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
Quoted 1 line

Of course, when the above happens, all disk I/O freezes.

The above

Quoted 2 lines

happens only when there's simultaneous activity on both devices. It doesn't happen when the devices are on different IDE

interfaces. The

Quoted 1 line

transfer is always retried and completed successfully, so

it's not a

Quoted 1 line

bad hdd and I can only guess the problem is somewhere in

the DMA/IRQ

Quoted 7 lines

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