Commit af19b7ce authored by Stefan Wahren's avatar Stefan Wahren Committed by Ulf Hansson

mmc: bcm2835: Avoid possible races on data requests

There are two accesses on the data requests which are not protected by
the mutex. So fix this accordingly.
Signed-off-by: default avatarStefan Wahren <stefan.wahren@i2se.com>
Acked-by: default avatarEric Anholt <eric@anholt.net>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 5eae252d
...@@ -1053,10 +1053,12 @@ static void bcm2835_dma_complete_work(struct work_struct *work) ...@@ -1053,10 +1053,12 @@ static void bcm2835_dma_complete_work(struct work_struct *work)
{ {
struct bcm2835_host *host = struct bcm2835_host *host =
container_of(work, struct bcm2835_host, dma_work); container_of(work, struct bcm2835_host, dma_work);
struct mmc_data *data = host->data; struct mmc_data *data;
mutex_lock(&host->mutex); mutex_lock(&host->mutex);
data = host->data;
if (host->dma_chan) { if (host->dma_chan) {
dma_unmap_sg(host->dma_chan->device->dev, dma_unmap_sg(host->dma_chan->device->dev,
data->sg, data->sg_len, data->sg, data->sg_len,
...@@ -1181,9 +1183,6 @@ static void bcm2835_request(struct mmc_host *mmc, struct mmc_request *mrq) ...@@ -1181,9 +1183,6 @@ static void bcm2835_request(struct mmc_host *mmc, struct mmc_request *mrq)
return; return;
} }
if (host->use_dma && mrq->data && (mrq->data->blocks > PIO_THRESHOLD))
bcm2835_prepare_dma(host, mrq->data);
mutex_lock(&host->mutex); mutex_lock(&host->mutex);
WARN_ON(host->mrq); WARN_ON(host->mrq);
...@@ -1207,6 +1206,9 @@ static void bcm2835_request(struct mmc_host *mmc, struct mmc_request *mrq) ...@@ -1207,6 +1206,9 @@ static void bcm2835_request(struct mmc_host *mmc, struct mmc_request *mrq)
return; return;
} }
if (host->use_dma && mrq->data && (mrq->data->blocks > PIO_THRESHOLD))
bcm2835_prepare_dma(host, mrq->data);
host->use_sbc = !!mrq->sbc && host->mrq->data && host->use_sbc = !!mrq->sbc && host->mrq->data &&
(host->mrq->data->flags & MMC_DATA_READ); (host->mrq->data->flags & MMC_DATA_READ);
if (host->use_sbc) { if (host->use_sbc) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment