@@ -1995,6 +1995,7 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc)
const u8 packed_nr = 2;
u8 reqs = 0;
+ pr_info("%s: enter\n", __func__);
if (rqc) {
mqrq_cur = mmc_queue_req_find(mq, rqc);
if (!mqrq_cur) {
@@ -2004,8 +2005,10 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc)
}
}
- if (!mq->qcnt)
+ if (!mq->qcnt) {
+ pr_info("%s: exit (0) (!mq->qcnt)\n", __func__);
return 0;
+ }
if (mqrq_cur)
reqs = mmc_blk_prep_packed_list(mq, mqrq_cur);
@@ -2035,8 +2038,10 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc)
} else
areq = NULL;
areq = mmc_start_req(card->host, areq, (int *) &status);
- if (!areq)
+ if (!areq) {
+ pr_info("%s: exit (0) (!areq)\n", __func__);
return 0;
+ }
mq_rq = container_of(areq, struct mmc_queue_req, mmc_active);
brq = &mq_rq->brq;
@@ -2150,6 +2155,7 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc)
mmc_queue_req_free(mq, mq_rq);
+ pr_info("%s: exit (1)\n", __func__);
return 1;
cmd_abort:
@@ -2184,6 +2190,7 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc)
mmc_queue_req_free(mq, mq_rq);
+ pr_info("%s: exit (0)\n", __func__);
return 0;
}
@@ -2194,10 +2201,13 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
struct mmc_card *card = md->queue.card;
unsigned int cmd_flags = req ? req->cmd_flags : 0;
+ pr_info("%s: enter\n", __func__);
+
if (req && !mq->qcnt)
/* claim host only for the first request */
mmc_get_card(card);
+ pr_info("%s: mmc_blk_part_switch\n", __func__);
ret = mmc_blk_part_switch(card, md);
if (ret) {
if (req) {
@@ -2208,6 +2218,7 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
}
if (cmd_flags & REQ_DISCARD) {
+ pr_info("%s: DISCARD rq\n", __func__);
/* complete ongoing async transfer before issuing discard */
if (mq->qcnt)
mmc_blk_issue_rw_rq(mq, NULL);
@@ -2216,11 +2227,13 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
else
ret = mmc_blk_issue_discard_rq(mq, req);
} else if (cmd_flags & REQ_FLUSH) {
+ pr_info("%s: FLUSH rq\n", __func__);
/* complete ongoing async transfer before issuing flush */
if (mq->qcnt)
mmc_blk_issue_rw_rq(mq, NULL);
ret = mmc_blk_issue_flush(mq, req);
} else {
+ pr_info("%s: RW rq\n", __func__);
ret = mmc_blk_issue_rw_rq(mq, req);
}
@@ -2228,6 +2241,7 @@ out:
/* Release host when there are no more requests */
if (!mq->qcnt)
mmc_put_card(card);
+ pr_info("%s: exit\n", __func__);
return ret;
}
@@ -219,6 +219,8 @@ static void __mmc_start_request(struct mmc_host *host, struct mmc_request *mrq)
{
int err;
+ pr_info("%s: enter\n", __func__);
+
/* Assumes host controller has been runtime resumed by mmc_claim_host */
err = mmc_retune(host);
if (err) {
@@ -256,6 +258,8 @@ static void __mmc_start_request(struct mmc_host *host, struct mmc_request *mrq)
trace_mmc_request_start(host, mrq);
host->ops->request(host, mrq);
+
+ pr_info("%s: exit\n", __func__);
}
static int mmc_start_request(struct mmc_host *host, struct mmc_request *mrq)
@@ -264,6 +268,7 @@ static int mmc_start_request(struct mmc_host *host, struct mmc_request *mrq)
unsigned int i, sz;
struct scatterlist *sg;
#endif
+ pr_info("%s: enter\n", __func__);
mmc_retune_hold(host);
if (mmc_card_removed(host->card))
@@ -327,6 +332,7 @@ static int mmc_start_request(struct mmc_host *host, struct mmc_request *mrq)
led_trigger_event(host->led, LED_FULL);
__mmc_start_request(host, mrq);
+ pr_info("%s: exit\n", __func__);
return 0;
}
@@ -466,6 +472,8 @@ static int __mmc_start_req(struct mmc_host *host, struct mmc_request *mrq)
{
int err;
+ pr_info("%s: enter\n", __func__);
+
mmc_wait_ongoing_tfr_cmd(host);
init_completion(&mrq->completion);
@@ -480,6 +488,8 @@ static int __mmc_start_req(struct mmc_host *host, struct mmc_request *mrq)
complete(&mrq->completion);
}
+ pr_info("%s: exit\n", __func__);
+
return err;
}
@@ -502,10 +512,14 @@ static int mmc_wait_for_data_req_done(struct mmc_host *host,
struct mmc_context_info *context_info = &host->context_info;
int err;
+ pr_info("%s: enter\n", __func__);
+
while (1) {
wait_event_interruptible(context_info->wait,
+// context_info->is_done_rcv);
(context_info->is_done_rcv ||
context_info->is_new_req));
+ pr_info("%s: waiting done\n", __func__);
context_info->is_waiting_last_req = false;
if (context_info->is_done_rcv) {
context_info->is_done_rcv = false;
@@ -527,11 +541,14 @@ static int mmc_wait_for_data_req_done(struct mmc_host *host,
continue; /* wait for done/new event again */
}
} else if (context_info->is_new_req) {
- if (!next_req)
+ if (!next_req) {
+ pr_info("%s: exit (!next_req)\n", __func__);
return MMC_BLK_NEW_REQUEST;
+ }
}
}
mmc_retune_release(host);
+ pr_info("%s: exit (err=%d)\n", __func__, err);
return err;
}
@@ -539,8 +556,11 @@ void mmc_wait_for_req_done(struct mmc_host *host, struct mmc_request *mrq)
{
struct mmc_command *cmd;
+ pr_info("%s: enter\n", __func__);
+
while (1) {
wait_for_completion(&mrq->completion);
+ pr_info("%s: waiting done\n", __func__);
cmd = mrq->cmd;
@@ -567,7 +587,7 @@ void mmc_wait_for_req_done(struct mmc_host *host, struct mmc_request *mrq)
mmc_retune_recheck(host);
- pr_debug("%s: req failed (CMD%u): %d, retrying...\n",
+ pr_info("%s: req failed (CMD%u): %d, retrying...\n",
mmc_hostname(host), cmd->opcode, cmd->error);
cmd->retries--;
cmd->error = 0;
@@ -575,6 +595,8 @@ void mmc_wait_for_req_done(struct mmc_host *host, struct mmc_request *mrq)
}
mmc_retune_release(host);
+
+ pr_info("%s: exit\n", __func__);
}
EXPORT_SYMBOL(mmc_wait_for_req_done);
@@ -656,6 +678,10 @@ struct mmc_async_req *mmc_start_req(struct mmc_host *host,
int start_err = 0;
struct mmc_async_req *data = host->areq;
+ pr_info("%s: enter\n", __func__);
+
+ pr_info("%s: areq=%p host->areq=%p\n", __func__, areq, host->areq);
+
/* Prepare a new request */
if (areq && !areq->pre_req_done) {
areq->pre_req_done = true;
@@ -671,6 +697,7 @@ struct mmc_async_req *mmc_start_req(struct mmc_host *host,
* The previous request was not completed,
* nothing to return
*/
+ pr_info("%s: exit (NULL)\n", __func__);
return NULL;
}
/*
@@ -714,6 +741,7 @@ struct mmc_async_req *mmc_start_req(struct mmc_host *host,
if (error)
*error = err;
+ pr_info("%s: exit (data=%p)\n", __func__, data);
return data;
}
EXPORT_SYMBOL(mmc_start_req);
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> --- drivers/mmc/card/block.c | 18 ++++++++++++++++-- drivers/mmc/core/core.c | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 46 insertions(+), 4 deletions(-)