From: Yan Wang yan.wang@linux.intel.com
The timeout of work_reschedule_default() cannot be too short to finish work queue rescheduling. Otherwise, the work will be rescheduled wrong into the next timer loop.
Signed-off-by: Yan Wang yan.wang@linux.intel.com --- src/lib/dma-trace.c | 2 +- src/platform/baytrail/include/platform/platform.h | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/lib/dma-trace.c b/src/lib/dma-trace.c index 2a5b1a6..e61ac30 100644 --- a/src/lib/dma-trace.c +++ b/src/lib/dma-trace.c @@ -247,7 +247,7 @@ void dtrace_event(const char *e, uint32_t length)
/* schedule copy now if buffer > 50% full */ if (trace_data->enabled && buffer->avail >= (DMA_TRACE_LOCAL_SIZE / 2)) - work_reschedule_default(&trace_data->dmat_work, 100); + work_reschedule_default(&trace_data->dmat_work, DMA_TRACE_NOW_US); }
void dtrace_event_atomic(const char *e, uint32_t length) diff --git a/src/platform/baytrail/include/platform/platform.h b/src/platform/baytrail/include/platform/platform.h index 4d63f7b..4559288 100644 --- a/src/platform/baytrail/include/platform/platform.h +++ b/src/platform/baytrail/include/platform/platform.h @@ -82,6 +82,12 @@ struct reef; /* the interval of DMA trace copying */ #define DMA_TRACE_US 500000
+/* + * the interval of start DMA trace copying in special case like half fullness + * of local DMA trace buffer + */ +#define DMA_TRACE_NOW_US 5000 + /* DMAC used for trace DMA */ #define PLATFORM_TRACE_DMAC DMA_ID_DMAC0