Messages in this thread |  | | Date | Tue, 18 Oct 2016 13:19:51 -0400 | From | Steven Rostedt <> | Subject | Re: [PATCH 3/3] early_printk: Add simple serialization to early_vprintk() |
| |
On Tue, 18 Oct 2016 19:08:33 +0200 Peter Zijlstra <peterz@infradead.org> wrote:
> In order to avoid multiple CPUs banging on the serial port at the same > time, add simple serialization. This explicitly deals with nested > contexts (like IRQs etc.). > > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> > ---
hehe, I have the exact same patch for my -rt work.
-- Steve
> kernel/printk/printk.c | 16 +++++++++++++++- > 1 file changed, 15 insertions(+), 1 deletion(-) > > --- a/kernel/printk/printk.c > +++ b/kernel/printk/printk.c > @@ -356,14 +356,28 @@ static int __init force_early_printk_set > } > early_param("force_early_printk", force_early_printk_setup); > > +static int early_printk_cpu = -1; > + > static int early_vprintk(const char *fmt, va_list args) > { > + int n, cpu, old; > char buf[512]; > - int n; > + > + cpu = get_cpu(); > + for (;;) { > + old = cmpxchg(&early_printk_cpu, -1, cpu); > + if (old == -1 || old == cpu) > + break; > + > + cpu_relax(); > + } > > n = vscnprintf(buf, sizeof(buf), fmt, args); > early_console->write(early_console, buf, n); > > + smp_store_release(&early_printk_cpu, old); > + put_cpu(); > + > return n; > } > >
|  |