ons, 14 01 2009 kl. 18:16 +0100, skrev Bartlomiej Zolnierkiewicz: > On Monday 12 January 2009, Simon Holm Thøgersen wrote: > > commit 295f000 ("ide: don't execute the next queued command from the > > hard-IRQ context (v2)") breaks suspend to disk for me. On > > 'echo disk > /sys/power/state' the systems hangs, letting me switch > > virtual consoles, but not responding to Alt+SysRq > > Thanks, please try the patch below (it fixes the problem for me): And for me as well. Thanks! Simon > > From: Bartlomiej Zolnierkiewicz <bzolnier@xxxxxxxxx> > Subject: [PATCH] ide: fix suspend regression > > On Monday 12 January 2009, Simon Holm Thøgersen wrote: > > commit 295f000 ("ide: don't execute the next queued command from the > > hard-IRQ context (v2)") breaks suspend to disk for me. On > > 'echo disk > /sys/power/state' the systems hangs, letting me switch > > virtual consoles, but not responding to Alt+SysRq > > Restart the request queue early for REQ_TYPE_PM_RESUME requests > (though there is only one resume request for the whole resume > sequence it stays in the queue until is fully completed and now > depends on kblockd for processing consequential resume states). > > Reported-and-bisected-by: Simon Holm Thøgersen <odie@xxxxxxxxx> > Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@xxxxxxxxx> > --- > drivers/ide/ide-pm.c | 12 ++++++++---- > 1 file changed, 8 insertions(+), 4 deletions(-) > > Index: b/drivers/ide/ide-pm.c > =================================================================== > --- a/drivers/ide/ide-pm.c > +++ b/drivers/ide/ide-pm.c > @@ -186,12 +186,10 @@ void ide_complete_pm_request(ide_drive_t > 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 *dri > * 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 *dri > 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); > } > } > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html