author | Hui Zhang <hui.zhang@amlogic.com> | 2020-09-18 01:51:59 (GMT) |
---|---|---|
committer | Pengfei Zhao <pengfei.zhao@amlogic.com> | 2020-09-18 06:28:57 (GMT) |
commit | 3a4762e5f183e76d961eed2d3440a253aa696bb4 (patch) | |
tree | e15ba551559d0d338cdf7156da7789e5b9d39c47 | |
parent | e67ceb4a83c200379a518c5c726a4bec1224c251 (diff) | |
download | media_modules-3a4762e5f183e76d961eed2d3440a253aa696bb4.zip media_modules-3a4762e5f183e76d961eed2d3440a253aa696bb4.tar.gz media_modules-3a4762e5f183e76d961eed2d3440a253aa696bb4.tar.bz2 |
media_module: fix a crash in cts r [1/1]
PD#SWPL-33266
Problem:
when a invalid vf being detected in vf_put, there are a lot
of printk cause system crash
Solution:
1) add valid checkn for dummy vf in vf_put
2) add debug level for invalid vf printk
Verify:
AC214
Change-Id: I910136a290b95c4c1ca24ad52fb2e5be6e8b6d0b
Signed-off-by: Hui Zhang <hui.zhang@amlogic.com>
-rw-r--r-- | drivers/frame_provider/decoder/h264_multi/vmh264.c | 2 | ||||
-rw-r--r-- | drivers/frame_provider/decoder/h265/vh265.c | 6 |
2 files changed, 4 insertions, 4 deletions
diff --git a/drivers/frame_provider/decoder/h264_multi/vmh264.c b/drivers/frame_provider/decoder/h264_multi/vmh264.c index 186b577..7b502a3 100644 --- a/drivers/frame_provider/decoder/h264_multi/vmh264.c +++ b/drivers/frame_provider/decoder/h264_multi/vmh264.c @@ -4098,7 +4098,7 @@ static bool vf_valid_check(struct vframe_s *vf, struct vdec_h264_hw_s *hw) { return true; for (i = 0; i < VF_POOL_SIZE; i++) { for (j = 0; j < VF_POOL_NUM; j ++) { - if (vf == &(hw->vfpool[j][i])) + if (vf == &(hw->vfpool[j][i]) || vf == &hw->vframe_dummy) return true; } } diff --git a/drivers/frame_provider/decoder/h265/vh265.c b/drivers/frame_provider/decoder/h265/vh265.c index 2389d8f..091935d 100644 --- a/drivers/frame_provider/decoder/h265/vh265.c +++ b/drivers/frame_provider/decoder/h265/vh265.c @@ -8389,12 +8389,12 @@ static struct vframe_s *vh265_vf_get(void *op_arg) static bool vf_valid_check(struct vframe_s *vf, struct hevc_state_s *hevc) { int i; for (i = 0; i < VF_POOL_SIZE; i++) { - if (vf == &hevc->vfpool[i]) + if (vf == &hevc->vfpool[i] || vf == &hevc->vframe_dummy) return true; } - pr_info(" h265 invalid vf been put, vf = %p\n", vf); + hevc_print(hevc, 0," h265 invalid vf been put, vf = %p\n", vf); for (i = 0; i < VF_POOL_SIZE; i++) { - pr_info("www valid vf[%d]= %p \n", i, &hevc->vfpool[i]); + hevc_print(hevc, PRINT_FLAG_VDEC_STATUS,"valid vf[%d]= %p \n", i, &hevc->vfpool[i]); } return false; } |