From 9f580d5d072018879f6bb2a8b135b76e6460d7a2 Mon Sep 17 00:00:00 2001 From: Raja Mani Date: Mon, 21 Nov 2011 12:26:51 +0530 Subject: [PATCH] --- yaml --- r: 279235 b: refs/heads/master c: fdb28589b10f1bd4c407ea304399c2ff1cae1504 h: refs/heads/master i: 279233: 422779f7b690ddc3dde8f320a560f1c91a787b20 279231: a2b205af0934291b66f4435261a9a1175504034b v: v3 --- [refs] | 2 +- trunk/drivers/net/wireless/ath/ath6kl/sdio.c | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 7c029984ff1b..b8c6b586a970 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 743b4518f9432e09ade6120ced414558969ba5fd +refs/heads/master: fdb28589b10f1bd4c407ea304399c2ff1cae1504 diff --git a/trunk/drivers/net/wireless/ath/ath6kl/sdio.c b/trunk/drivers/net/wireless/ath/ath6kl/sdio.c index b52b90d730db..eecf88c43d0c 100644 --- a/trunk/drivers/net/wireless/ath/ath6kl/sdio.c +++ b/trunk/drivers/net/wireless/ath/ath6kl/sdio.c @@ -39,8 +39,12 @@ struct ath6kl_sdio { struct bus_request bus_req[BUS_REQUEST_MAX_NUM]; struct ath6kl *ar; + u8 *dma_buffer; + /* protects access to dma_buffer */ + struct mutex dma_buffer_mutex; + /* scatter request list head */ struct list_head scat_req; @@ -395,6 +399,7 @@ static int ath6kl_sdio_read_write_sync(struct ath6kl *ar, u32 addr, u8 *buf, if (buf_needs_bounce(buf)) { if (!ar_sdio->dma_buffer) return -ENOMEM; + mutex_lock(&ar_sdio->dma_buffer_mutex); tbuf = ar_sdio->dma_buffer; memcpy(tbuf, buf, len); bounced = true; @@ -405,6 +410,9 @@ static int ath6kl_sdio_read_write_sync(struct ath6kl *ar, u32 addr, u8 *buf, if ((request & HIF_READ) && bounced) memcpy(buf, tbuf, len); + if (bounced) + mutex_unlock(&ar_sdio->dma_buffer_mutex); + return ret; } @@ -1219,6 +1227,7 @@ static int ath6kl_sdio_probe(struct sdio_func *func, spin_lock_init(&ar_sdio->lock); spin_lock_init(&ar_sdio->scat_lock); spin_lock_init(&ar_sdio->wr_async_lock); + mutex_init(&ar_sdio->dma_buffer_mutex); INIT_LIST_HEAD(&ar_sdio->scat_req); INIT_LIST_HEAD(&ar_sdio->bus_req_freeq);