Bug#340228: kernel-image-2.6.8-2-k7: IDE DMA error recovery doesn't work anymore
- To: Debian Bug Tracking System <submit@bugs.debian.org>
- Subject: Bug#340228: kernel-image-2.6.8-2-k7: IDE DMA error recovery doesn't work anymore
- From: Karol Lewandowski <klz@o2.pl>
- Date: Mon, 21 Nov 2005 23:07:32 +0100
- Message-id: <E1EeJoy-0001LS-DG@iglo.domek.prywatny>
- Reply-to: Karol Lewandowski <klz@o2.pl>, 340228@bugs.debian.org
Package: kernel-image-2.6.8-2-k7
Version: 2.6.8-16
Severity: important
Linux kernel 2.6.(everything) panics when mounting cdrom when DMA
transfers are enabled (default). It works fine if DMA is disabled.
The drive is clearly broken. Adding blacklist to drivers/ide/ide-dma.c
for this model ("CD-912E/ATK") fixes this problem.
Messages gathered on panic condition:
--- Begin kernel messages ---
ide-cd: cmd 0x28 timed out
hdc: DMA interrupt recovery
hdc: lost interrupt
hdc: cdrom_decode_status: status=0xd0 { Busy }
ide: failed opcode was: unknown
hdc: DMA disabled
------------[ cut here ]------------
kernel BUG at drivers/ide/ide-iops.c:949!
invalid operand: 0000 [#1]
Modules linked in:
CPU: 0
EIP: 0060:[<c01ece82>] Not tainted VLI
EFLAGS: 00010086 (2.6.14-eve1)
EIP is at ide_execute_command+0x22/0x90
eax: c01ecef0 ebx: c02fed38 ecx: 00008000 edx: c3f81580
esi: c02feca8 edi: 00000286 ebp: c01f9000 esp: c02c7e50
ds: 007b es: 007b ss: 0068
Process swapper (pid: 0, threadinfo=c02c6000 task=c028eba0)
Stack: 00000082 00808000 c01179e5 a00ce600 c10ce600 c02fed38 c02feca8 c01f8869
c02fed38 000000a0 c01f9000 00001770 c01f86e0 c10d8ec4 c02fed38 c10d8ec4
c10ce600 00000004 c01f938a c02fed38 00008000 c01f9000 c02fed38 c10d8ec4
Call Trace:
[<c01179e5>] update_process_times+0x85/0x130
[<c01f8869>] cdrom_start_packet_command+0x119/0x1a0
[<c01f9000>] cdrom_start_read_continuation+0x0/0xb0
[<c01f86e0>] cdrom_timer_expiry+0x0/0x70
[<c01f938a>] cdrom_start_read+0xca/0xd0
[<c01f9000>] cdrom_start_read_continuation+0x0/0xb0
[<c01fa075>] ide_do_rw_cdrom+0x95/0x1b0
[<c01eb1b6>] start_request+0x156/0x240
[<c01eb4fa>] ide_do_request+0x22a/0x380
[<c01eb867>] ide_timer_expiry+0xd7/0x1c0
[<c01eb790>] ide_timer_expiry+0x0/0x1c0
[<c0117b66>] run_timer_softirq+0xb6/0x1b0
[<c0113deb>] __do_softirq+0x7b/0x90
[<c0113e26>] do_softirq+0x26/0x30
[<c010415e>] do_IRQ+0x1e/0x30
[<c0102a46>] common_interrupt+0x1a/0x20
[<c0100920>] default_idle+0x0/0x30
[<c0100943>] default_idle+0x23/0x30
[<c01009e0>] cpu_idle+0x50/0x60
[<c02c87f6>] start_kernel+0x146/0x170
[<c02c8380>] unknown_bootoption+0x0/0x1e0
Code: c3 90 8d b4 26 00 00 00 00 57 56 53 83 ec 10 8b 5c 24 20 0f b6 44 24 24 88 44 24 0f 8b 73 6c 8b 56 08 9c 5f fa 8b 02 85 c0 74 08 <0f> 0b b5 03 9c 08 27 c0 8b 44 24 28 89 02 8b 44 24 30 89 82 dc
<0>Kernel panic - not syncing: Fatal exception in interrupt
--- End ---
But this shouldn't happen anyway.
Linux 2.4-series kernels, in contrast works just fine when mounting
cdroms when DMA is enabled. The kernel tries to start DMA transfer,
but fails waiting for irq(drq?) and disables DMA. Excerpt from log:
(Linux kernel 2.4.32)
kernel: hdc: lost interrupt
kernel: hdc: cdrom_decode_status: status=0xd0 { Busy }
kernel: hdc: cdrom_decode_status: error=0xd0LastFailedSense 0x0d
kernel: hdc: DMA disabled
kernel: hdc: ATAPI reset complete
kernel: ISO 9660 Extensions: RRIP_1991A
It seems that IDE DMA error recovery doesn't work as described in
drivers/ide/ide-dma.c:
(Comment from linux kernel 2.6.14)
* To enable DMA, use "hdparm -d1 /dev/hd?" on a per-drive basis after booting.
* If problems arise, ide.c will disable DMA operation after a few retries.
* This error recovery mechanism works and has been extremely well exercised.
Experiments have shown, that linux kernels 2.6.* always panics after
60 seconds (from issuing request to drive, eg. "mount /cdrom"), while
linux kernels 2.4.* disables DMA after 10 seconds (one WAIT_CMD).
(Please tell me the best way to report bugs against all
linux kernels 2.6.* because I have at least one more.)
Thanks for your work!
-- System Information:
Debian Release: 3.1
APT prefers testing
APT policy: (500, 'testing')
Architecture: i386 (i686)
Kernel: Linux 2.6.8-2-k7
Locale: LANG=en_GB, LC_CTYPE=pl_PL (charmap=ISO-8859-2)
Versions of packages kernel-image-2.6.8-2-k7 depends on:
ii coreutils [fileutils] 5.2.1-2 The GNU core utilities
ii initrd-tools 0.1.81.1 tools to create initrd image for p
ii module-init-tools 3.2-pre1-2 tools for managing Linux kernel mo
-- no debconf information
Reply to: