From 7ee1f8c222d7a2ccb319050345b3181e0c80e9bf Mon Sep 17 00:00:00 2001 From: Prajakta Gudadhe Date: Tue, 1 Feb 2011 14:56:00 -0800 Subject: video: tegra: add some missing mutex locking to nvhost_cdma Change-Id: Ie4606d9a5154090274168babc110ea2d79747c05 Signed-off-by: Erik Gilling --- drivers/video/tegra/host/nvhost_cdma.c | 16 +++++++--------- drivers/video/tegra/host/nvhost_channel.c | 3 ++- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/drivers/video/tegra/host/nvhost_cdma.c b/drivers/video/tegra/host/nvhost_cdma.c index f27656bac07b..d2a91d117b52 100644 --- a/drivers/video/tegra/host/nvhost_cdma.c +++ b/drivers/video/tegra/host/nvhost_cdma.c @@ -522,16 +522,14 @@ void nvhost_cdma_stop(struct nvhost_cdma *cdma) { void __iomem *chan_regs = cdma_to_channel(cdma)->aperture; - if (!cdma->running) - return; - mutex_lock(&cdma->lock); - wait_cdma(cdma, CDMA_EVENT_SYNC_QUEUE_EMPTY); + if (cdma->running) { + wait_cdma(cdma, CDMA_EVENT_SYNC_QUEUE_EMPTY); + writel(nvhost_channel_dmactrl(true, false, false), + chan_regs + HOST1X_CHANNEL_DMACTRL); + cdma->running = false; + } mutex_unlock(&cdma->lock); - writel(nvhost_channel_dmactrl(true, false, false), - chan_regs + HOST1X_CHANNEL_DMACTRL); - - cdma->running = false; } /** @@ -539,9 +537,9 @@ void nvhost_cdma_stop(struct nvhost_cdma *cdma) */ void nvhost_cdma_begin(struct nvhost_cdma *cdma) { + mutex_lock(&cdma->lock); if (!cdma->running) start_cdma(cdma); - mutex_lock(&cdma->lock); cdma->slots_free = 0; cdma->slots_used = 0; } diff --git a/drivers/video/tegra/host/nvhost_channel.c b/drivers/video/tegra/host/nvhost_channel.c index 40b67181c33d..3a6998909ed5 100644 --- a/drivers/video/tegra/host/nvhost_channel.c +++ b/drivers/video/tegra/host/nvhost_channel.c @@ -163,7 +163,8 @@ void nvhost_channel_suspend(struct nvhost_channel *ch) { mutex_lock(&ch->reflock); BUG_ON(nvhost_module_powered(&ch->mod)); - nvhost_cdma_stop(&ch->cdma); + if (ch->refcount) + nvhost_cdma_stop(&ch->cdma); mutex_unlock(&ch->reflock); } -- cgit v1.2.3