On Thu, Mar 19, 2015 at 01:39:58PM -0400, Steven Rostedt wrote:
> > +void printk_nmi_backtrace_complete(void)
> > +{
> > +   struct nmi_seq_buf *s;
> > +   int len, cpu, i, last_i;
> > +
> > +   /*
> > +    * Now that all the NMIs have triggered, we can dump out their
> > +    * back traces safely to the console.
> > +    */
> > +   for_each_possible_cpu(cpu) {
> > +           s = &per_cpu(nmi_print_seq, cpu);
> > +           last_i = 0;
> > +
> > +           len = seq_buf_used(&s->seq);
> > +           if (!len)
> > +                   continue;
> > +
> > +           /* Print line by line. */
> > +           for (i = 0; i < len; i++) {
> > +                   if (s->buffer[i] == '\n') {
> > +                           print_seq_line(s, last_i, i);
> > +                           last_i = i + 1;
> > +                   }
> > +           }
> > +           /* Check if there was a partial line. */
> > +           if (last_i < len) {
> > +                   print_seq_line(s, last_i, len - 1);
> > +                   pr_cont("\n");
> > +           }
> > +
> > +           /* Wipe out the buffer ready for the next time around. */
> > +           seq_buf_clear(&s->seq);
> > +   }
> > +
> > +   clear_bit(0, &nmi_print_flag);
> > +   smp_mb__after_atomic();
> 
> Is this really necessary. What is the mb synchronizing?
> 
> [ Added Peter Zijlstra to confirm it's not needed ]

It surely looks suspect; and it lacks a comment, which is a clear sign
its buggy.

Now it if tries to order the accesses to the seqbuf againt the clearing
of the bit one would have expected a _before_ barrier, not an _after_.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to