xscale: trace buffer remains enabled until explicitly disabled

Hi everyone,

Since a call went out for patches... been sitting on this for months.  For some
reason, the xscale trace buffer is automatically disabled as soon as a break
occurs and the trace data is collected.  This patch was a result of the
frustration of always re-enabling it, or else hitting a breakpoint and checking
the trace data, only to discover that I forgot to re-enable it before resuming.
Don't see why it should work this way.  There is no run-time penalty, AFAIK.

Along the way, I also cleaned up a little by removing the ugly practice of
recording wrap mode by setting the fill count variable to "-1", replacing it
with an enum that records the trace mode.

I've been using this for months.  Comments, criticisms gratefully received.

Mike

Signed-off-by: Mike Dunn <mikedunn@newsguy.com>
This commit is contained in:
Mike Dunn
2010-12-02 11:08:28 -08:00
committed by Øyvind Harboe
parent 81790fb56a
commit 2e7d51c96a
2 changed files with 97 additions and 54 deletions

View File

@@ -71,13 +71,20 @@ struct xscale_trace_data
struct xscale_trace_data *next;
};
enum trace_mode
{
XSCALE_TRACE_DISABLED,
XSCALE_TRACE_FILL,
XSCALE_TRACE_WRAP
};
struct xscale_trace
{
trace_status_t capture_status; /* current state of capture run */
struct image *image; /* source for target opcodes */
struct xscale_trace_data *data; /* linked list of collected trace data */
int buffer_enabled; /* whether trace buffer is enabled */
int buffer_fill; /* maximum number of trace runs to read (-1 for wrap-around) */
int buffer_fill; /* maximum number of trace runs to read */
int fill_counter; /* running count during trace collection */
enum trace_mode mode;
enum arm_state core_state; /* current core state (ARM, Thumb) */
};