Workaround missing interrupts - dma_reset on them (when timeout occurse).
When you start tracker and produce some heavy disk activity, output interrupts becomes lost and I don't know how to solve it finally. Newly added code at least allows recovery after timeout.
This commit is contained in:
parent
19851e4b7f
commit
e4ff5c2aef
|
@ -357,6 +357,7 @@ DMAbuf_getrdbuffer (int dev, char **buf, int *len, int dontblock)
|
||||||
if (TIMED_OUT (dev_sleeper[dev], dev_sleep_flag[dev]))
|
if (TIMED_OUT (dev_sleeper[dev], dev_sleep_flag[dev]))
|
||||||
{
|
{
|
||||||
printk ("Sound: DMA timed out - IRQ/DRQ config error?\n");
|
printk ("Sound: DMA timed out - IRQ/DRQ config error?\n");
|
||||||
|
dma_reset (dev);
|
||||||
err = EIO;
|
err = EIO;
|
||||||
SET_ABORT_FLAG (dev_sleeper[dev], dev_sleep_flag[dev]);
|
SET_ABORT_FLAG (dev_sleeper[dev], dev_sleep_flag[dev]);
|
||||||
}
|
}
|
||||||
|
@ -607,6 +608,7 @@ DMAbuf_getwrbuffer (int dev, char **buf, int *size, int dontblock)
|
||||||
if (TIMED_OUT (dev_sleeper[dev], dev_sleep_flag[dev]))
|
if (TIMED_OUT (dev_sleeper[dev], dev_sleep_flag[dev]))
|
||||||
{
|
{
|
||||||
printk ("Sound: DMA timed out - IRQ/DRQ config error?\n");
|
printk ("Sound: DMA timed out - IRQ/DRQ config error?\n");
|
||||||
|
dma_reset (dev);
|
||||||
err = EIO;
|
err = EIO;
|
||||||
abort = 1;
|
abort = 1;
|
||||||
SET_ABORT_FLAG (dev_sleeper[dev], dev_sleep_flag[dev]);
|
SET_ABORT_FLAG (dev_sleeper[dev], dev_sleep_flag[dev]);
|
||||||
|
|
Loading…
Reference in New Issue