On Thu 2020-06-18 16:55:19, John Ogness wrote: > Replace the existing ringbuffer usage and implementation with > lockless ringbuffer usage. Even though the new ringbuffer does not > require locking, all existing locking is left in place. Therefore, > this change is purely replacing the underlining ringbuffer. > --- a/kernel/printk/printk.c > +++ b/kernel/printk/printk.c > @@ -594,22 +473,26 @@ static u32 msg_used_size(u16 text_len, u16 dict_len, u32 *pad_len) > #define MAX_LOG_TAKE_PART 4 > static const char trunc_msg[] = "<truncated>"; > > -static u32 truncate_msg(u16 *text_len, u16 *trunc_msg_len, > - u16 *dict_len, u32 *pad_len) > +static void truncate_msg(u16 *text_len, u16 *trunc_msg_len, u16 *dict_len) > { > /* > * The message should not take the whole buffer. Otherwise, it might > * get removed too soon. > */ > u32 max_text_len = log_buf_len / MAX_LOG_TAKE_PART; > + > if (*text_len > max_text_len) > *text_len = max_text_len; > - /* enable the warning message */ > + > + /* enable the warning message (if there is room) */ > *trunc_msg_len = strlen(trunc_msg); > + if (*text_len >= *trunc_msg_len) > + *text_len -= *trunc_msg_len; > + else > + *trunc_msg_len = 0; > + > /* disable the "dict" completely */ > *dict_len = 0; The dictionary does not longer need to be removed at this point. It is stored in a separate buffer. It is ignored by prb_reserve() when there is not enough space for it. > - /* compute the size again, count also the warning message */ > - return msg_used_size(*text_len + *trunc_msg_len, 0, pad_len); > } > > /* insert record into the buffer, discard old ones, update heads */ Best Regards, Petr PS: I am still in the middle of review of this patch. I decided to send the tree comments that I already have separately. _______________________________________________ kexec mailing list kexec@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/kexec