void card_cleanup_queue(struct card_queue *cq) { struct request_queue *q = cq->queue; unsigned long flags; card_queue_resume(cq); /*should unregister reboot notifier before kthread stop*/ unregister_reboot_notifier(&cq->nb); /* Then terminate our worker thread */ kthread_stop(cq->thread); /* Empty the queue */ spin_lock_irqsave(q->queue_lock, flags); q->queuedata = NULL; blk_start_queue(q); spin_unlock_irqrestore(q->queue_lock, flags); if (cq->bounce_sg) kfree(cq->bounce_sg); cq->bounce_sg = NULL; if (cq->sg) kfree(cq->sg); cq->sg = NULL; //if (cq->bounce_buf) // kfree(cq->bounce_buf); cq->bounce_buf = NULL; cq->card = NULL; }
static int card_blk_resume(struct memory_card *card) { struct card_blk_data *card_data = card_get_drvdata(card); struct card_host *host = card->host; if(card->card_resume) { card->card_resume(card); } if(host->card_task_state) { host->card_task_state = 0; if(host->card_task) wake_up_process(host->card_task); } if((host->sdio_task_state)&&((card->card_type == CARD_SDIO))) { host->sdio_task_state = 0; if(host->sdio_irq_thread) wake_up_process(host->sdio_irq_thread); } if (card_data) { //mmc_blk_set_blksize(md, card); card_queue_resume(&card_data->queue); } return 0; }
static int card_blk_resume(struct memory_card *card) { struct card_blk_data *card_data = card_get_drvdata(card); struct card_host *host = card->host; printk("***Entered %s:%s\n", __FILE__,__func__); printk("Enter %s resume\n",card->name); if(card->card_resume) { card->card_resume(card); } if(host->card_task_state) { host->card_task_state = 0; if(host->card_task) wake_up_process(host->card_task); } if(host->sdio_task_state) { host->sdio_task_state = 0; if(host->sdio_irq_thread) wake_up_process(host->sdio_irq_thread); } if (card_data) { //mmc_blk_set_blksize(md, card); card_queue_resume(&card_data->queue); } return 0; }