Messages in this thread | | | Subject | Re: [PATCH] RFC: Introduce FW_INFO* functions | From | Joe Perches <> | Date | Fri, 27 Sep 2013 08:40:51 -0700 |
| |
On Fri, 2013-09-27 at 09:22 -0400, Prarit Bhargava wrote: > I'm proposing with this patch to do something similar to the WARN() > mechanism that is currently implemented in the kernel. This > patchset introduces FW_INFO() and FW_INFO_DEV() which logs output
My first thought was "how ugly". There must be a better way than scraping dmesg output.
> diff --git a/kernel/panic.c b/kernel/panic.c [] > @@ -445,6 +446,29 @@ void warn_slowpath_fmt_taint(const char *file, int line, > } > EXPORT_SYMBOL(warn_slowpath_fmt_taint); > > +void warn_slowpath_fmt_dev(const char *file, int line, > + struct device *dev, const char *fmt, ...) > +{ > + struct slowpath_args args; > + > + pr_info("[Firmware Info]: "); > + if (dev) > + pr_cont("%s %s: ", > + dev_driver_string(dev), dev_name(dev)); > + pr_cont("at %s:%d ", file, line); > + > + args.fmt = fmt; > + va_start(args.args, fmt); > + vprintk(args.fmt, args.args); > + va_end(args.args); > + if (dump_hardware_arch_desc()) > + pr_info("[Firmware Info]: %s\n", dump_hardware_arch_desc()); > + else > + pr_info("[Firmware Info]: Hardware Unidentified\n"); > +} > +EXPORT_SYMBOL(warn_slowpath_fmt_dev);
This bit should just use %pV and a single printk to avoid any possible message interleaving.
{ struct va_format vaf; va_list args;
va_start(args, fmt)
vaf.fmt = fmt; vaf.va = &args;
if (dev) pr_info("[Firmware Info]: %s %s at %s:%d %pV", dev_driver_string(dev), dev_name(dev), file, line, &vaf); else pr_info("[Firmware Info]: at %s:%d %pV", file, line, &vaf);
etc...
| |