From c8800d33921af03b30e3e5bbb11e8d70e2a75326 Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Mon, 19 Jan 2004 05:09:37 -0800 Subject: [PATCH] [PATCH] OSS dmabuf deadlock fix Spotted by From: Christian Borntraeger dma_reset_input() takes dmap->lock, so call it without that lock held. --- sound/oss/dmabuf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sound/oss/dmabuf.c b/sound/oss/dmabuf.c index 43d6d948e1ac0..73aa190318155 100644 --- a/sound/oss/dmabuf.c +++ b/sound/oss/dmabuf.c @@ -587,7 +587,6 @@ int DMAbuf_getrdbuffer(int dev, char **buf, int *len, int dontblock) spin_unlock_irqrestore(&dmap->lock,flags); timeout = interruptible_sleep_on_timeout(&adev->in_sleeper, timeout); - spin_lock_irqsave(&dmap->lock,flags); if (!timeout) { /* FIXME: include device name */ err = -EIO; @@ -595,6 +594,7 @@ int DMAbuf_getrdbuffer(int dev, char **buf, int *len, int dontblock) dma_reset_input(dev); } else err = -EINTR; + spin_lock_irqsave(&dmap->lock,flags); } spin_unlock_irqrestore(&dmap->lock,flags); -- 2.53.0