mmc_blk_issue_rw_rq(mq, req); //mmc/card/block.c //尝试把当前request和队列中的其他request合并,以增强性能 mmc_blk_prep_packed_list(mq, rqc); //mmc/card/block.c //正常走此分支:设置读写命令号(多/单 块)等 mmc_blk_rw_rq_prep(mq->mqrq_cur, card, 0, mq); //mmc/card/block....
存储到这次处理mqrq_cur里面mq->mqrq_cur->req = req; blk_fetch_request()可以多次调用,如果queue里面没有内容,req将返回NULL。 接下来调用mq->issue_fn()对req进行处理 处理完毕后把mq->mqrq_prev = mq->mqrq_cur, 然后清空mq->mqrq_cur。 倘若req || mq->mqrq_prev->req 这次获取的req和上次...
staticintmmc_blk_issue_rq(struct mmc_queue *mq, struct request *req){ struct mmc_blk_data *md = mq->data; struct mmc_card *card = md->queue.card; struct mmc_blk_request brq;intret =1, disable_multi =0;do{ mmc_wait_for_req(card->host, &brq.mrq);/* * A block was successfu...
mmc_blk_issue_rw_rq -> mmc_start_req -> __mmc_start_data_req -> mmc_start_request -> omap_hsmmc_request 首先mmc_queue_thread获取相应的mmc_request然然后调用mq->issue_fn处理reuqest,issue_fn有可能被阻塞在mmc_wait_for_data_req_done,如果此时有新的请求到达,那么有可能会唤醒阻塞的进程(条件...
首先mmc_queue_thread获取相应的mmc_request然然后调用mq->issue_fn处理reuqest,issue_fn有可能被阻塞在mmc_wait_for_data_req_done,如果此时有新的请求到达,那么有可能会唤醒阻塞的进程(条件是cur==null, prev!=null)。 然后调用mmc_blk_issue_rq来选择对应的分区,根据req->cmd_flags的命令做不同的事情。REQ...
staticintmmc_blk_issue_rq(struct mmc_queue *mq, struct request *req){structmmc_blk_data*md=mq->data;structmmc_card*card=md->queue.card;structmmc_blk_requestbrq;intret =1;if(mmc_card_claim_host(card))gotoflush_queue;do{structmmc_commandcmd;u32 readcmd, writecmd;memset(&brq,0,sizeof...
static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req) { struct mmc_blk_data *md = mq->data; struct mmc_card *card = md->queue.card; struct mmc_blk_request brq; int ret = 1, disable_multi = 0; do {
既然要调用请求函数去读,那我们就来看看请求函数: mmc_blk_issue_rqstatic int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req){struct mmc_blk_data *md = mq->data;struct mmc_card *card = md->queue.card;struct mmc_blk_request brq;...
mmc_blk_put(md);returnerr; } 开发者ID:maliyu,项目名称:SOM2416,代码行数:33,代码来源:mmc_block.c 示例3: mmc_blk_probe ▲点赞 3▼ staticintmmc_blk_probe(struct mmc_card *card){structmmc_blk_data*md;interr;if(card->csd.cmdclass & ~0x1ff)return-ENODEV;if(card->csd.read_blkbits ...
ret = mmc_blk_part_switch(card, md); if (ret) { @@ -2060,7 +2060,7 @@ out: * In case sepecial request, there is no reentry to * the 'mmc_blk_issue_rq' with 'mqrq_prev->req'. */ - mmc_put_card(card); + mmc_release_host(card->host); ...