[PATCH] Fix oops on reboot in physmap
Jörn Engel
joern at logfs.org
Thu Mar 13 04:22:24 EDT 2008
On Thu, 13 March 2008 09:42:42 +0100, Arnaud Patard wrote:
>
> I sent this patch to David Woodhouse, but I forgot to put the list in
> CC: (and I'm not even sure that I used the right email address :( ). So,
> I'm sending the patch here so everyone can have my fix.
There were various small errors in it, afaics. Does this patch achieve
the same result for you?
Added dwmw2 on Cc:. This could be material for -stable.
Jörn
--
Prosperity makes friends, adversity tries them.
-- Publilius Syrus
Commit df66e7167ac756baf14d2b8ea7a2cfa056600a93 is adding support for multiple
resources in physmap. On shutdown/supend/resume, it's suspending all resources
by calling mtd[]->suspend() without checking the mtd[] is not null.
This makes oopsing my kernel.
Signed-off-by: Arnaud Patard <arnaud.patard at rtp-net.org>
Signed-Off-By: Joern Engel <joern at logfs.org>
diff --git a/drivers/mtd/maps/physmap.c b/drivers/mtd/maps/physmap.c
index f00e04e..1abecd5 100644
--- a/drivers/mtd/maps/physmap.c
+++ b/drivers/mtd/maps/physmap.c
@@ -204,7 +204,8 @@ static int physmap_flash_suspend(struct platform_device *dev, pm_message_t state
if (info)
for (i = 0; i < MAX_RESOURCES; i++)
- ret |= info->mtd[i]->suspend(info->mtd[i]);
+ if (info->mtd[i])
+ ret |= info->mtd[i]->suspend(info->mtd[i]);
return ret;
}
@@ -216,7 +217,8 @@ static int physmap_flash_resume(struct platform_device *dev)
if (info)
for (i = 0; i < MAX_RESOURCES; i++)
- info->mtd[i]->resume(info->mtd[i]);
+ if (info->mtd[i])
+ info->mtd[i]->resume(info->mtd[i]);
return 0;
}
@@ -225,9 +227,10 @@ static void physmap_flash_shutdown(struct platform_device *dev)
struct physmap_flash_info *info = platform_get_drvdata(dev);
int i;
- for (i = 0; i < MAX_RESOURCES; i++)
- if (info && info->mtd[i]->suspend(info->mtd[i]) == 0)
- info->mtd[i]->resume(info->mtd[i]);
+ if (info)
+ for (i = 0; i < MAX_RESOURCES; i++)
+ if (info->mtd[i] && info->mtd[i]->suspend(info->mtd[i]) == 0)
+ info->mtd[i]->resume(info->mtd[i]);
}
#else
#define physmap_flash_suspend NULL
More information about the linux-mtd
mailing list