Merge "mmc: card: use blk_cleanup_queue() during shutdown/reboot"
This commit is contained in:
commit
c6eacb9bdb
2 changed files with 12 additions and 8 deletions
|
@ -4068,7 +4068,7 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,
|
||||||
INIT_LIST_HEAD(&md->part);
|
INIT_LIST_HEAD(&md->part);
|
||||||
md->usage = 1;
|
md->usage = 1;
|
||||||
|
|
||||||
ret = mmc_init_queue(&md->queue, card, &md->lock, subname, area_type);
|
ret = mmc_init_queue(&md->queue, card, NULL, subname, area_type);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_putdisk;
|
goto err_putdisk;
|
||||||
|
|
||||||
|
|
|
@ -724,15 +724,13 @@ int mmc_queue_suspend(struct mmc_queue *mq, int wait)
|
||||||
if (wait) {
|
if (wait) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* After blk_stop_queue is called, wait for all
|
* After blk_cleanup_queue is called, wait for all
|
||||||
* active_reqs to complete.
|
* active_reqs to complete.
|
||||||
* Then wait for cmdq thread to exit before calling
|
* Then wait for cmdq thread to exit before calling
|
||||||
* cmdq shutdown to avoid race between issuing
|
* cmdq shutdown to avoid race between issuing
|
||||||
* requests and shutdown of cmdq.
|
* requests and shutdown of cmdq.
|
||||||
*/
|
*/
|
||||||
spin_lock_irqsave(q->queue_lock, flags);
|
blk_cleanup_queue(q);
|
||||||
blk_stop_queue(q);
|
|
||||||
spin_unlock_irqrestore(q->queue_lock, flags);
|
|
||||||
|
|
||||||
if (host->cmdq_ctx.active_reqs)
|
if (host->cmdq_ctx.active_reqs)
|
||||||
wait_for_completion(
|
wait_for_completion(
|
||||||
|
@ -757,9 +755,15 @@ int mmc_queue_suspend(struct mmc_queue *mq, int wait)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(test_and_set_bit(MMC_QUEUE_SUSPENDED, &mq->flags))) {
|
if (!(test_and_set_bit(MMC_QUEUE_SUSPENDED, &mq->flags))) {
|
||||||
spin_lock_irqsave(q->queue_lock, flags);
|
if (!wait) {
|
||||||
blk_stop_queue(q);
|
/* suspend/stop the queue in case of suspend */
|
||||||
spin_unlock_irqrestore(q->queue_lock, flags);
|
spin_lock_irqsave(q->queue_lock, flags);
|
||||||
|
blk_stop_queue(q);
|
||||||
|
spin_unlock_irqrestore(q->queue_lock, flags);
|
||||||
|
} else {
|
||||||
|
/* shutdown the queue in case of shutdown/reboot */
|
||||||
|
blk_cleanup_queue(q);
|
||||||
|
}
|
||||||
|
|
||||||
rc = down_trylock(&mq->thread_sem);
|
rc = down_trylock(&mq->thread_sem);
|
||||||
if (rc && !wait) {
|
if (rc && !wait) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue