lkml.org 
[lkml]   [2019]   [Feb]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [RFC PATCH v1 08/25] printk: add ring buffer and kthread
    On (02/12/19 15:29), John Ogness wrote:
    [..]
    > +static int printk_kthread_func(void *data)
    > +{
    > + struct prb_iterator iter;
    > + struct printk_log *msg;
    > + size_t ext_len;
    > + char *ext_text;
    > + u64 master_seq;
    > + size_t len;
    > + char *text;
    > + char *buf;
    > + int ret;
    > +
    > + ext_text = kmalloc(CONSOLE_EXT_LOG_MAX, GFP_KERNEL);
    > + text = kmalloc(PRINTK_SPRINT_MAX, GFP_KERNEL);
    > + buf = kmalloc(PRINTK_RECORD_MAX, GFP_KERNEL);
    > + if (!ext_text || !text || !buf)
    > + return -1;
    > +
    > + prb_iter_init(&iter, &printk_rb, NULL);
    > +
    > + /* the printk kthread never exits */
    > + for (;;) {
    > + ret = prb_iter_wait_next(&iter, buf,
    > + PRINTK_RECORD_MAX, &master_seq);
    > + if (ret == -ERESTARTSYS) {
    > + continue;
    > + } else if (ret < 0) {
    > + /* iterator invalid, start over */
    > + prb_iter_init(&iter, &printk_rb, NULL);
    > + continue;
    > + }
    > +
    > + msg = (struct printk_log *)buf;
    > + format_text(msg, master_seq, ext_text, &ext_len, text,
    > + &len, printk_time);
    > +
    > + console_lock();
    > + if (len > 0 || ext_len > 0) {
    > + call_console_drivers(ext_text, ext_len, text, len);
    > + boot_delay_msec(msg->level);
    > + printk_delay();
    > + }
    > + console_unlock();
    > + }

    One thing that I have learned is that preemptible printk does not work
    as expected; it wants to be 'atomic' and just stay busy as long as it can.
    We tried preemptible printk at Samsung and the result was just bad:
    preempted printk kthread + slow serial console = lots of lost messages

    We also had preemptile printk in the upstream kernel and reverted the
    patch (see fd5f7cde1b85d4c8e09); same reasons - we had reports that
    preemptible printk could "stall" for minutes.

    -ss

    \
     
     \ /
      Last update: 2019-02-12 16:48    [W:6.052 / U:1.956 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site