diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/video/b2r2/b2r2_blt_main.c | 55 |
1 files changed, 30 insertions, 25 deletions
diff --git a/drivers/video/b2r2/b2r2_blt_main.c b/drivers/video/b2r2/b2r2_blt_main.c index 097d2854a83..5d1d58c53cc 100644 --- a/drivers/video/b2r2/b2r2_blt_main.c +++ b/drivers/video/b2r2/b2r2_blt_main.c @@ -1374,6 +1374,14 @@ static void job_callback_gen(struct b2r2_core_job *job) /* Local addref / release within this func */ b2r2_core_job_addref(job, __func__); + /* Unresolve the buffers */ + unresolve_buf(&request->user_req.src_img.buf, + &request->src_resolved); + unresolve_buf(&request->user_req.src_mask.buf, + &request->src_mask_resolved); + unresolve_buf(&request->user_req.dst_img.buf, + &request->dst_resolved); + /* Move to report list if the job shall be reported */ /* FIXME: Use a smaller struct? */ mutex_lock(&request->instance->lock); @@ -2096,22 +2104,28 @@ static int b2r2_generic_blt(struct b2r2_blt_instance *instance, dst_img_width) { b2r2_core_job_release(tile_job, __func__); } else { + /* + * Update profiling information before + * the request is released together with + * its core_job. + */ + if (request->profile) { + request->nsec_active_in_cpu = + (s32)((u32)task_sched_runtime(current) - + thread_runtime_at_start); + request->total_time_nsec = + (s32)(b2r2_get_curr_nsec() - + request->start_time_nsec); + request->job.nsec_active_in_hw = + nsec_active_in_b2r2; + + b2r2_call_profiler_blt_done(request); + } + b2r2_core_job_release(&request->job, __func__); } } - - ret = 0; - - - /* Unresolve the buffers */ - unresolve_buf(&request->user_req.src_img.buf, - &request->src_resolved); - unresolve_buf(&request->user_req.src_mask.buf, - &request->src_mask_resolved); - unresolve_buf(&request->user_req.dst_img.buf, - &request->dst_resolved); - dec_stat(&stat_n_in_blt); for (i = 0; i < tmp_buf_count; i++) { @@ -2122,17 +2136,6 @@ static int b2r2_generic_blt(struct b2r2_blt_instance *instance, memset(&(work_bufs[i]), 0, sizeof(work_bufs[i])); } - if (request->profile) { - request->nsec_active_in_cpu = - (s32)((u32)task_sched_runtime(current) - - thread_runtime_at_start); - request->total_time_nsec = - (s32)(b2r2_get_curr_nsec() - request->start_time_nsec); - request->job.nsec_active_in_hw = nsec_active_in_b2r2; - - b2r2_call_profiler_blt_done(request); - } - return request_id; job_add_failed: @@ -2470,7 +2473,8 @@ static int resolve_buf(struct b2r2_blt_img *img, if (info && info->dev && MINOR(info->dev->devt) == - MINOR(file->f_dentry->d_inode->i_rdev)) { + MINOR(file->f_dentry-> + d_inode->i_rdev)) { resolved->file_physical_start = info->fix.smem_start; resolved->file_virtual_start = @@ -2482,7 +2486,8 @@ static int resolve_buf(struct b2r2_blt_img *img, resolved->file_physical_start + img->buf.offset; resolved->virtual_address = - (void *)(resolved->file_virtual_start + + (void *) (resolved-> + file_virtual_start + img->buf.offset); ret = 0; |