On 08/05/2015 08:11 AM, check.ker...@gmail.com wrote: > From: yangdongdong <yangdongd...@xiaomi.com> > > This also enables panic and oops messages which > in suspend context to be logged into ramoops console > buffer where it can be read back at some later point. > > Signed-off-by: yangdongdong <yangdongd...@xiaomi.com> > Signed-off-by: gulinghua <guling...@xiaomi.com>
I have a small comment on the code below. -Alex > --- > fs/pstore/ram.c | 21 +++++++++++++++++++++ > include/linux/pstore_ram.h | 1 + > kernel/printk/printk.c | 6 ++++++ > 3 files changed, 28 insertions(+) > > diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c > index 6c26c4d..f84c5ab 100644 > --- a/fs/pstore/ram.c > +++ b/fs/pstore/ram.c > @@ -642,8 +642,28 @@ static void ramoops_register_dummy(void) > } > } > > +static int ramoops_console_notify(struct notifier_block *this, > + unsigned long event, void *ptr) > +{ > + pr_emerg("ramoops unlock console ...\n"); > + emergency_unlock_console(); > + > + return 0; > +} > + > +static struct notifier_block ramoop_nb = { > + .notifier_call = ramoops_console_notify, > + .priority = INT_MAX, > +}; > + > +static void ramoops_prepare(void) > +{ > + atomic_notifier_chain_register(&panic_notifier_list, &ramoop_nb); > +} > + > static int __init ramoops_init(void) > { > + ramoops_prepare(); > ramoops_register_dummy(); > return platform_driver_register(&ramoops_driver); > } > @@ -654,6 +674,7 @@ static void __exit ramoops_exit(void) > platform_driver_unregister(&ramoops_driver); > platform_device_unregister(dummy); > kfree(dummy_data); > + atomic_notifier_chain_unregister(&panic_notifier_list, &ramoop_nb); I would say either wrap this atomic_notificer_chain_unregister() call in a trivial function ramoops_unprepare(), or (preferably) get rid of ramoops_prepare(). > } > module_exit(ramoops_exit); > > diff --git a/include/linux/pstore_ram.h b/include/linux/pstore_ram.h > index 9c9d6c1..826a35b 100644 > --- a/include/linux/pstore_ram.h > +++ b/include/linux/pstore_ram.h > @@ -52,6 +52,7 @@ struct persistent_ram_zone { > size_t old_log_size; > }; > > +extern void emergency_unlock_console(void); > struct persistent_ram_zone *persistent_ram_new(phys_addr_t start, size_t > size, > u32 sig, struct persistent_ram_ecc_info *ecc_info, > unsigned int memtype); > diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c > index cf8c242..ece645c 100644 > --- a/kernel/printk/printk.c > +++ b/kernel/printk/printk.c > @@ -2107,6 +2107,12 @@ void resume_console(void) > console_unlock(); > } > > +void emergency_unlock_console(void) > +{ > + resume_console(); > +} > +EXPORT_SYMBOL(emergency_unlock_console); > + > /** > * console_cpu_notify - print deferred console messages after CPU hotplug > * @self: notifier struct > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/