diff options
author | Naveen Kumar Gaddipati <naveen.gaddipati@stericsson.com> | 2011-09-02 14:47:22 +0530 |
---|---|---|
committer | Philippe Langlais <philippe.langlais@stericsson.com> | 2011-12-06 10:58:57 +0100 |
commit | bf9e7e03bda15710789aeb8830752aac362fb1b5 (patch) | |
tree | a71f281837e05e6492691f8dcfb552c8a46ac494 /drivers | |
parent | 72b015913157a799dfbc188ccd676dc1c31e1e2f (diff) |
b2r2: Kernel 3.0 migration changes
Migrate the b2r2 folllowing driver patches to kernel 3.0
707a836 b2r2: Prevent access to freed memory
ST-Ericsson ID: 352334
ST-Ericsson Linux next: NA
ST-Ericsson FOSS-OUT ID: NA
Signed-off-by: Naveen Kumar Gaddipati <naveen.gaddipati@stericsson.com>
Change-Id: I9d8ff2d03073290ad220b322e36c4d519a5f1398
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/30014
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; |