[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#340228: kernel-image-2.6.8-2-k7: IDE DMA error recovery doesn't work anymore



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: