Trace: Use proper locking for trace buffers in SMP mode
authorSuman Anna <s-anna@ti.com>
Wed, 9 May 2012 00:55:44 +0000 (19:55 -0500)
committerSuman Anna <s-anna@ti.com>
Wed, 9 May 2012 01:37:22 +0000 (20:37 -0500)
commitdef195bd6f1b13a25ad4f21496d4d6e3236eb328
treeafe5fe051f354217383b484b5f472eb4af8bb2c8
parentb1efa11966484c628f4454fd351a06ea1aa1bad8
Trace: Use proper locking for trace buffers in SMP mode

SysMin has a line buffer for each core and a module-wide
shared buffer, common to both the cores and used to flush
out line buffers one at a time. The tracing functionality
depends on locking of these buffers properly. The line buffer
is protected by disabling local core interrupts, and the
shared buffer is protected by acquiring a system lock.

The current code is re-enabling the local core interrupts
before checking whether the line buffer needs flushing. This
opens up a small window for the line buffer to be overwritten
by a different task or interrupt while the current thread is
waiting for the system lock to flush the core line buffer.
This is fixed by enabling the local core interrupts properly
after checking on the flush condition. Releasing the system
gate re-enables the core interrupts automatically, so there
is no need for enabling local interrupts specifically when
flushing the line buffer.

Signed-off-by: Suman Anna <s-anna@ti.com>
src/ti/trace/SysMin.c