summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorNaveen Kumar Gaddipati <naveen.gaddipati@stericsson.com>2011-09-02 14:47:22 +0530
committerPhilippe Langlais <philippe.langlais@stericsson.com>2011-12-06 10:58:57 +0100
commitbf9e7e03bda15710789aeb8830752aac362fb1b5 (patch)
treea71f281837e05e6492691f8dcfb552c8a46ac494 /drivers
parent72b015913157a799dfbc188ccd676dc1c31e1e2f (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.c55
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;