From 13fd1902f32edae0cf780fcb5cd0fe90aaeb5a9a Mon Sep 17 00:00:00 2001 From: wenbiao zhang Date: Wed, 4 Apr 2018 10:49:25 +0800 Subject: [PATCH] vreal: uninit when init fail PD#163348: fix for hang up when playing video after play vreal format Change-Id: I13fc45d6092351d86db4dfdbfd6f837d7deca605 --- .../frame_provider/decoder/real/vreal.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/amlogic/media_modules/frame_provider/decoder/real/vreal.c b/drivers/amlogic/media_modules/frame_provider/decoder/real/vreal.c index 1036a7e60e6b..ef0f340d2b78 100644 --- a/drivers/amlogic/media_modules/frame_provider/decoder/real/vreal.c +++ b/drivers/amlogic/media_modules/frame_provider/decoder/real/vreal.c @@ -811,13 +811,16 @@ s32 vreal_init(struct vdec_s *vdec) ret = rmparser_init(vdec); if (ret) { amvdec_disable(); - + vfree(buf); pr_info("rm parser init failed\n"); return ret; } if (vreal_amstream_dec_info.format == VIDEO_DEC_FORMAT_REAL_8) { if (vreal_amstream_dec_info.param == NULL) { + rmparser_release(); + amvdec_disable(); + vfree(buf); return -1; } load_block_data((void *)pic_sz_tbl, 12); @@ -839,6 +842,7 @@ s32 vreal_init(struct vdec_s *vdec) pr_info("unsurpported real format\n"); if (size < 0) { + rmparser_release(); amvdec_disable(); pr_err("get firmware fail."); vfree(buf); @@ -847,6 +851,7 @@ s32 vreal_init(struct vdec_s *vdec) if (size == 1) pr_info ("tee load ok"); else if (amvdec_loadmc_ex(VFORMAT_REAL, NULL, buf) < 0) { + rmparser_release(); amvdec_disable(); vfree(buf); return -EBUSY; @@ -858,10 +863,14 @@ s32 vreal_init(struct vdec_s *vdec) /* enable AMRISC side protocol */ ret = vreal_prot_init(); - if (ret < 0) + if (ret < 0) { + rmparser_release(); + amvdec_disable(); return ret; + } if (vdec_request_irq(VDEC_IRQ_1, vreal_isr, "vreal-irq", (void *)vreal_dec_id)) { + rmparser_release(); amvdec_disable(); pr_info("vreal irq register error.\n");