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: Seungwon Jeon <tgih.jun@samsung.com> Reviewed-by: Per Forlin <per.forlin@stericsson.com> Tested-by: Johan Rudholm <johan.rudholm@stericsson.com> Signed-off-by: Chris Ball <cjb@laptop.org>
This commit is contained in:
parent
42cd95a060
commit
45c5a914e6
1 changed files with 10 additions and 7 deletions
|
@ -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)
|
||||||
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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue