Message ID | 001101ce207b$91e60440$b5b20cc0$%jun@samsung.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Seungwon, 2013/3/14 Seungwon Jeon <tgih.jun@samsung.com>: > For normal request mmc_blk_issue_rq is called twice with asynchronous > transfer(cur and prev). Host's claim and release can be done in each > mmc_blk_issue_rq. However, Special request is currently excluded in > asynchronous transfer. After special request is finished, if there is > no new request, mmc_release_host won't be called in mmc_blk_issue_rq. > The problem is founded during mmc_suspend. > > [<c0541124>] (__schedule+0x0/0x78c) from [<c05419e8>] (schedule+0x38/0x78) > [<c05419b0>] (schedule+0x0/0x78) from [<c03a843c>] (__mmc_claim_host+0xac/0x1b4) > [<c03a8390>] (__mmc_claim_host+0x0/0x1b4) from [<c03ac98c>] (mmc_suspend+0x28/0x9c) > [<c03ac964>] (mmc_suspend+0x0/0x9c) from [<c03aad24>] (mmc_suspend_host+0xb4/0x194) > ... > > Reported-by: Johan Rudholm <jrudholm@gmail.com> > Signed-off-by: Seungwon Jeon <tgih.jun@samsung.com> Thank you for the quick response and fix! This fixes the problem. So please include my Tested-by: Johan Rudholm <johan.rudholm@stericsson.com> Kind regards, Johan -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 14 March 2013 12:56, Johan Rudholm <jrudholm@gmail.com> wrote: > Hi Seungwon, > > 2013/3/14 Seungwon Jeon <tgih.jun@samsung.com>: >> For normal request mmc_blk_issue_rq is called twice with asynchronous >> transfer(cur and prev). Host's claim and release can be done in each >> mmc_blk_issue_rq. However, Special request is currently excluded in >> asynchronous transfer. After special request is finished, if there is >> no new request, mmc_release_host won't be called in mmc_blk_issue_rq. >> The problem is founded during mmc_suspend. >> >> [<c0541124>] (__schedule+0x0/0x78c) from [<c05419e8>] (schedule+0x38/0x78) >> [<c05419b0>] (schedule+0x0/0x78) from [<c03a843c>] (__mmc_claim_host+0xac/0x1b4) >> [<c03a8390>] (__mmc_claim_host+0x0/0x1b4) from [<c03ac98c>] (mmc_suspend+0x28/0x9c) >> [<c03ac964>] (mmc_suspend+0x0/0x9c) from [<c03aad24>] (mmc_suspend_host+0xb4/0x194) >> ... >> >> Reported-by: Johan Rudholm <jrudholm@gmail.com> >> Signed-off-by: Seungwon Jeon <tgih.jun@samsung.com> > > Thank you for the quick response and fix! This fixes the problem. So > please include my > > Tested-by: Johan Rudholm <johan.rudholm@stericsson.com> > > Kind regards, Johan > -- > To unsubscribe from this list: send the line "unsubscribe linux-mmc" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html Chris, could you send this for the 3.9 rc, since it is a bugfix? Kind regards Ulf Hansson -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi, On Thu, Mar 14 2013, Ulf Hansson wrote: >> 2013/3/14 Seungwon Jeon <tgih.jun@samsung.com>: >>> For normal request mmc_blk_issue_rq is called twice with asynchronous >>> transfer(cur and prev). Host's claim and release can be done in each >>> mmc_blk_issue_rq. However, Special request is currently excluded in >>> asynchronous transfer. After special request is finished, if there is >>> no new request, mmc_release_host won't be called in mmc_blk_issue_rq. >>> The problem is founded during mmc_suspend. >>> >>> [<c0541124>] (__schedule+0x0/0x78c) from [<c05419e8>] (schedule+0x38/0x78) >>> [<c05419b0>] (schedule+0x0/0x78) from [<c03a843c>] >>> (__mmc_claim_host+0xac/0x1b4) >>> [<c03a8390>] (__mmc_claim_host+0x0/0x1b4) from [<c03ac98c>] >>> (mmc_suspend+0x28/0x9c) >>> [<c03ac964>] (mmc_suspend+0x0/0x9c) from [<c03aad24>] >>> (mmc_suspend_host+0xb4/0x194) >>> ... >>> >>> Reported-by: Johan Rudholm <jrudholm@gmail.com> >>> Signed-off-by: Seungwon Jeon <tgih.jun@samsung.com> >> >> Thank you for the quick response and fix! This fixes the problem. So >> please include my >> >> Tested-by: Johan Rudholm <johan.rudholm@stericsson.com> > > Chris, could you send this for the 3.9 rc, since it is a bugfix? Thanks, pushed to mmc-next for 3.9-rc. - Chris.
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c index 5bab73b..71c5ce7 100644 --- a/drivers/mmc/card/block.c +++ b/drivers/mmc/card/block.c @@ -1932,8 +1932,14 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req) } out: - if (!req && !(mq->flags & MMC_QUEUE_NEW_REQUEST)) - /* release host only when there are no more requests */ + if (!req && !(mq->flags & MMC_QUEUE_NEW_REQUEST) || + req && (req->cmd_flags & MMC_REQ_SPECIAL_MASK)) + /* + * Release host when there are no more requests + * and after special request(discard, flush) is done. + * In case sepecial request, there is no reentry to + * the 'mmc_blk_issue_rq' with 'mqrq_prev->req'. + */ mmc_release_host(card->host); return ret; } diff --git a/drivers/mmc/card/queue.c b/drivers/mmc/card/queue.c index fa4e44e..9447a0e 100644 --- a/drivers/mmc/card/queue.c +++ b/drivers/mmc/card/queue.c @@ -22,9 +22,6 @@ #define MMC_QUEUE_BOUNCESZ 65536 - -#define MMC_REQ_SPECIAL_MASK (REQ_DISCARD | REQ_FLUSH) - /* * Prepare a MMC request. This just filters out odd stuff. */ diff --git a/drivers/mmc/card/queue.h b/drivers/mmc/card/queue.h index 031bf63..5752d50 100644 --- a/drivers/mmc/card/queue.h +++ b/drivers/mmc/card/queue.h @@ -1,6 +1,8 @@ #ifndef MMC_QUEUE_H #define MMC_QUEUE_H +#define MMC_REQ_SPECIAL_MASK (REQ_DISCARD | REQ_FLUSH) + struct request; struct task_struct;
For normal request mmc_blk_issue_rq is called twice with asynchronous transfer(cur and prev). Host's claim and release can be done in each mmc_blk_issue_rq. However, Special request is currently excluded in asynchronous transfer. After special request is finished, if there is no new request, mmc_release_host won't be called in mmc_blk_issue_rq. The problem is founded during mmc_suspend. [<c0541124>] (__schedule+0x0/0x78c) from [<c05419e8>] (schedule+0x38/0x78) [<c05419b0>] (schedule+0x0/0x78) from [<c03a843c>] (__mmc_claim_host+0xac/0x1b4) [<c03a8390>] (__mmc_claim_host+0x0/0x1b4) from [<c03ac98c>] (mmc_suspend+0x28/0x9c) [<c03ac964>] (mmc_suspend+0x0/0x9c) from [<c03aad24>] (mmc_suspend_host+0xb4/0x194) ... Reported-by: Johan Rudholm <jrudholm@gmail.com> Signed-off-by: Seungwon Jeon <tgih.jun@samsung.com> --- drivers/mmc/card/block.c | 10 ++++++++-- drivers/mmc/card/queue.c | 3 --- drivers/mmc/card/queue.h | 2 ++ 3 files changed, 10 insertions(+), 5 deletions(-)