author | renjiang.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) |
commit | ffd9ae14692058e6ab1700fcb322cec75b47d2fc (patch) | |
tree | 1f085f804d676dd8723de42bab2f1ff20a628d76 | |
parent | 09d3e9c230e3d12269925ff26c034f6f7bbb09d1 (diff) | |
download | common-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>
-rw-r--r-- | drivers/amlogic/media/video_processor/ppmgr/ppmgr_vpp.c | 16 |
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; } |