forked from Minki/linux
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
@ -68,6 +68,16 @@ static int mmc_queue_thread(void *d)
|
||||
if (req || mq->mqrq_prev->req) {
|
||||
set_current_state(TASK_RUNNING);
|
||||
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 {
|
||||
if (kthread_should_stop()) {
|
||||
set_current_state(TASK_RUNNING);
|
||||
@ -77,13 +87,6 @@ static int mmc_queue_thread(void *d)
|
||||
schedule();
|
||||
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);
|
||||
up(&mq->thread_sem);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user