hda: dma_timer_expiry: dma status == 0x64 ¿Debería preocuparme?

Buenas. Ayer estaba viendo un video en mplayer cuando al intentar "rebobinar", se quedó congelado. Salí de X con ctrl+alt+backspace, volví a entrar en X, y al hacer un dmesg me encuentro con:
hda: dma_timer_expiry: dma status == 0x64
hda: DMA interrupt recovery
hda: lost interrupt

He buscado en google y lo que he encontrado ha sido gente con este problema pero con los kernels 2.5 (uso el 2.6.8), y además les ocurría de forma constante. En mi caso he hecho un grep de var/log/messages y sólo me ha pasado 3 veces, la de ayer y dos anteayer, de las que ni me enteré (y llevo con el 2.6.8 desde que salió). Intenté repetir el error, copiando 1GB desde mi disco PATA (hda) al SATA, y cuando llevaba la mitad copiado e iba a 40-80M/s (gkrellm), se puso a 0 durante varios segundos, y luego continuó y terminó sin más problemas. Miro el dmesg, y había aparecido otro dma_timer_expiry.

Esta mañana me pasó algo que también me da un poco de cague: me desapareció el sensor de temperatura de hda en el gkrellm. Tengo el hddtemp arrancado como demonio. Hice un /etc/init.d/hddtemp restart y reapareció la temperatura.

Para comprobar el S.M.A.R.T. utilicé un programa de DOS y todos los valores aparecen muy por encima de los críticos, vamos, que según el propio hd, está en perfecto estado.

¿Creéis que es cosa del kernel o en mi lugar ya estaríais haciendo un backup del disco duro a dvds? [mad]
Pues , mira con estas cosas no se juegan y yo haria inmediatamente un backup de todo los datos importantes. Puede ser que tengas algun problema de Hard.

pasale hdparm a ver que te dice, creo que hay alguna forma de ponerlo en stress y luego ver los fallos que te da. Pero simpre primero una copia de seguridad.
He encontrado (más bien me han encontrado [tomaaa]) a alguien con el mismo problema que yo. Incluso con la misma placa. Parece que una solución al problema es un pequeño hackeo consistente en aplicar en el fichero drivers/ide/ide-io.c del kernel el parche:
- if (hwif->irq != masked_irq)
+ if (masked_irq != IDE_NO_IRQ && hwif->irq != masked_irq)

- if (hwif->irq != masked_irq)
+ if (masked_irq != IDE_NO_IRQ && hwif->irq != masked_irq)

Lo que no sé es si esto simplemente ocultará un problema mayor (de hardware). Y me extraña no haberlo notado antes de ayer, cuando llevo con el kernel bastante tiempo.

Cuando llegue a casa lo probaré a ver si funciona y ya contaré.
2 respuestas