Re: [PATCH] printk/nmi: avoid direct printk()-s from __printk_nmi_flush()

From: Sergey Senozhatsky
Date: Thu Sep 01 2016 - 03:55:09 EST


On (08/30/16 13:19), Petr Mladek wrote:
>
> I see. But then we will need to be more careful because printk_func
> and printk_func_saved will be manipulated in different contexts:
> normal, irq, nmi. A solution might be using an atomic counter
> and selecting the right vprintk_func according to the value.

alt_printk_enter() must be done with local IRQs disabled. so IRQ cannot
race with `normal' alt_printk. other IRQs cannot race with the current IRQ,
because we have local IRQs disabled. the only thing that can race here is - NMI.
both `normal' and IRQ alt_printk can use the same per-CPU buffer, they never
race. NMI needs to have its own.

-ss