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