[Sound-open-firmware] [PATCH] Increase timeout of DMA trace work re-scheduling if local buffer is half full.
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
On Tue, 2017-12-12 at 14:28 +0800, yan.wang@linux.intel.com wrote:
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
Since we now have two DMA trace macros, best to rename them both
This one should be (specify timescale us in the comment)
DMA_TRACE_PERIOD
+/*
- the interval of start DMA trace copying in special case like half fullness
- of local DMA trace buffer
- */
+#define DMA_TRACE_NOW_US 5000
DMA_TRACE_RESCHEDULE_TIME
/* DMAC used for trace DMA */ #define PLATFORM_TRACE_DMAC DMA_ID_DMAC0
participants (2)
-
Liam Girdwood
-
yan.wang@linux.intel.com