From cae5a0bc3607cf453dc3cffff7f405b2111f4299 Mon Sep 17 00:00:00 2001 From: Thomas Fleury Date: Tue, 24 Jan 2017 08:39:54 -0800 Subject: gpu: nvgpu: empty FECS buffer on trace enable Currently, when reading from ctxsw device node, we are collecting traces that occurred before enabling tracing. This is not wanted, and makes testing unpredicatable. This change drops existing data in FECS ring buffer when enabling traces, as currently done on vm-server side. Jira EVLR-991 Change-Id: Idd2544d4667396f90778b7be82bdf73d1f8b8dc8 Signed-off-by: Thomas Fleury Reviewed-on: http://git-master/r/1293303 Reviewed-by: Vishnu Reddy Mandalapu Reviewed-by: svccoveritychecker GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'drivers') diff --git a/drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.c b/drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.c index 6b77dff5..1f86fd8f 100644 --- a/drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.c @@ -720,15 +720,27 @@ static int gk20a_fecs_trace_enable(struct gk20a *g) { struct gk20a_fecs_trace *trace = g->fecs_trace; struct task_struct *task; + int write; - if (!trace->poll_task) { - task = kthread_run(gk20a_fecs_trace_periodic_polling, g, __func__); - if (unlikely(IS_ERR(task))) { - gk20a_warn(dev_from_gk20a(g), "failed to create FECS polling task"); - return PTR_ERR(task); - } - trace->poll_task = task; + if (!trace) + return -EINVAL; + + if (trace->poll_task) + return 0; + + /* drop data in hw buffer */ + if (g->ops.fecs_trace.flush) + g->ops.fecs_trace.flush(g); + write = gk20a_fecs_trace_get_write_index(g); + gk20a_fecs_trace_set_read_index(g, write); + + task = kthread_run(gk20a_fecs_trace_periodic_polling, g, __func__); + if (unlikely(IS_ERR(task))) { + gk20a_warn(dev_from_gk20a(g), + "failed to create FECS polling task"); + return PTR_ERR(task); } + trace->poll_task = task; return 0; } -- cgit v1.2.2