Files
android_kernel_xiaomi_sm8450/kernel
Steven Rostedt e4906eff9e ring-buffer: convert cpu buffer entries to local_t
The entries counter in cpu buffer is not atomic. It can be updated by
other interrupts or from another CPU (readers).

But making entries into "atomic_t" causes an atomic operation that can
hurt performance. Instead we convert it to a local_t that will increment
a counter with a local CPU atomic operation (if the arch supports it).

Instead of fighting with readers and overwrites that decrement the counter,
I added a "read" counter. Every time a reader reads an entry it is
incremented.

We already have a overrun counter and with that, the entries counter and
the read counter, we can calculate the total number of entries in the
buffer with:

  (entries - overrun) - read

As long as the total number of entries in the ring buffer is less than
the word size, this will work. But since the entries counter was previously
a long, this is no different than what we had before.

Thanks to Andrew Morton for pointing out in the first version that
atomic_t does not replace unsigned long. I switched to atomic_long_t
even though it is signed. A negative count is most likely a bug.

[ Impact: keep accurate count of cpu buffer entries ]

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2009-05-05 14:25:44 -04:00
..
2009-04-29 14:06:21 +02:00
2009-04-02 19:04:55 -07:00
2008-10-16 11:21:30 -07:00
2008-07-28 14:37:38 +02:00
2009-01-14 18:09:02 +01:00
2008-09-02 19:21:40 -07:00
2009-04-08 10:21:44 -07:00
2009-03-30 22:05:16 +10:30
2009-04-03 16:42:35 +01:00
2009-04-29 14:06:21 +02:00
2009-03-24 10:52:46 +11:00