Received: by 2002:ab2:6f44:0:b0:1fd:c486:4f03 with SMTP id l4csp229150lqq; Thu, 13 Jun 2024 00:59:12 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCUy9b5jtNQQmRHYjmEFkUL0LUODRrR1ADB6LgyXziT/vswiLl9fKBa7nMCgGaUooBWHW6SNuLQiJqe2PxsvyR38rYHYEWDEP2ylaVZudw== X-Google-Smtp-Source: AGHT+IHMQvszROi4loOckWOQZWPpljVOHt/BtAUiOS4UP35UaoFGGzclcXHTHU6jtlZgKgg+atOw X-Received: by 2002:a17:906:128a:b0:a6f:501d:c225 with SMTP id a640c23a62f3a-a6f501dd117mr137161066b.45.1718265552148; Thu, 13 Jun 2024 00:59:12 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1718265552; cv=pass; d=google.com; s=arc-20160816; b=mEHcYl86NCQSy0oe9O4XA/FLckcV0TiZcZSjIRMbPAcqIIGZsRG/5CZ4KyyXJ19Xya 4ovaa4Pkl1ssj+0Mf6UJ9IU6osZVTfcOiF4sq9sdXGEfZnMV1R1iROtJKlU5S9jtf3/W /+KTlwcwLbHv7KaEL76Eqfy/F2g1ll0HMSncm5XfqbKWQzhGE0vXdaCMWoblGE34OSfm Uhn99WgcpIqcnBabnr8XyAHhaXq1KanSCrSOu6IP+6m2wdd91VS3Qj2w3xEPw1QQhZx0 o9uvIHokJ5VeRSlROp1/doLJk9FEf/HVKCxEZWFQf3lgic8NZT3bvzEXjCJTTx54bwYh R/yA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=sP9jjEjR3Fl9bnNljAx5C7EQrqjpd5h61JfVWdHh+Nk=; fh=iBFu4OfMrCc2ajIigDq/KCLfQX7kaMJQxWVUnQnR8wU=; b=ELq+ITDbnReClTa9cumvsOy2phzr9CmHtGioTs5UQRGXvHwEmg4YjFk3KRgbXHWejx p6tst/B+ODoWWNcIl+2GY0vdDQpnevZyP+os+q7fbND+HtyznLLIOvv/GgJBDFtU0Q3Y JPGUdnBWrIpwjAmndJQzKApktV8Y6ib3482ZSUuhKzOtnSSw332sy0L9SRrs0RuRlTVQ 5E++Ao3HXJGoCXf7WOri2ssfCCYf6xX1f15lQLX3nQIY6VVWp8G4ZJNVRudduheAhshx FEJACRL/SvUkfZiVRjq01hstkPg5TtxUodTlvSjw8gmt44ikMvMooV43a7pOWZ78HRFW 40KA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=nGzykz5c; arc=pass (i=1 spf=pass spfdomain=mediatek.com dkim=pass dkdomain=mediatek.com dmarc=pass fromdomain=mediatek.com); spf=pass (google.com: domain of linux-kernel+bounces-212762-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-212762-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mediatek.com Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id a640c23a62f3a-a6f56d4977bsi44314166b.230.2024.06.13.00.59.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Jun 2024 00:59:12 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-212762-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=nGzykz5c; arc=pass (i=1 spf=pass spfdomain=mediatek.com dkim=pass dkdomain=mediatek.com dmarc=pass fromdomain=mediatek.com); spf=pass (google.com: domain of linux-kernel+bounces-212762-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-212762-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mediatek.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 7E94A1F2531E for ; Thu, 13 Jun 2024 07:58:08 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 5CFA913D60B; Thu, 13 Jun 2024 07:56:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="nGzykz5c" Received: from mailgw01.mediatek.com (unknown [60.244.123.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6736013CFB3; Thu, 13 Jun 2024 07:56:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=60.244.123.138 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718265400; cv=none; b=l1zYBx085C4ctpysX1u8vE2+8GPorYAP+c2uCkz9UrasfMorIeDkhYI76xOJ2Sc98iKD3r+3BPmlw2OJJiSv1sZ+CreMetEio7N/hGukCPfjbosKDt5gtyctA8LD6NxvfwkxwtE8Q/2hsvQMYiZm4nZ4xuWqE+5qCKOzdMojHw4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718265400; c=relaxed/simple; bh=4LVfBnq81p3WHUR9Zxk/W8mxeziVyDsR5SVtrvOxOPU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=RhfMv1Oxoy6DMut0yRCZitmanrklhWPiwJpP13P2Hqc0Og80IajgMbbpkb/p5ubw2kB+98o+5V91wz0lwMdDx9JLGUOLHFGIRrd1zeECIXO1Itf6JMnWt4MqyVpq++joh9I6IxMcPI5HK1Ff+1tUiS8IYMyvQoQAxu1Co/hQr3E= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=mediatek.com; spf=pass smtp.mailfrom=mediatek.com; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b=nGzykz5c; arc=none smtp.client-ip=60.244.123.138 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=mediatek.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mediatek.com X-UUID: 73745b3e295a11efa54bbfbb386b949c-20240613 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Type:Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=sP9jjEjR3Fl9bnNljAx5C7EQrqjpd5h61JfVWdHh+Nk=; b=nGzykz5c89CJtwPypGDKLQcAWcEoDJfmeG4FajOrnpBtKnF7E7uGpwnOO/TBcHb0Rd7A6jh3yzxVhsgimznuYQuDjJgTGFl3RUrHqVb63Omuamnst0PFCMrDxCHTuJyjZtW41Lirf2POsL4NWl4kS7uqo4ZBLaq2EsphOifgiY0=; X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.39,REQID:348a2529-6ff3-42b4-983d-6ad909031f7c,IP:0,U RL:0,TC:0,Content:0,EDM:0,RT:0,SF:0,FILE:0,BULK:0,RULE:Release_Ham,ACTION: release,TS:0 X-CID-META: VersionHash:393d96e,CLOUDID:6c94f093-e2c0-40b0-a8fe-7c7e47299109,B ulkID:nil,BulkQuantity:0,Recheck:0,SF:102,TC:nil,Content:0,EDM:-3,IP:nil,U RL:0,File:nil,RT:nil,Bulk:nil,QS:nil,BEC:nil,COL:0,OSI:0,OSA:0,AV:0,LES:1, SPR:NO,DKR:0,DKP:0,BRR:0,BRE:0,ARC:0 X-CID-BVR: 0,NGT X-CID-BAS: 0,NGT,0,_ X-CID-FACTOR: TF_CID_SPAM_SNR X-UUID: 73745b3e295a11efa54bbfbb386b949c-20240613 Received: from mtkmbs14n2.mediatek.inc [(172.21.101.76)] by mailgw01.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 759385395; Thu, 13 Jun 2024 15:56:33 +0800 Received: from mtkmbs13n1.mediatek.inc (172.21.101.193) by mtkmbs11n1.mediatek.inc (172.21.101.185) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.26; Thu, 13 Jun 2024 15:56:31 +0800 Received: from mhfsdcap04.gcn.mediatek.inc (10.17.3.154) by mtkmbs13n1.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.2.1118.26 via Frontend Transport; Thu, 13 Jun 2024 15:56:31 +0800 From: Yunfei Dong To: =?UTF-8?q?N=C3=ADcolas=20F=20=2E=20R=20=2E=20A=20=2E=20Prado?= , Sebastian Fricke , Nicolas Dufresne , Hans Verkuil , AngeloGioacchino Del Regno , Benjamin Gaignard , Nathan Hebert , Daniel Almeida CC: Hsin-Yi Wang , Fritz Koenig , Daniel Vetter , Steve Cho , Yunfei Dong , , , , , , Subject: [PATCH v3 6/7] media: mediatek: vcodec: replace v4l2_m2m_next_src_buf with v4l2_m2m_src_buf_remove Date: Thu, 13 Jun 2024 15:55:31 +0800 Message-ID: <20240613075532.32128-7-yunfei.dong@mediatek.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240613075532.32128-1-yunfei.dong@mediatek.com> References: <20240613075532.32128-1-yunfei.dong@mediatek.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-MTK: N There isn't lock to protect source buffer when get next src buffer, if the source buffer is removed for some unknown reason before lat work queue execute done, will lead to remove source buffer or buffer done error. Signed-off-by: Yunfei Dong --- .../vcodec/decoder/mtk_vcodec_dec_stateless.c | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_stateless.c b/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_stateless.c index 8aa379872ddc..3dba3549000a 100644 --- a/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_stateless.c +++ b/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_stateless.c @@ -321,6 +321,7 @@ static void mtk_vdec_worker(struct work_struct *work) container_of(work, struct mtk_vcodec_dec_ctx, decode_work); struct mtk_vcodec_dec_dev *dev = ctx->dev; struct vb2_v4l2_buffer *vb2_v4l2_src = ctx->last_vb2_v4l2_src; + struct vb2_v4l2_buffer *vb2_v4l2_dst; struct vb2_buffer *vb2_src; struct mtk_vcodec_mem *bs_src; struct mtk_video_dec_buf *dec_buf_src; @@ -329,7 +330,7 @@ static void mtk_vdec_worker(struct work_struct *work) bool res_chg = false; int ret; - vb2_v4l2_src = vb2_v4l2_src ? vb2_v4l2_src : v4l2_m2m_next_src_buf(ctx->m2m_ctx); + vb2_v4l2_src = vb2_v4l2_src ? vb2_v4l2_src : v4l2_m2m_src_buf_remove(ctx->m2m_ctx); if (!vb2_v4l2_src) { v4l2_m2m_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx); mtk_v4l2_vdec_dbg(1, ctx, "[%d] no available source buffer", ctx->id); @@ -381,17 +382,28 @@ static void mtk_vdec_worker(struct work_struct *work) ctx->current_codec == V4L2_PIX_FMT_VP8_FRAME) { if (src_buf_req) v4l2_ctrl_request_complete(src_buf_req, &ctx->ctrl_hdl); - v4l2_m2m_buf_done_and_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx, state); - } else { - if (ret != -EAGAIN) { - v4l2_m2m_src_buf_remove(ctx->m2m_ctx); - ctx->last_vb2_v4l2_src = NULL; - } else { - ctx->last_vb2_v4l2_src = vb2_v4l2_src; - } + vb2_v4l2_dst = v4l2_m2m_dst_buf_remove(ctx->m2m_ctx); + v4l2_m2m_buf_done(vb2_v4l2_dst, state); + v4l2_m2m_buf_done(vb2_v4l2_src, state); v4l2_m2m_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx); + return; } + + /* If each codec return -EAGAIN to decode again, need to backup current source + * buffer, then the driver will get this buffer next time. + * + * If each codec decode error, must to set buffer done with error status for + * this buffer have been removed from ready list. + */ + ctx->last_vb2_v4l2_src = (ret != -EAGAIN) ? NULL : vb2_v4l2_src; + if (ret && ret != -EAGAIN) { + if (src_buf_req) + v4l2_ctrl_request_complete(src_buf_req, &ctx->ctrl_hdl); + v4l2_m2m_buf_done(vb2_v4l2_src, state); + } + + v4l2_m2m_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx); } static void vb2ops_vdec_stateless_buf_queue(struct vb2_buffer *vb) -- 2.18.0