From e4ff5c2aef819c9eab063ae6b94eedaea31d50c4 Mon Sep 17 00:00:00 2001 From: "Andrey A. Chernov" Date: Wed, 17 Jan 1996 05:43:38 +0000 Subject: [PATCH] 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. --- sys/i386/isa/sound/dmabuf.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sys/i386/isa/sound/dmabuf.c b/sys/i386/isa/sound/dmabuf.c index d74800571b3..72ff2f794d1 100644 --- a/sys/i386/isa/sound/dmabuf.c +++ b/sys/i386/isa/sound/dmabuf.c @@ -357,6 +357,7 @@ DMAbuf_getrdbuffer (int dev, char **buf, int *len, int dontblock) if (TIMED_OUT (dev_sleeper[dev], dev_sleep_flag[dev])) { printk ("Sound: DMA timed out - IRQ/DRQ config error?\n"); + dma_reset (dev); err = EIO; 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])) { printk ("Sound: DMA timed out - IRQ/DRQ config error?\n"); + dma_reset (dev); err = EIO; abort = 1; SET_ABORT_FLAG (dev_sleeper[dev], dev_sleep_flag[dev]);