* [PATCH v2] mmc: queue: exclude asynchronous transfer for special request
@ 2012-12-26 1:40 Seungwon Jeon
2012-12-27 13:21 ` Konstantin Dorfman
0 siblings, 1 reply; 3+ messages in thread
From: Seungwon Jeon @ 2012-12-26 1:40 UTC (permalink / raw)
To: linux-mmc
Cc: 'Chris Ball', 'Per Forlin',
'Konstantin Dorfman'
Unlike normal r/w request, special requests(discard, flush)
is finished with a one-time issue_fn. Request change to
mqrq_prev makes unnecessary call.
Signed-off-by: Seungwon Jeon <tgih.jun@samsung.com>
---
drivers/mmc/card/queue.c | 10 ++++++++++
1 files changed, 10 insertions(+), 0 deletions(-)
diff --git a/drivers/mmc/card/queue.c b/drivers/mmc/card/queue.c
index fadf52e..c7e8716 100644
--- a/drivers/mmc/card/queue.c
+++ b/drivers/mmc/card/queue.c
@@ -24,6 +24,8 @@
#define MMC_QUEUE_SUSPENDED (1 << 0)
+#define MMC_REQ_SPECIAL_MASK (REQ_DISCARD | REQ_FLUSH)
+
/*
* Prepare a MMC request. This just filters out odd stuff.
*/
@@ -58,6 +60,7 @@ static int mmc_queue_thread(void *d)
do {
struct request *req = NULL;
struct mmc_queue_req *tmp;
+ unsigned int cmd_flags = 0;
spin_lock_irq(q->queue_lock);
set_current_state(TASK_INTERRUPTIBLE);
@@ -67,12 +70,19 @@ static int mmc_queue_thread(void *d)
if (req || mq->mqrq_prev->req) {
set_current_state(TASK_RUNNING);
+ cmd_flags = req ? req->cmd_flags : 0;
mq->issue_fn(mq, req);
/*
* Current request becomes previous request
* and vice versa.
+ * In case of special requests, current request
+ * has been finished. Do not remain it to previous
+ * request.
*/
+ if (cmd_flags & MMC_REQ_SPECIAL_MASK)
+ mq->mqrq_cur->req = NULL;
+
mq->mqrq_prev->brq.mrq.data = NULL;
mq->mqrq_prev->req = NULL;
tmp = mq->mqrq_prev;
--
1.7.0.4
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v2] mmc: queue: exclude asynchronous transfer for special request
2012-12-26 1:40 [PATCH v2] mmc: queue: exclude asynchronous transfer for special request Seungwon Jeon
@ 2012-12-27 13:21 ` Konstantin Dorfman
2013-01-14 19:26 ` Chris Ball
0 siblings, 1 reply; 3+ messages in thread
From: Konstantin Dorfman @ 2012-12-27 13:21 UTC (permalink / raw)
To: Seungwon Jeon; +Cc: linux-mmc, 'Chris Ball', 'Per Forlin'
Reviewed-by: Konstantin Dorfman <kdorfman@codeaurora.org>
On 12/26/2012 03:40 AM, Seungwon Jeon wrote:
> Unlike normal r/w request, special requests(discard, flush)
> is finished with a one-time issue_fn. Request change to
> mqrq_prev makes unnecessary call.
>
> Signed-off-by: Seungwon Jeon <tgih.jun@samsung.com>
> ---
> drivers/mmc/card/queue.c | 10 ++++++++++
> 1 files changed, 10 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/mmc/card/queue.c b/drivers/mmc/card/queue.c
> index fadf52e..c7e8716 100644
> --- a/drivers/mmc/card/queue.c
> +++ b/drivers/mmc/card/queue.c
> @@ -24,6 +24,8 @@
>
> #define MMC_QUEUE_SUSPENDED (1 << 0)
>
> +#define MMC_REQ_SPECIAL_MASK (REQ_DISCARD | REQ_FLUSH)
> +
> /*
> * Prepare a MMC request. This just filters out odd stuff.
> */
> @@ -58,6 +60,7 @@ static int mmc_queue_thread(void *d)
> do {
> struct request *req = NULL;
> struct mmc_queue_req *tmp;
> + unsigned int cmd_flags = 0;
>
> spin_lock_irq(q->queue_lock);
> set_current_state(TASK_INTERRUPTIBLE);
> @@ -67,12 +70,19 @@ static int mmc_queue_thread(void *d)
>
> if (req || mq->mqrq_prev->req) {
> set_current_state(TASK_RUNNING);
> + cmd_flags = req ? req->cmd_flags : 0;
> mq->issue_fn(mq, req);
>
> /*
> * Current request becomes previous request
> * and vice versa.
> + * In case of special requests, current request
> + * has been finished. Do not remain it to previous
> + * request.
> */
> + if (cmd_flags & MMC_REQ_SPECIAL_MASK)
> + mq->mqrq_cur->req = NULL;
> +
> mq->mqrq_prev->brq.mrq.data = NULL;
> mq->mqrq_prev->req = NULL;
> tmp = mq->mqrq_prev;
>
--
Konstantin Dorfman,
QUALCOMM ISRAEL, on behalf of Qualcomm Innovation Center,
Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v2] mmc: queue: exclude asynchronous transfer for special request
2012-12-27 13:21 ` Konstantin Dorfman
@ 2013-01-14 19:26 ` Chris Ball
0 siblings, 0 replies; 3+ messages in thread
From: Chris Ball @ 2013-01-14 19:26 UTC (permalink / raw)
To: Konstantin Dorfman; +Cc: Seungwon Jeon, linux-mmc, 'Per Forlin'
Hi,
On Thu, Dec 27 2012, Konstantin Dorfman wrote:
> Reviewed-by: Konstantin Dorfman <kdorfman@codeaurora.org>
>
> On 12/26/2012 03:40 AM, Seungwon Jeon wrote:
>> Unlike normal r/w request, special requests(discard, flush)
>> is finished with a one-time issue_fn. Request change to
>> mqrq_prev makes unnecessary call.
>>
>> Signed-off-by: Seungwon Jeon <tgih.jun@samsung.com>
Thanks, pushed to mmc-next for 3.9.
- Chris.
--
Chris Ball <cjb@laptop.org> <http://printf.net/>
One Laptop Per Child
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2013-01-14 19:26 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-12-26 1:40 [PATCH v2] mmc: queue: exclude asynchronous transfer for special request Seungwon Jeon
2012-12-27 13:21 ` Konstantin Dorfman
2013-01-14 19:26 ` Chris Ball
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).