PATA DMA problem leading to kernel panic on reading movie DVDs

From: Martin Lottermoser
Date: Sun May 17 2009 - 05:30:37 EST


Hello,

newer versions of the Linux kernel overestimate my DVD drive's
DMA capabilities, leading either to DMA being disabled or a kernel
panic.

My setup is:

Motherboard: ASUS P4C800-E Deluxe
South bridge: ICH5R
IDE Interface Controller (PATA): Intel 82801EB/ER (PCI: 8086:24db)
DVD drive: Samsung SH-S202N, attached as hdc.
There is also an older CD writer (Lite-On LTR-52327S) attached as
hdd.
Operating system: Debian 5.0.0 with security updates

On upgrading from Debian 4.0 (Linux 2.6.18) to 5.0 (Linux 2.6.26) I
found that trying to play movie DVDs with vlc (VideoLAN media player)
led to DMA being disabled:

hdc: cdrom_decode_status: status=0x51 { DriveReady SeekComplete Error }
hdc: cdrom_decode_status: error=0x40 { LastFailedSense=0x04 }
ide: failed opcode was: unknown
<4 more identical groups of these messages>
hdc: DMA disabled
hdc: ide_intr: huh? expected NULL handler on exit
hdc: ATAPI reset complete

The resulting configuration is too slow to play movies. I booted the
older kernel and everything was fine.

I then tested various versions of the Linux kernel where I happened to
have the original sources. The most interesting results were:

2.6.22.9 works, no errors visible in syslog
2.6.23.14 works, but syslog shows an error (see below)
2.6.24.3 DMA disabled
2.6.29.3 Kernel panic: Fatal exception in interrupt (ide_intr)
on trying to open the DVD with vlc

The error message with 2.6.23.14 was:

hdc: drive_cmd: status=0x51 { DriveReady SeekComplete Error }
hdc: drive_cmd: error=0x04 { AbortedCommand }
ide: failed opcode was: 0xec

This kernel as well as 2.6.22.9 also showed the following on booting:

hdc: host side 80-wire cable detection failed, limiting max speed to UDMA33

This is correct: the drive is only capable of Ultra DMA mode 2 33.3 MB/s
(see manufacturer's documentation) and is attached with a standard 40-wire
ATA cable (black connectors for master and slave).

This led me to inspect other boot messages. With 2.6.18.3 I found:

hdc: ATAPI 48X DVD-ROM DVD-R-RAM CD-R/RW drive, 2048kB Cache, UDMA(33)

2.6.24.3 showed:

hdc: UDMA/66 mode selected
...
hdc: ATAPI 48X DVD-ROM DVD-R-RAM CD-R/RW drive, 2048kB Cache

In contrast, the hdd drive shows up with "UDMA/33 mode selected" up to
and including 2.6.29.3.

I now use "hdparm -d1 -X udma2 /dev/hdc" with the Debian kernel 2.6.26
and the drive works as desired. However, when querying the drive's
capabilities with "hdparm -I", although the command terminates
successfully and without any error messages (it shows

DMA: mdma0 mdma1 mdma2 udma0 udma1 *udma2 udma3 udma4

), on inspecting the syslog I find, on each invocation, a similar
error message as above with 2.6.23.14:

hdc: task_in_intr: status=0x51 { DriveReady SeekComplete Error }
hdc: task_in_intr: error=0x04 { AbortedCommand }
ide: failed opcode was: 0xec

Interestingly enough, this happens also when calling "hdparm -I" on hdd.
There are also error messages

hdc: set_drive_speed_status: status=0x51 { DriveReady SeekComplete Error }
hdc: set_drive_speed_status: error=0x04 { AbortedCommand }
ide: failed opcode was: unknown

from the boot phase.

Therefore there is still something wrong. Any suggestions on what that
is and how to fix it? (Answers preferably through "Cc:", but I'll also
try and follow the thread through list archives.)

Martin Lottermoser
--
Martin Lottermoser Martin.Lottermoser at _REMOVE_t-online.de
Greifswaldstrasse 28
38124 Braunschweig http://home.vrweb.de/martin.lottermoser
Germany
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/