Commit 45c5a914 authored by Seungwon Jeon's avatar Seungwon Jeon Committed by Chris Ball

mmc: queue: amend buffer swap for non-blocking transfer

In case both 'req' and 'mq->mqrq_prev->req' are null, there is no request
to be processed. That means there is no need to switch buffer.
Switching buffer is required only after finishing 'issue_fn'.
Signed-off-by: default avatarSeungwon Jeon <tgih.jun@samsung.com>
Reviewed-by: default avatarPer Forlin <per.forlin@stericsson.com>
Tested-by: default avatarJohan Rudholm <johan.rudholm@stericsson.com>
Signed-off-by: default avatarChris Ball <cjb@laptop.org>
parent 42cd95a0
...@@ -68,6 +68,16 @@ static int mmc_queue_thread(void *d) ...@@ -68,6 +68,16 @@ static int mmc_queue_thread(void *d)
if (req || mq->mqrq_prev->req) { if (req || mq->mqrq_prev->req) {
set_current_state(TASK_RUNNING); set_current_state(TASK_RUNNING);
mq->issue_fn(mq, req); mq->issue_fn(mq, req);
/*
* Current request becomes previous request
* and vice versa.
*/
mq->mqrq_prev->brq.mrq.data = NULL;
mq->mqrq_prev->req = NULL;
tmp = mq->mqrq_prev;
mq->mqrq_prev = mq->mqrq_cur;
mq->mqrq_cur = tmp;
} else { } else {
if (kthread_should_stop()) { if (kthread_should_stop()) {
set_current_state(TASK_RUNNING); set_current_state(TASK_RUNNING);
...@@ -77,13 +87,6 @@ static int mmc_queue_thread(void *d) ...@@ -77,13 +87,6 @@ static int mmc_queue_thread(void *d)
schedule(); schedule();
down(&mq->thread_sem); down(&mq->thread_sem);
} }
/* Current request becomes previous request and vice versa. */
mq->mqrq_prev->brq.mrq.data = NULL;
mq->mqrq_prev->req = NULL;
tmp = mq->mqrq_prev;
mq->mqrq_prev = mq->mqrq_cur;
mq->mqrq_cur = tmp;
} while (1); } while (1);
up(&mq->thread_sem); up(&mq->thread_sem);
......
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