Re: printk feature for syzbot?
From: Tetsuo Handa
Date: Thu May 10 2018 - 10:50:54 EST
Sergey Senozhatsky wrote:
> On (04/26/18 12:06), Petr Mladek wrote:
> >
> > > Petr, Steven, Fengguang, what do you think? Do you have any objections?
> > > Ideas?
> >
> > I wonder if we could create some mechanism that would help to extend
> > struct printk_log easier in the future.
>
> Hm, interesting idea.
>
> > I know only about crash tool implementation. It uses information provided
> > by log_buf_vmcoreinfo_setup(). The size of the structure is already
> > public. Therefore crash should be able to find all existing information
> > even if we increase the size of the structure.
> >
> > log_buf_vmcoreinfo_setup() even allows to inform about newly added
> > structure items. We could probably extend it to inform also about
> > the offset of the new optional elements.
>
> I vaguely remember that the last time Thomas Gleixner modified
> printk_log you managed to find a case that broke crash tool.
> ... Or may be I'm mistaken.
>
> > I am not sure about other tools. But I think that it should be
> > doable.
>
> Good. So there are no objections, so far.
>
> Tetsuo, Dmitry, care to send a patch?
>
> -ss
>
What I meant is nothing but something like below (i.e. inject context ID before
string to print)
-sprintf(printk_buf + offset, "[ %s] %s", stamp, string_to_print);
+cpu = smp_processor_id()
+if (in_nmi())
+ sprintf(printk_buf + offset, "[ %s](N%u) %s", stamp, cpu, string_to_print);
+else if (in_irq())
+ sprintf(printk_buf + offset, "[ %s](I%u) %s", stamp, cpu, string_to_print);
+else if (in_serving_softirq())
+ sprintf(printk_buf + offset, "[ %s](S%u) %s", stamp, cpu, string_to_print);
+else
+ sprintf(printk_buf + offset, "[ %s](%u) %s", stamp, current->pid, string_to_print);
without touching any struct.