CD-ROM patches versus IDE DMA

Brion Vibber (brion@gizmo.usc.edu)
Sat, 6 Nov 1999 21:41:00 -0800 (PST)


Jens, for some reason your CD-ROM patch doesn't get along with DMA for
my IDE drives. :( When booting 2.2.13 with the November 4 patch, I get IRQ
timeouts resulting in disabled DMA during the partition check.

I can then reenable DMA on two of my drives (hda/b on the PIIX4) via
hdparm, but a third hard drive and my DVD-ROM (hde/h on a Promise Ultra33
card) continue to drop to PIO mode when accessed.

All of these drives work fine with DMA on an identically-configured
vanilla 2.2.13 and on 2.2.13pre17 with Andre Hedrick's IDE patches.

Kernel is 2.2.13 + Nov 4 CD-ROM 2.2 non-AC patch, compiled for 686/SMP
(2xPII-266 machine) with ATAPI CD-ROM (no changer support) and Tape but
not Floppy (I have the older, non-ATAPI Zip drive). No SCSI compiled in. I
also tried a UP kernel to check if it was a SMP problem and a kernel
without CD-ROM support compiled it to see if the CD code was doing
something funky that confused the other drives, no change.

>From the boot messages...
PIIX4: IDE controller on PCI bus 00 dev 39
PIIX4: not 100% native mode: will probe irqs later
ide0: BM-DMA at 0xffa0-0xffa7, BIOS settings: hda:DMA, hdb:DMA
ide1: BM-DMA at 0xffa8-0xffaf, BIOS settings: hdc:pio, hdd:DMA
PDC20246: IDE controller on PCI bus 00 dev 40
PDC20246: not 100% native mode: will probe irqs later
PDC20246: ROM enabled at 0xefff0000
ide2: BM-DMA at 0xde80-0xde87, BIOS settings: hde:DMA, hdf:DMA
ide3: BM-DMA at 0xde88-0xde8f, BIOS settings: hdg:pio, hdh:pio
...
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
ide1 at 0x170-0x177,0x376 on irq 15
ide2 at 0xdfa0-0xdfa7,0xdff6 on irq 16
ide3 at 0xdf90-0xdf97,0xdfe6 on irq 16
hda: QUANTUM FIREBALL ST6.4A, 6149MB w/81kB Cache, CHS=784/255/63, UDMA
hdb: WDC AC313000R, 12416MB w/512kB Cache, CHS=1582/255/63, UDMA
hde: Maxtor 90840D6, 8010MB w/256kB Cache, CHS=16276/16/63, UDMA
hdg: IOMEGA ZIP 100, 96MB w/16kB Cache, CHS=512/12/32
hdd: ATAPI 24X CD-ROM drive, 256kB Cache
Uniform CD-ROM driver Revision: 3.05
hdh: ATAPI 32X DVD-ROM drive, 256kB Cache, DMA
ide-tape: hdc <-> ht0, 600KBps, 14*26kB buffer, 2600kB pipeline, 190ms tDSC
...
Partition check:
hda:hda: irq timeout: status=0xd0 { Busy }
hda: DMA disabled
hdb: DMA disabled
ide0: reset: success
hda1 hda2 < hda5 hda6 >
hdb: hdb1
hde:hde: irq timeout: status=0xd0 { Busy }
hde: DMA disabled
ide2: reset: success
hde1 hde2 hde3
hdg:hdg: lost interrupt <-- (this bit is normal, the zip has no disk)
hdg: read_intr: status=0x50 { DriveReady SeekComplete }
hdg: irq timeout: status=0xd0 { Busy }
hdh: DMA disabled
ide3: reset: success
hdg: lost interrupt
hdg: read_intr: status=0x50 { DriveReady SeekComplete }
unknown partition table

Any ideas? I'm trying to get DVD playing to work, so I need the DVD
support in the CD patches (CSS unlocking seems to work - yay! - but I'm
having a heckuva time getting the player to do anything)...

I took a quick look at the code, it looks like the patch rearranges the
IDE irq timeouts, but appears to be doing the equivalent thing, otherwise
not making significant changes outside the CD code where of course the
meat of the patch lies. I tried a quick obvious hack, returning this
line to ide.c:
- del_timer(&hwgroup->timer); /* Is this needed?? */
but it changed nothing, so it looks like it was one of the safe-looking
changes (moving the timeout value to the drive struct instead of a
parameter to ide_set_handler) and I can't tell what's wrong with them.

(Insert lockup, reboot, and fsck here.)

Also, the machine died after about 15 minutes of CD-ripping using
cdparanoia... the drives lost interrupts and locked up, and I had to
reboot with SysRQ. :( Here's the last bit of the logs:

(lots of these during the ripping...)
Nov 6 19:35:11 rdaneel kernel: hdh: packet command error: status=0xd0 { Busy }
Nov 6 19:35:11 rdaneel kernel: hdh: status error: status=0x58 { DriveReady SeekComplete DataRequest }
Nov 6 19:35:11 rdaneel kernel: hdh: drive not ready for command
Nov 6 19:35:11 rdaneel kernel: hdh: status error: status=0x58 { DriveReady SeekComplete DataRequest }
Nov 6 19:35:11 rdaneel kernel: hdh: drive not ready for command
Nov 6 19:35:11 rdaneel kernel: hdh: ATAPI reset complete
Nov 6 19:35:13 rdaneel kernel: hdh: packet command error: status=0xd0 { Busy }
(aghh!!! we die here)
Nov 6 19:35:13 rdaneel kernel: Unable to handle kernel NULL pointer dereference at virtual address 00000004
Nov 6 19:35:13 rdaneel kernel: current->tss.cr3 = 04d41000, %cr3 = 04d41000
Nov 6 19:35:13 rdaneel kernel: *pde = 00000000
Nov 6 19:35:13 rdaneel kernel: Oops: 0000
Nov 6 19:35:13 rdaneel kernel: CPU: 0

The console gave me semi-legible messages about "hde: lost interrupt" (I
think - I couldn't get out of X correctly and my VESA console is at a
different bit depth than my X desktop so it's a little hard to read on a
non-reset display), and I couldn't access hda or hdb either.

I don't know if this lockup is related to the above problem, as I've
occassionally gotten these before on kernels without the CD patch, but
only when attempting to rip from both the DVD (hdh) and CD (hdd) drives
simultaneously.

-- brion vibber (brion@pobox.com)

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/