Skip to content

Commit

Permalink
printk: Remove superfluous memory barriers from printk_safe
Browse files Browse the repository at this point in the history
The variable printk_safe_irq_ready is set and never cleared at system
boot up, when there's only one CPU active. It is set before other
CPUs come on line. Also, it is extremely unlikely that an NMI would
trigger this early in boot up (which I wonder why we even have this
variable at all).

Also mark the printk_safe_irq_ready as read mostly, as it is set at
system boot up, and never touched again.

Link: http://lkml.kernel.org/r/[email protected]

Reviewed-by: Petr Mladek <[email protected]>
Signed-off-by: Steven Rostedt (VMware) <[email protected]>
  • Loading branch information
rostedt committed Oct 13, 2017
1 parent 8715b10 commit af41acf
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions kernel/printk/printk_safe.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
* There are situations when we want to make sure that all buffers
* were handled or when IRQs are blocked.
*/
static int printk_safe_irq_ready;
static int printk_safe_irq_ready __read_mostly;

#define SAFE_LOG_BUF_LEN ((1 << CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT) - \
sizeof(atomic_t) - \
Expand All @@ -63,11 +63,8 @@ static DEFINE_PER_CPU(struct printk_safe_seq_buf, nmi_print_seq);
/* Get flushed in a more safe context. */
static void queue_flush_work(struct printk_safe_seq_buf *s)
{
if (printk_safe_irq_ready) {
/* Make sure that IRQ work is really initialized. */
smp_rmb();
if (printk_safe_irq_ready)
irq_work_queue(&s->work);
}
}

/*
Expand Down Expand Up @@ -398,8 +395,12 @@ void __init printk_safe_init(void)
#endif
}

/* Make sure that IRQ works are initialized before enabling. */
smp_wmb();
/*
* In the highly unlikely event that a NMI were to trigger at
* this moment. Make sure IRQ work is set up before this
* variable is set.
*/
barrier();
printk_safe_irq_ready = 1;

/* Flush pending messages that did not have scheduled IRQ works. */
Expand Down

0 comments on commit af41acf

Please sign in to comment.