On Thu, Oct 16, 2014 at 2:08 PM, Wilmer van der Gaast <wil...@gaast.net> wrote: > Did that on this run, no difference either. For full completeness, I > reproduced this problem with no modules loaded (done from initramfs) at all, > with a kernel with your workaround included, logs are here: > http://gaast.net/~wilmer/.lkml/bad3.17-patched-debug-initramfs.txt
Yes, those output are good. Please apply attached debug patch on top of v3.17 and boot with "debug ignore_loglevel initcall_debug no_console_suspend". Hope we can find out which nb notifier cause problem. Thanks Yinghai
--- kernel/notifier.c | 9 +++++++++ kernel/power/main.c | 4 +++- 2 files changed, 12 insertions(+), 1 deletion(-) Index: linux-2.6/kernel/power/main.c =================================================================== --- linux-2.6.orig/kernel/power/main.c +++ linux-2.6/kernel/power/main.c @@ -24,16 +24,18 @@ DEFINE_MUTEX(pm_mutex); /* Routines for PM-transition notifications */ -static BLOCKING_NOTIFIER_HEAD(pm_chain_head); +BLOCKING_NOTIFIER_HEAD(pm_chain_head); int register_pm_notifier(struct notifier_block *nb) { + pr_info("PM: registering nb %pF\n", nb->notifier_call); return blocking_notifier_chain_register(&pm_chain_head, nb); } EXPORT_SYMBOL_GPL(register_pm_notifier); int unregister_pm_notifier(struct notifier_block *nb) { + pr_info("PM: unregistering nb %pF\n", nb->notifier_call); return blocking_notifier_chain_unregister(&pm_chain_head, nb); } EXPORT_SYMBOL_GPL(unregister_pm_notifier); Index: linux-2.6/kernel/notifier.c =================================================================== --- linux-2.6.orig/kernel/notifier.c +++ linux-2.6/kernel/notifier.c @@ -59,6 +59,9 @@ static int notifier_chain_unregister(str return -ENOENT; } +extern struct blocking_notifier_head pm_chain_head; +#define PM_POST_SUSPEND 0x0004 /* Suspend finished */ + /** * notifier_call_chain - Informs the registered notifiers about an event. * @nl: Pointer to head of the blocking notifier chain @@ -90,8 +93,14 @@ static int notifier_call_chain(struct no continue; } #endif + if (nl == &pm_chain_head.head && val == PM_POST_SUSPEND) + pr_info("PM: calling nb %pF\n", nb->notifier_call); + ret = nb->notifier_call(nb, val, v); + if (nl == &pm_chain_head.head && val == PM_POST_SUSPEND) + pr_info("PM: ... nb %pF done\n", nb->notifier_call); + if (nr_calls) (*nr_calls)++;