Patchwork ide: fix generic_ide_suspend/resume Oops

login
register
mail settings
Submitter Miklos Szeredi
Date Aug. 21, 2012, 3:20 p.m.
Message ID <87txvwgtkx.fsf@tucsk.pomaz.szeredi.hu>
Download mbox | patch
Permalink /patch/179078/
State Accepted
Delegated to: David Miller
Headers show

Comments

Miklos Szeredi - Aug. 21, 2012, 3:20 p.m.
From: Miklos Szeredi <mszeredi@suse.cz>

This patch fixes a regresion introduced by commit 0998d063 (device-core: Ensure
drvdata = NULL when no driver is bound).

Suspend oopses in generic_ide_suspend() because dev_get_drvdata()
returns NULL (dev->p->driver_data == NULL) and this function is not
prepared for this.

Fix is based on Alan Stern's suggestion.

Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Acked-by: Rafael J. Wysocki <rjw@sisk.pl>
---
 drivers/ide/ide-pm.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
David Miller - Aug. 21, 2012, 9:54 p.m.
From: Miklos Szeredi <miklos@szeredi.hu>
Date: Tue, 21 Aug 2012 17:20:30 +0200

> From: Miklos Szeredi <mszeredi@suse.cz>
> 
> This patch fixes a regresion introduced by commit 0998d063 (device-core: Ensure
> drvdata = NULL when no driver is bound).
> 
> Suspend oopses in generic_ide_suspend() because dev_get_drvdata()
> returns NULL (dev->p->driver_data == NULL) and this function is not
> prepared for this.
> 
> Fix is based on Alan Stern's suggestion.
> 
> Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
> Acked-by: Rafael J. Wysocki <rjw@sisk.pl>

Applied, thanks.
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/ide/ide-pm.c b/drivers/ide/ide-pm.c
index 9240609..8d1e32d 100644
--- a/drivers/ide/ide-pm.c
+++ b/drivers/ide/ide-pm.c
@@ -4,7 +4,7 @@ 
 
 int generic_ide_suspend(struct device *dev, pm_message_t mesg)
 {
-	ide_drive_t *drive = dev_get_drvdata(dev);
+	ide_drive_t *drive = to_ide_device(dev);
 	ide_drive_t *pair = ide_get_pair_dev(drive);
 	ide_hwif_t *hwif = drive->hwif;
 	struct request *rq;
@@ -40,7 +40,7 @@  int generic_ide_suspend(struct device *dev, pm_message_t mesg)
 
 int generic_ide_resume(struct device *dev)
 {
-	ide_drive_t *drive = dev_get_drvdata(dev);
+	ide_drive_t *drive = to_ide_device(dev);
 	ide_drive_t *pair = ide_get_pair_dev(drive);
 	ide_hwif_t *hwif = drive->hwif;
 	struct request *rq;