|
@@ -186,12 +186,10 @@ void ide_complete_pm_request(ide_drive_t *drive, struct request *rq)
|
|
|
blk_pm_suspend_request(rq) ? "suspend" : "resume");
|
|
|
#endif
|
|
|
spin_lock_irqsave(q->queue_lock, flags);
|
|
|
- if (blk_pm_suspend_request(rq)) {
|
|
|
+ if (blk_pm_suspend_request(rq))
|
|
|
blk_stop_queue(q);
|
|
|
- } else {
|
|
|
+ else
|
|
|
drive->dev_flags &= ~IDE_DFLAG_BLOCKED;
|
|
|
- blk_start_queue(q);
|
|
|
- }
|
|
|
spin_unlock_irqrestore(q->queue_lock, flags);
|
|
|
|
|
|
drive->hwif->rq = NULL;
|
|
@@ -219,6 +217,8 @@ void ide_check_pm_state(ide_drive_t *drive, struct request *rq)
|
|
|
* point.
|
|
|
*/
|
|
|
ide_hwif_t *hwif = drive->hwif;
|
|
|
+ struct request_queue *q = drive->queue;
|
|
|
+ unsigned long flags;
|
|
|
int rc;
|
|
|
#ifdef DEBUG_PM
|
|
|
printk("%s: Wakeup request inited, waiting for !BSY...\n", drive->name);
|
|
@@ -231,5 +231,9 @@ void ide_check_pm_state(ide_drive_t *drive, struct request *rq)
|
|
|
rc = ide_wait_not_busy(hwif, 100000);
|
|
|
if (rc)
|
|
|
printk(KERN_WARNING "%s: drive not ready on wakeup\n", drive->name);
|
|
|
+
|
|
|
+ spin_lock_irqsave(q->queue_lock, flags);
|
|
|
+ blk_start_queue(q);
|
|
|
+ spin_unlock_irqrestore(q->queue_lock, flags);
|
|
|
}
|
|
|
}
|