On Thu, 2017-04-27 at 17:11 +0200, Petr Mladek wrote: > On Wed 2017-03-01 21:58:54, Joe Perches wrote: > > On Thu, 2017-03-02 at 14:35 +0900, Sergey Senozhatsky wrote: > > > On (02/28/17 19:17), Joe Perches wrote: > > > > Can save the space that the KERN_<LEVEL> headers require. > > > > > > > > The biggest negative here is the %pV use which needs > > > > recursion and adds stack depth. [] > > Maybe more like 12k, still the goal is to > > create singletons for the pr_fmt prefixes > > and whatever __func__ uses that are most > > common via a SOH + flag and using > > __builtin_return_address where possible and > > appropriate. That could shrink another 10k > > or so. [] > > #define define_pr_func(func, level) asmlinkage __visible int func(const > > char *fmt, ...) > > > { > > > va_start(args, fmt); > > > r = vprintk_emit(level[0], level[1], NULL, 0, fmt, args); > > > va_end(); > > > } > > > > > > but this won't do the trick. because func()->vprintk_emit() shortcut > > > disables the printk-safe mechanism: > > > func()->printk()->vprintk_func()->this_cpu(printk_context)::print() > > > > That was what I had done originally a while ago > > https://lkml.org/lkml/2016/6/23/652 > > BTW: The above mentioned commit adds one argument to > vprintk_default(). But the symbol is exported. I am > not sure if we could break the API.
I believe EXPORT_SYMBOL functions have been modified in the past, but don't have an example at hand. > We might need to create alternative vprintk_* functions > (called vlprintk_* or so) that would have the extra parameter. > And call them from the existing vprintk_* ones. Sigh. That might work. > Also note that we might need to pass more information > via the extra parameter, for example, KERN_ERR + KERN_CONT. > > > Now the with "safe" version, it's a bit more complicated. > > :-( Yeah, that too.