summaryrefslogtreecommitdiff
authorrenjiang.han <renjiang.han@amlogic.com>2019-04-01 09:09:58 (GMT)
committer Shen Liu <shen.liu@amlogic.com>2020-04-26 12:01:56 (GMT)
commitffd9ae14692058e6ab1700fcb322cec75b47d2fc (patch)
tree1f085f804d676dd8723de42bab2f1ff20a628d76
parent09d3e9c230e3d12269925ff26c034f6f7bbb09d1 (diff)
downloadcommon-ffd9ae14692058e6ab1700fcb322cec75b47d2fc.zip
common-ffd9ae14692058e6ab1700fcb322cec75b47d2fc.tar.gz
common-ffd9ae14692058e6ab1700fcb322cec75b47d2fc.tar.bz2
ppmgr: The cut table caused a crash. [1/1]
PD#SWPL-6557 Problem: The cut table caused a crash. Solution: modify dma flag Verify: on X301 Change-Id: Ic0ced1f4934d1125c56a79d1e102de9d2e02a528 Signed-off-by: renjiang.han <renjiang.han@amlogic.com>
Diffstat
-rw-r--r--drivers/amlogic/media/video_processor/ppmgr/ppmgr_vpp.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/amlogic/media/video_processor/ppmgr/ppmgr_vpp.c b/drivers/amlogic/media/video_processor/ppmgr/ppmgr_vpp.c
index 9a77833..982c8ab 100644
--- a/drivers/amlogic/media/video_processor/ppmgr/ppmgr_vpp.c
+++ b/drivers/amlogic/media/video_processor/ppmgr/ppmgr_vpp.c
@@ -178,9 +178,11 @@ static u32 tb_buffer_len = TB_DETECT_BUFFER_MAX_SIZE;
static atomic_t tb_reset_flag;
static u32 tb_init_mute;
static atomic_t tb_skip_flag;
+static atomic_t tb_run_flag;
static bool tb_quit_flag;
static struct TB_DetectFuncPtr *gfunc;
static int tb_buffer_init(void);
+static int tb_buffer_uninit(void);
#endif
const struct vframe_receiver_op_s *vf_ppmgr_reg_provider(void);
@@ -3075,7 +3077,9 @@ static int ppmgr_task(void *data)
/* wait tb task done */
while ((tb_buff_wptr >= 5)
&& (tb_buff_rptr
- <= tb_buff_wptr - 5))
+ <= tb_buff_wptr - 5)
+ && (atomic_read(&tb_run_flag)
+ == 1))
usleep_range(
4000, 5000);
atomic_set(&detect_status,
@@ -3165,7 +3169,9 @@ static int ppmgr_task(void *data)
"tb detect skip case1\n");
goto SKIP_DETECT;
}
- if (tb_buff_wptr < tb_buffer_len) {
+ if ((tb_buff_wptr < tb_buffer_len)
+ && (atomic_read(&tb_run_flag)
+ == 1)) {
ret = process_vf_tb_detect(
vf, context, &ge2d_config);
} else {
@@ -3262,6 +3268,9 @@ SKIP_DETECT:
}
destroy_ge2d_work_queue(context);
+#ifdef PPMGR_TB_DETECT
+ tb_buffer_uninit();
+#endif
ppmgr_buffer_uninit();
while (!kthread_should_stop()) {
/* may not call stop, wait..
@@ -3741,6 +3750,7 @@ static void tb_detect_init(void)
atomic_set(&tb_detect_flag, TB_DETECT_NC);
atomic_set(&tb_reset_flag, 0);
atomic_set(&tb_skip_flag, 0);
+ atomic_set(&tb_run_flag, 1);
tb_detect_last_flag = TB_DETECT_NC;
tb_buff_wptr = 0;
tb_buff_rptr = 0;
@@ -3839,9 +3849,9 @@ static int tb_task(void *data)
atomic_set(&detect_status, tb_done);
}
}
+ atomic_set(&tb_run_flag, 0);
while (!kthread_should_stop())
usleep_range(9000, 10000);
- tb_buffer_uninit();
return 0;
}