* [PATCH] mmc: Fix re-probing after hibernation @ 2010-12-08 15:23 Takashi Iwai 2010-12-08 22:04 ` Maxim Levitsky 2010-12-09 1:53 ` Chris Ball 0 siblings, 2 replies; 6+ messages in thread From: Takashi Iwai @ 2010-12-08 15:23 UTC (permalink / raw) To: Chris Ball Cc: Maxim Levitsky, Oliver Neukum, Andrew Morton, linux-mmc, linux-kernel The commit 4c2ef25fe0b847d2ae818f74758ddb0be1c27d8e mmc: fix all hangs related to mmc/sd card insert/removal during suspend/resume introduced a bug where the device probing no longer works after hibernation. This was because the pm notifier expects PM_POST_HIBERNATION call while the system sends PM_POST_RESTORE instead, thus disable_rescan is kept as 1. Cc: <stable@kernel.org> Signed-off-by: Takashi Iwai <tiwai@suse.de> --- drivers/mmc/core/core.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index 31ae07a..30094f6 100644 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -1772,7 +1772,7 @@ int mmc_pm_notify(struct notifier_block *notify_block, break; case PM_POST_SUSPEND: - case PM_POST_HIBERNATION: + case PM_POST_RESTORE: spin_lock_irqsave(&host->lock, flags); host->rescan_disable = 0; -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] mmc: Fix re-probing after hibernation 2010-12-08 15:23 [PATCH] mmc: Fix re-probing after hibernation Takashi Iwai @ 2010-12-08 22:04 ` Maxim Levitsky 2010-12-09 1:53 ` Chris Ball 1 sibling, 0 replies; 6+ messages in thread From: Maxim Levitsky @ 2010-12-08 22:04 UTC (permalink / raw) To: Takashi Iwai Cc: Chris Ball, Oliver Neukum, Andrew Morton, linux-mmc, linux-kernel On Wed, 2010-12-08 at 16:23 +0100, Takashi Iwai wrote: > The commit 4c2ef25fe0b847d2ae818f74758ddb0be1c27d8e > mmc: fix all hangs related to mmc/sd card insert/removal during > suspend/resume > introduced a bug where the device probing no longer works after > hibernation. This was because the pm notifier expects > PM_POST_HIBERNATION call while the system sends PM_POST_RESTORE > instead, thus disable_rescan is kept as 1. > > Cc: <stable@kernel.org> > Signed-off-by: Takashi Iwai <tiwai@suse.de> > --- > drivers/mmc/core/core.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c > index 31ae07a..30094f6 100644 > --- a/drivers/mmc/core/core.c > +++ b/drivers/mmc/core/core.c > @@ -1772,7 +1772,7 @@ int mmc_pm_notify(struct notifier_block *notify_block, > break; > > case PM_POST_SUSPEND: > - case PM_POST_HIBERNATION: > + case PM_POST_RESTORE: > > spin_lock_irqsave(&host->lock, flags); > host->rescan_disable = 0; So that was the case.... Takasi, thank you very much. I always use the 'unsafe resume' thing so I wasn't affected. Best regards, Maxim Levitsky ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] mmc: Fix re-probing after hibernation 2010-12-08 15:23 [PATCH] mmc: Fix re-probing after hibernation Takashi Iwai 2010-12-08 22:04 ` Maxim Levitsky @ 2010-12-09 1:53 ` Chris Ball [not found] ` <s5hlj3z1ksb.wl%tiwai@suse.de> 1 sibling, 1 reply; 6+ messages in thread From: Chris Ball @ 2010-12-09 1:53 UTC (permalink / raw) To: Takashi Iwai Cc: Maxim Levitsky, Oliver Neukum, Andrew Morton, linux-mmc, linux-kernel Hi Takashi, On Wed, Dec 08, 2010 at 04:23:59PM +0100, Takashi Iwai wrote: > The commit 4c2ef25fe0b847d2ae818f74758ddb0be1c27d8e > mmc: fix all hangs related to mmc/sd card insert/removal during > suspend/resume > introduced a bug where the device probing no longer works after > hibernation. This was because the pm notifier expects > PM_POST_HIBERNATION call while the system sends PM_POST_RESTORE > instead, thus disable_rescan is kept as 1. > > Cc: <stable@kernel.org> > Signed-off-by: Takashi Iwai <tiwai@suse.de> > --- > drivers/mmc/core/core.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c > index 31ae07a..30094f6 100644 > --- a/drivers/mmc/core/core.c > +++ b/drivers/mmc/core/core.c > @@ -1772,7 +1772,7 @@ int mmc_pm_notify(struct notifier_block *notify_block, > break; > > case PM_POST_SUSPEND: > - case PM_POST_HIBERNATION: > + case PM_POST_RESTORE: > > spin_lock_irqsave(&host->lock, flags); > host->rescan_disable = 0; Thanks very much for tracking this down! The code suggests that POST_RESTORE is only emitted on a *failed* hibernation restore -- from include/linux/notifier.h: /* Hibernation and suspend events */ #define PM_POST_HIBERNATION 0x0002 /* Hibernation finished */ #define PM_POST_SUSPEND 0x0004 /* Suspend finished */ #define PM_POST_RESTORE 0x0006 /* Restore failed */ So, this all suggests that we want to add the POST_RESTORE case but also want to keep the POST_HIBERNATION case. Do you agree? Was the case you saw of failed probe after hibernation a failed restore from hibernation image? By the way, it looks like there are some other drivers which also test for POST_HIBERNATION but not POST_RESTORE: drivers/media/video/tlg2300/pd-main.c drivers/s390/char/vmwatchdog.c drivers/s390/cio/css.c drivers/staging/brcm80211/brcmfmac/dhd_linux.c Thanks, - Chris. -- Chris Ball <cjb@laptop.org> <http://printf.net/> One Laptop Per Child ^ permalink raw reply [flat|nested] 6+ messages in thread
[parent not found: <s5hlj3z1ksb.wl%tiwai@suse.de>]
* Re: [PATCH] mmc: Fix re-probing after hibernation [not found] ` <s5hlj3z1ksb.wl%tiwai@suse.de> @ 2010-12-09 20:37 ` Rafael J. Wysocki 2010-12-10 7:40 ` Takashi Iwai 0 siblings, 1 reply; 6+ messages in thread From: Rafael J. Wysocki @ 2010-12-09 20:37 UTC (permalink / raw) To: Takashi Iwai Cc: Chris Ball, Maxim Levitsky, Oliver Neukum, Andrew Morton, Pavel Machek, linux-mmc, linux-kernel On Thursday, December 09, 2010, Takashi Iwai wrote: > At Thu, 9 Dec 2010 01:53:03 +0000, > Chris Ball wrote: > > > > Hi Takashi, > > > > On Wed, Dec 08, 2010 at 04:23:59PM +0100, Takashi Iwai wrote: > > > The commit 4c2ef25fe0b847d2ae818f74758ddb0be1c27d8e > > > mmc: fix all hangs related to mmc/sd card insert/removal during > > > suspend/resume > > > introduced a bug where the device probing no longer works after > > > hibernation. This was because the pm notifier expects > > > PM_POST_HIBERNATION call while the system sends PM_POST_RESTORE > > > instead, thus disable_rescan is kept as 1. > > > > > > Cc: <stable@kernel.org> > > > Signed-off-by: Takashi Iwai <tiwai@suse.de> > > > --- > > > drivers/mmc/core/core.c | 2 +- > > > 1 files changed, 1 insertions(+), 1 deletions(-) > > > > > > diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c > > > index 31ae07a..30094f6 100644 > > > --- a/drivers/mmc/core/core.c > > > +++ b/drivers/mmc/core/core.c > > > @@ -1772,7 +1772,7 @@ int mmc_pm_notify(struct notifier_block *notify_block, > > > break; > > > > > > case PM_POST_SUSPEND: > > > - case PM_POST_HIBERNATION: > > > + case PM_POST_RESTORE: > > > > > > spin_lock_irqsave(&host->lock, flags); > > > host->rescan_disable = 0; > > > > Thanks very much for tracking this down! The code suggests that > > POST_RESTORE is only emitted on a *failed* hibernation restore -- > > from include/linux/notifier.h: > > > > /* Hibernation and suspend events */ > > #define PM_POST_HIBERNATION 0x0002 /* Hibernation finished */ > > #define PM_POST_SUSPEND 0x0004 /* Suspend finished */ > > #define PM_POST_RESTORE 0x0006 /* Restore failed */ > > > > So, this all suggests that we want to add the POST_RESTORE case but > > also want to keep the POST_HIBERNATION case. Do you agree? Was the > > case you saw of failed probe after hibernation a failed restore from > > hibernation image? > > Right, I took a look at Documentation/pm/notifiers.txt, and it's > clearly written that PM_POST_RESTORE is only for the error case. But > S4 resume succeeded actually on my machine, so it took time to spot > out the culprit. > > Looking at the code in kernel/power/, this might be the case of > user-space suspend. hibernate.c seems returning PM_POST_HIBERNATION > while user.c returns PM_POST_RESTORE after image restoration, and I > guess it's a bug of user.c. > > The untested patch is below (sorry I have no corresponding machine > at my home.) Rafael, Pavel, could you check this? > > > thanks, > > Takashi > > === > From 915fda609e02b02e4fc6b944e4432ea1d964adc5 Mon Sep 17 00:00:00 2001 > From: Takashi Iwai <tiwai@suse.de> > Date: Thu, 9 Dec 2010 08:09:21 +0100 > Subject: [PATCH] PM: Fix PM_POST_* notification with user-space suspend > > The user-space hibernation sends a wrong notification after the image > restoration because of thinko for the file flag check. RDONLY > corresponds to hibernation and WRONLY to restoration, confusingly. The patch is correct. I'm taking it to my tree. Thanks, Rafael > Signed-off-by: Takashi Iwai <tiwai@suse.de> > --- > kernel/power/user.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/kernel/power/user.c b/kernel/power/user.c > index e819e17..11d92b2 100644 > --- a/kernel/power/user.c > +++ b/kernel/power/user.c > @@ -137,7 +137,7 @@ static int snapshot_release(struct inode *inode, struct file *filp) > free_all_swap_pages(data->swap); > if (data->frozen) > thaw_processes(); > - pm_notifier_call_chain(data->mode == O_WRONLY ? > + pm_notifier_call_chain(data->mode == O_RDONLY ? > PM_POST_HIBERNATION : PM_POST_RESTORE); > atomic_inc(&snapshot_device_available); > > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] mmc: Fix re-probing after hibernation 2010-12-09 20:37 ` Rafael J. Wysocki @ 2010-12-10 7:40 ` Takashi Iwai 2010-12-11 21:55 ` Chris Ball 0 siblings, 1 reply; 6+ messages in thread From: Takashi Iwai @ 2010-12-10 7:40 UTC (permalink / raw) To: Rafael J. Wysocki Cc: Chris Ball, Maxim Levitsky, Oliver Neukum, Andrew Morton, Pavel Machek, linux-mmc, linux-kernel At Thu, 9 Dec 2010 21:37:24 +0100, Rafael J. Wysocki wrote: > > On Thursday, December 09, 2010, Takashi Iwai wrote: > > At Thu, 9 Dec 2010 01:53:03 +0000, > > Chris Ball wrote: > > > > > > Hi Takashi, > > > > > > On Wed, Dec 08, 2010 at 04:23:59PM +0100, Takashi Iwai wrote: > > > > The commit 4c2ef25fe0b847d2ae818f74758ddb0be1c27d8e > > > > mmc: fix all hangs related to mmc/sd card insert/removal during > > > > suspend/resume > > > > introduced a bug where the device probing no longer works after > > > > hibernation. This was because the pm notifier expects > > > > PM_POST_HIBERNATION call while the system sends PM_POST_RESTORE > > > > instead, thus disable_rescan is kept as 1. > > > > > > > > Cc: <stable@kernel.org> > > > > Signed-off-by: Takashi Iwai <tiwai@suse.de> > > > > --- > > > > drivers/mmc/core/core.c | 2 +- > > > > 1 files changed, 1 insertions(+), 1 deletions(-) > > > > > > > > diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c > > > > index 31ae07a..30094f6 100644 > > > > --- a/drivers/mmc/core/core.c > > > > +++ b/drivers/mmc/core/core.c > > > > @@ -1772,7 +1772,7 @@ int mmc_pm_notify(struct notifier_block *notify_block, > > > > break; > > > > > > > > case PM_POST_SUSPEND: > > > > - case PM_POST_HIBERNATION: > > > > + case PM_POST_RESTORE: > > > > > > > > spin_lock_irqsave(&host->lock, flags); > > > > host->rescan_disable = 0; > > > > > > Thanks very much for tracking this down! The code suggests that > > > POST_RESTORE is only emitted on a *failed* hibernation restore -- > > > from include/linux/notifier.h: > > > > > > /* Hibernation and suspend events */ > > > #define PM_POST_HIBERNATION 0x0002 /* Hibernation finished */ > > > #define PM_POST_SUSPEND 0x0004 /* Suspend finished */ > > > #define PM_POST_RESTORE 0x0006 /* Restore failed */ > > > > > > So, this all suggests that we want to add the POST_RESTORE case but > > > also want to keep the POST_HIBERNATION case. Do you agree? Was the > > > case you saw of failed probe after hibernation a failed restore from > > > hibernation image? > > > > Right, I took a look at Documentation/pm/notifiers.txt, and it's > > clearly written that PM_POST_RESTORE is only for the error case. But > > S4 resume succeeded actually on my machine, so it took time to spot > > out the culprit. > > > > Looking at the code in kernel/power/, this might be the case of > > user-space suspend. hibernate.c seems returning PM_POST_HIBERNATION > > while user.c returns PM_POST_RESTORE after image restoration, and I > > guess it's a bug of user.c. > > > > The untested patch is below (sorry I have no corresponding machine > > at my home.) Rafael, Pavel, could you check this? > > > > > > thanks, > > > > Takashi > > > > === > > From 915fda609e02b02e4fc6b944e4432ea1d964adc5 Mon Sep 17 00:00:00 2001 > > From: Takashi Iwai <tiwai@suse.de> > > Date: Thu, 9 Dec 2010 08:09:21 +0100 > > Subject: [PATCH] PM: Fix PM_POST_* notification with user-space suspend > > > > The user-space hibernation sends a wrong notification after the image > > restoration because of thinko for the file flag check. RDONLY > > corresponds to hibernation and WRONLY to restoration, confusingly. > > The patch is correct. I'm taking it to my tree. Thanks! So it's an over-3-years-old old bug ;) Meanwhile, the fix below should be still added to mmc-core. It's still needed for the error case. Takashi === From: Takashi Iwai <tiwai@suse.de> Subject: [PATCH] mmc: Fix re-probing with PM_POST_RESTORE notification In the error-path where PM notifies PM_POST_RESTORE, the rescan-blockage should be cleared as well. Otherwise it'll be never re-probed. Also, as a bonus, this fixes a bug in S4 with user-mode suspend in the current code, as it sends PM_POST_RESTORE instead of PM_POST_HIBERNATION wrongly. Cc: <stable@kernel.org> Signed-off-by: Takashi Iwai <tiwai@suse.de> --- drivers/mmc/core/core.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index 31ae07a..57dcf8f 100644 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -1773,6 +1773,7 @@ int mmc_pm_notify(struct notifier_block *notify_block, case PM_POST_SUSPEND: case PM_POST_HIBERNATION: + case PM_POST_RESTORE: spin_lock_irqsave(&host->lock, flags); host->rescan_disable = 0; -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] mmc: Fix re-probing after hibernation 2010-12-10 7:40 ` Takashi Iwai @ 2010-12-11 21:55 ` Chris Ball 0 siblings, 0 replies; 6+ messages in thread From: Chris Ball @ 2010-12-11 21:55 UTC (permalink / raw) To: Takashi Iwai Cc: Rafael J. Wysocki, Maxim Levitsky, Oliver Neukum, Andrew Morton, Pavel Machek, linux-mmc, linux-kernel Hi Takashi, On Fri, Dec 10, 2010 at 08:40:31AM +0100, Takashi Iwai wrote: > Subject: [PATCH] mmc: Fix re-probing with PM_POST_RESTORE notification > > In the error-path where PM notifies PM_POST_RESTORE, the rescan-blockage > should be cleared as well. Otherwise it'll be never re-probed. > > Also, as a bonus, this fixes a bug in S4 with user-mode suspend in the > current code, as it sends PM_POST_RESTORE instead of > PM_POST_HIBERNATION wrongly. > > Cc: <stable@kernel.org> > Signed-off-by: Takashi Iwai <tiwai@suse.de> > --- > drivers/mmc/core/core.c | 1 + > 1 files changed, 1 insertions(+), 0 deletions(-) > > diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c > index 31ae07a..57dcf8f 100644 > --- a/drivers/mmc/core/core.c > +++ b/drivers/mmc/core/core.c > @@ -1773,6 +1773,7 @@ int mmc_pm_notify(struct notifier_block *notify_block, > > case PM_POST_SUSPEND: > case PM_POST_HIBERNATION: > + case PM_POST_RESTORE: > > spin_lock_irqsave(&host->lock, flags); > host->rescan_disable = 0; Thanks, have pushed this to mmc-next and queued it for .37/stable. -- Chris Ball <cjb@laptop.org> <http://printf.net/> One Laptop Per Child ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2010-12-11 21:56 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-08 15:23 [PATCH] mmc: Fix re-probing after hibernation Takashi Iwai
2010-12-08 22:04 ` Maxim Levitsky
2010-12-09 1:53 ` Chris Ball
[not found] ` <s5hlj3z1ksb.wl%tiwai@suse.de>
2010-12-09 20:37 ` Rafael J. Wysocki
2010-12-10 7:40 ` Takashi Iwai
2010-12-11 21:55 ` Chris Ball
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox