On Sun 2021-04-11 21:52:59, John Ogness wrote: > On 2021-04-11, Alexander Monakov <amona...@ispras.ru> wrote: > >>> The second line is emitted via 'pr_cont', which causes it to have a > >>> different ('warn') loglevel compared to the previous line ('info'). > >>> > >>> Commit 9a295ff0ffc9 attempted to rectify this by removing the newline > >>> from the pci_info format string, but this doesn't work, as pci_info > >>> calls implicitly append a newline anyway. > >> > >> Hmm, did I really screw that up during my testing? I am sorry about that. > >> > >> I tried to wrap my head around, where the newline is implicitly appended, > >> and > >> only found the definitions below. > >> > > Yeah, it's not obvious: it happens in kernel/printk/printk.c:vprintk_store > > where it does > > > > if (dev_info) > > lflags |= LOG_NEWLINE; > > > > It doesn't seem to be documented; I think it prevents using pr_cont with > > "rich" printk facilities that go via _dev_info. > > > > I suspect it quietly changed in commit c313af145b9bc ("printk() - isolate > > KERN_CONT users from ordinary complete lines"). > > Yes, this behavior has been around for a while. I see no reason why it > should be that way. These days printk does not care if there is dev_info > included or not.
It seems that it has been this way since the dev_info was introduced. It was called "dict" at that time. See if (buflen && (!cont || dict)) { /* no continuation; flush existing buffer */ log_store(facility, buflevel, NULL, 0, buf, buflen); in the commit 7ff9554bb578ba02166071d2d ("printk: convert byte-buffer to variable-length record buffer"). I am not sure why. Well, dev_printk() previously printed the extra information for every piece. See, the commit c4e00daaa96d3a0786f ("driver-core: extend dev_printk() to pass structured data"). > > Yeah, I saw that, but decided to go with the 'pr_info("")' solution, because > > it is less magic, and already used in two other drivers. > > Note that what I was suggesting was to fix a different issue: If the > pr_cont() caller is interrupted by another printk user, then the > following pr_cont() calls will use the default loglevel. By explicitly > specifying the loglevel in pr_cont(), you can be sure that those pieces > get the desired loglevel, even if those pieces get separated off because > of an interrupting printk user. > > So even if we fix dev_info to allow pr_cont continuation, it still may > be desirable to specify the loglevel in the pr_cont pieces. > > > pr_info("") will also prepend 'AMD-Vi:' to the feature list, which is > > nice. > > I'd rather fix dev_info callers to allow pr_cont and then fix any code > that is using this workaround. > > And if the print maintainers agree it is OK to encourage > pr_cont(LOGLEVEL "...") usage, then people should really start using > that if the loglevel on those pieces is important. To be sure. We would need to repeat also the dev_info() information in the continuous piece. By other words. The clean solution would be: + remove the automatic newline in kernel/printk/printk.c:vprintk_store + create wrappers, for example, dev_cont_info() Best Regards, Petr _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu