From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 726CAC433DF for ; Fri, 14 Aug 2020 07:14:28 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 336E620708 for ; Fri, 14 Aug 2020 07:14:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="1s7eAXSN"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="Ot9quvh5" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 336E620708 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-ID:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=h783uzjdo2biQaEKERfvZ1Z0LPierSse0CF62AMsx4I=; b=1s7eAXSNnTWLyowWfJWnhut3c Qho82SVLWQsf14xyOcSV9/ory/1blBh27xrc0wGw2xg1YGrpvNN/c3oqrTGpXMmpb2NNfNfIlUmat uJI2dUceIVFrO9KGbsyw68OVA4J/YiKIIsoMhiGQMh7d3qCeqX1SQSnmpl+pteuDGYtjsI+61cupd 30l10nnd/dHRNx+yOpj+vGj5uvSrnPyhTXkQecStzovn0WHGUk7imMkaPINCjkPd7FWdfZP7kWMlH y/CLzZBukXdbtDt64M7OK3cQTufU7oqjNIP/FyVl0q4BOqOy229wo2WKHuwxeX5+Nm0r7skuhy4yO jb8GqxDTA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1k6Tur-0000wU-LS; Fri, 14 Aug 2020 07:14:17 +0000 Received: from mailgw01.mediatek.com ([216.200.240.184]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1k6Ttz-0000Lv-BZ; Fri, 14 Aug 2020 07:13:35 +0000 X-UUID: 2e07ab2883304f33a62bfa27d1e118d1-20200813 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=IbiFDDHum+jOdniC/v+DA+ppKQzebMyLkYXcc0l8USM=; b=Ot9quvh51KxtwShoGN7yXKEuS8Pq5C5WpFPOEpjrtoUk1uCtf0kIpzi/+gi3xpEVlcdlPdMPUQwIXYxGhX8IxcCTuuHdntFw10HJqrzKPpoOa5V2o97sL/+gu5TlIzVioWNUo7ucrtmQUxd79aAgJcChP85wT2vz3Ys9GOnWNUw=; X-UUID: 2e07ab2883304f33a62bfa27d1e118d1-20200813 Received: from mtkcas68.mediatek.inc [(172.29.94.19)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 668225933; Thu, 13 Aug 2020 23:13:15 -0800 Received: from MTKMBS07N2.mediatek.inc (172.21.101.141) by MTKMBS62DR.mediatek.inc (172.29.94.18) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 14 Aug 2020 00:13:14 -0700 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs07n2.mediatek.inc (172.21.101.141) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 14 Aug 2020 15:13:11 +0800 Received: from localhost.localdomain (10.17.3.153) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Fri, 14 Aug 2020 15:13:10 +0800 From: Xia Jiang To: Hans Verkuil , Mauro Carvalho Chehab , Rob Herring , "Matthias Brugger" , Rick Chang Subject: [PATCH v12 07/29] media: v4l2-mem2mem: add v4l2_m2m_suspend, v4l2_m2m_resume Date: Fri, 14 Aug 2020 15:11:40 +0800 Message-ID: <20200814071202.25067-9-xia.jiang@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20200814071202.25067-1-xia.jiang@mediatek.com> References: <20200814071202.25067-1-xia.jiang@mediatek.com> MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200814_031323_619016_8B5A36A5 X-CRM114-Status: GOOD ( 20.84 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: maoguang.meng@mediatek.com, devicetree@vger.kernel.org, mojahsu@chromium.org, srv_heupstream@mediatek.com, linux-kernel@vger.kernel.org, Tomasz Figa , senozhatsky@chromium.org, drinkcat@chromium.org, linux-mediatek@lists.infradead.org, Pi-Hsun Shih , Jerry-ch Chen , linux-media@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Marek Szyprowski Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org From: Pi-Hsun Shih Add two functions that can be used to stop new jobs from being queued / continue running queued job. This can be used while a driver using m2m helper is going to suspend / wake up from resume, and can ensure that there's no job running in suspend process. BUG=b:143046833 TEST=build Signed-off-by: Pi-Hsun Shih Signed-off-by: Jerry-ch Chen Reviewed-by: Tomasz Figa --- v12: add this relied patch to the series --- drivers/media/v4l2-core/v4l2-mem2mem.c | 41 ++++++++++++++++++++++++++ include/media/v4l2-mem2mem.h | 22 ++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/drivers/media/v4l2-core/v4l2-mem2mem.c b/drivers/media/v4l2-core/v4l2-mem2mem.c index 62ac9424c92a..ddfdb6375064 100644 --- a/drivers/media/v4l2-core/v4l2-mem2mem.c +++ b/drivers/media/v4l2-core/v4l2-mem2mem.c @@ -43,6 +43,10 @@ module_param(debug, bool, 0644); #define TRANS_ABORT (1 << 2) +/* The job queue is not running new jobs */ +#define QUEUE_PAUSED (1 << 0) + + /* Offset base for buffers on the destination queue - used to distinguish * between source and destination buffers when mmapping - they receive the same * offsets but for different queues */ @@ -84,6 +88,7 @@ static const char * const m2m_entity_name[] = { * @job_queue: instances queued to run * @job_spinlock: protects job_queue * @job_work: worker to run queued jobs. + * @job_queue_flags: flags of the queue status, %QUEUE_PAUSED. * @m2m_ops: driver callbacks */ struct v4l2_m2m_dev { @@ -101,6 +106,7 @@ struct v4l2_m2m_dev { struct list_head job_queue; spinlock_t job_spinlock; struct work_struct job_work; + unsigned long job_queue_flags; const struct v4l2_m2m_ops *m2m_ops; }; @@ -263,6 +269,12 @@ static void v4l2_m2m_try_run(struct v4l2_m2m_dev *m2m_dev) return; } + if (m2m_dev->job_queue_flags & QUEUE_PAUSED) { + spin_unlock_irqrestore(&m2m_dev->job_spinlock, flags); + dprintk("Running new jobs is paused\n"); + return; + } + m2m_dev->curr_ctx = list_first_entry(&m2m_dev->job_queue, struct v4l2_m2m_ctx, queue); m2m_dev->curr_ctx->job_flags |= TRANS_RUNNING; @@ -504,6 +516,7 @@ void v4l2_m2m_buf_done_and_job_finish(struct v4l2_m2m_dev *m2m_dev, if (WARN_ON(!src_buf || !dst_buf)) goto unlock; + v4l2_m2m_buf_done(src_buf, state); dst_buf->is_held = src_buf->flags & V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF; if (!dst_buf->is_held) { v4l2_m2m_dst_buf_remove(m2m_ctx); @@ -528,6 +541,34 @@ void v4l2_m2m_buf_done_and_job_finish(struct v4l2_m2m_dev *m2m_dev, } EXPORT_SYMBOL(v4l2_m2m_buf_done_and_job_finish); +void v4l2_m2m_suspend(struct v4l2_m2m_dev *m2m_dev) +{ + unsigned long flags; + struct v4l2_m2m_ctx *curr_ctx; + + spin_lock_irqsave(&m2m_dev->job_spinlock, flags); + m2m_dev->job_queue_flags |= QUEUE_PAUSED; + curr_ctx = m2m_dev->curr_ctx; + spin_unlock_irqrestore(&m2m_dev->job_spinlock, flags); + + if (curr_ctx) + wait_event(curr_ctx->finished, + !(curr_ctx->job_flags & TRANS_RUNNING)); +} +EXPORT_SYMBOL(v4l2_m2m_suspend); + +void v4l2_m2m_resume(struct v4l2_m2m_dev *m2m_dev) +{ + unsigned long flags; + + spin_lock_irqsave(&m2m_dev->job_spinlock, flags); + m2m_dev->job_queue_flags &= ~QUEUE_PAUSED; + spin_unlock_irqrestore(&m2m_dev->job_spinlock, flags); + + v4l2_m2m_try_run(m2m_dev); +} +EXPORT_SYMBOL(v4l2_m2m_resume); + int v4l2_m2m_reqbufs(struct file *file, struct v4l2_m2m_ctx *m2m_ctx, struct v4l2_requestbuffers *reqbufs) { diff --git a/include/media/v4l2-mem2mem.h b/include/media/v4l2-mem2mem.h index 98753f00df7e..5a91b548ecc0 100644 --- a/include/media/v4l2-mem2mem.h +++ b/include/media/v4l2-mem2mem.h @@ -304,6 +304,28 @@ v4l2_m2m_is_last_draining_src_buf(struct v4l2_m2m_ctx *m2m_ctx, void v4l2_m2m_last_buffer_done(struct v4l2_m2m_ctx *m2m_ctx, struct vb2_v4l2_buffer *vbuf); +/** + * v4l2_m2m_suspend() - stop new jobs from being run and wait for current job + * to finish + * + * @m2m_dev: opaque pointer to the internal data to handle M2M context + * + * Called by a driver in the suspend hook. Stop new jobs from being run, and + * wait for current running job to finish. + */ +void v4l2_m2m_suspend(struct v4l2_m2m_dev *m2m_dev); + +/** + * v4l2_m2m_resume() - resume job running and try to run a queued job + * + * @m2m_dev: opaque pointer to the internal data to handle M2M context + * + * Called by a driver in the resume hook. This reverts the operation of + * v4l2_m2m_suspend() and allows job to be run. Also try to run a queued job if + * there is any. + */ +void v4l2_m2m_resume(struct v4l2_m2m_dev *m2m_dev); + /** * v4l2_m2m_reqbufs() - multi-queue-aware REQBUFS multiplexer * -- 2.18.0 _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 632EEC433DF for ; Fri, 14 Aug 2020 07:15:43 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 26A2F20708 for ; Fri, 14 Aug 2020 07:15:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="pOywf3SS"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="Ot9quvh5" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 26A2F20708 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-ID:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=a3WU/mY+rQMSuT+bwAbox3nqdhpla3ulSn/LjXI1BSE=; b=pOywf3SSdVO+l8kVCFd8fQ9j7 sIKDkMiKhcZHZOfeYmxU4BLisazglT6CiNwRd7EBeAGw1hEdnYgUjSJMKagPdFY4HxU2g1P46g2qP 4d6YmyyLUPI8d4qAgAm+i3Vyep2DqPgdnCaHsbr+k2UJ9pNHVhaemtutMk0t2JugwinyTAzEcG4YY KcauGLwNKKthxLK2RBlEOxYpXhBqBQvJZsNkFUM7QHxkkvaxx4phAgoSPcQZlLlvZKkH08kNd67jw JYVgmQR4J4ZqMbwmPtyD7iDC1ru5ieDn/f80+316DRwbkf8G4Wu+tTqFqRIDGFJb0lCkZbT5yBIhg kQ/pEhusQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1k6Tuu-0000yE-Lq; Fri, 14 Aug 2020 07:14:20 +0000 Received: from mailgw01.mediatek.com ([216.200.240.184]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1k6Ttz-0000Lv-BZ; Fri, 14 Aug 2020 07:13:35 +0000 X-UUID: 2e07ab2883304f33a62bfa27d1e118d1-20200813 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=IbiFDDHum+jOdniC/v+DA+ppKQzebMyLkYXcc0l8USM=; b=Ot9quvh51KxtwShoGN7yXKEuS8Pq5C5WpFPOEpjrtoUk1uCtf0kIpzi/+gi3xpEVlcdlPdMPUQwIXYxGhX8IxcCTuuHdntFw10HJqrzKPpoOa5V2o97sL/+gu5TlIzVioWNUo7ucrtmQUxd79aAgJcChP85wT2vz3Ys9GOnWNUw=; X-UUID: 2e07ab2883304f33a62bfa27d1e118d1-20200813 Received: from mtkcas68.mediatek.inc [(172.29.94.19)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 668225933; Thu, 13 Aug 2020 23:13:15 -0800 Received: from MTKMBS07N2.mediatek.inc (172.21.101.141) by MTKMBS62DR.mediatek.inc (172.29.94.18) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 14 Aug 2020 00:13:14 -0700 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs07n2.mediatek.inc (172.21.101.141) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 14 Aug 2020 15:13:11 +0800 Received: from localhost.localdomain (10.17.3.153) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Fri, 14 Aug 2020 15:13:10 +0800 From: Xia Jiang To: Hans Verkuil , Mauro Carvalho Chehab , Rob Herring , "Matthias Brugger" , Rick Chang Subject: [PATCH v12 07/29] media: v4l2-mem2mem: add v4l2_m2m_suspend, v4l2_m2m_resume Date: Fri, 14 Aug 2020 15:11:40 +0800 Message-ID: <20200814071202.25067-9-xia.jiang@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20200814071202.25067-1-xia.jiang@mediatek.com> References: <20200814071202.25067-1-xia.jiang@mediatek.com> MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200814_031323_619016_8B5A36A5 X-CRM114-Status: GOOD ( 20.84 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: maoguang.meng@mediatek.com, devicetree@vger.kernel.org, mojahsu@chromium.org, srv_heupstream@mediatek.com, linux-kernel@vger.kernel.org, Tomasz Figa , senozhatsky@chromium.org, drinkcat@chromium.org, linux-mediatek@lists.infradead.org, Pi-Hsun Shih , Jerry-ch Chen , linux-media@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Marek Szyprowski Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Pi-Hsun Shih Add two functions that can be used to stop new jobs from being queued / continue running queued job. This can be used while a driver using m2m helper is going to suspend / wake up from resume, and can ensure that there's no job running in suspend process. BUG=b:143046833 TEST=build Signed-off-by: Pi-Hsun Shih Signed-off-by: Jerry-ch Chen Reviewed-by: Tomasz Figa --- v12: add this relied patch to the series --- drivers/media/v4l2-core/v4l2-mem2mem.c | 41 ++++++++++++++++++++++++++ include/media/v4l2-mem2mem.h | 22 ++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/drivers/media/v4l2-core/v4l2-mem2mem.c b/drivers/media/v4l2-core/v4l2-mem2mem.c index 62ac9424c92a..ddfdb6375064 100644 --- a/drivers/media/v4l2-core/v4l2-mem2mem.c +++ b/drivers/media/v4l2-core/v4l2-mem2mem.c @@ -43,6 +43,10 @@ module_param(debug, bool, 0644); #define TRANS_ABORT (1 << 2) +/* The job queue is not running new jobs */ +#define QUEUE_PAUSED (1 << 0) + + /* Offset base for buffers on the destination queue - used to distinguish * between source and destination buffers when mmapping - they receive the same * offsets but for different queues */ @@ -84,6 +88,7 @@ static const char * const m2m_entity_name[] = { * @job_queue: instances queued to run * @job_spinlock: protects job_queue * @job_work: worker to run queued jobs. + * @job_queue_flags: flags of the queue status, %QUEUE_PAUSED. * @m2m_ops: driver callbacks */ struct v4l2_m2m_dev { @@ -101,6 +106,7 @@ struct v4l2_m2m_dev { struct list_head job_queue; spinlock_t job_spinlock; struct work_struct job_work; + unsigned long job_queue_flags; const struct v4l2_m2m_ops *m2m_ops; }; @@ -263,6 +269,12 @@ static void v4l2_m2m_try_run(struct v4l2_m2m_dev *m2m_dev) return; } + if (m2m_dev->job_queue_flags & QUEUE_PAUSED) { + spin_unlock_irqrestore(&m2m_dev->job_spinlock, flags); + dprintk("Running new jobs is paused\n"); + return; + } + m2m_dev->curr_ctx = list_first_entry(&m2m_dev->job_queue, struct v4l2_m2m_ctx, queue); m2m_dev->curr_ctx->job_flags |= TRANS_RUNNING; @@ -504,6 +516,7 @@ void v4l2_m2m_buf_done_and_job_finish(struct v4l2_m2m_dev *m2m_dev, if (WARN_ON(!src_buf || !dst_buf)) goto unlock; + v4l2_m2m_buf_done(src_buf, state); dst_buf->is_held = src_buf->flags & V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF; if (!dst_buf->is_held) { v4l2_m2m_dst_buf_remove(m2m_ctx); @@ -528,6 +541,34 @@ void v4l2_m2m_buf_done_and_job_finish(struct v4l2_m2m_dev *m2m_dev, } EXPORT_SYMBOL(v4l2_m2m_buf_done_and_job_finish); +void v4l2_m2m_suspend(struct v4l2_m2m_dev *m2m_dev) +{ + unsigned long flags; + struct v4l2_m2m_ctx *curr_ctx; + + spin_lock_irqsave(&m2m_dev->job_spinlock, flags); + m2m_dev->job_queue_flags |= QUEUE_PAUSED; + curr_ctx = m2m_dev->curr_ctx; + spin_unlock_irqrestore(&m2m_dev->job_spinlock, flags); + + if (curr_ctx) + wait_event(curr_ctx->finished, + !(curr_ctx->job_flags & TRANS_RUNNING)); +} +EXPORT_SYMBOL(v4l2_m2m_suspend); + +void v4l2_m2m_resume(struct v4l2_m2m_dev *m2m_dev) +{ + unsigned long flags; + + spin_lock_irqsave(&m2m_dev->job_spinlock, flags); + m2m_dev->job_queue_flags &= ~QUEUE_PAUSED; + spin_unlock_irqrestore(&m2m_dev->job_spinlock, flags); + + v4l2_m2m_try_run(m2m_dev); +} +EXPORT_SYMBOL(v4l2_m2m_resume); + int v4l2_m2m_reqbufs(struct file *file, struct v4l2_m2m_ctx *m2m_ctx, struct v4l2_requestbuffers *reqbufs) { diff --git a/include/media/v4l2-mem2mem.h b/include/media/v4l2-mem2mem.h index 98753f00df7e..5a91b548ecc0 100644 --- a/include/media/v4l2-mem2mem.h +++ b/include/media/v4l2-mem2mem.h @@ -304,6 +304,28 @@ v4l2_m2m_is_last_draining_src_buf(struct v4l2_m2m_ctx *m2m_ctx, void v4l2_m2m_last_buffer_done(struct v4l2_m2m_ctx *m2m_ctx, struct vb2_v4l2_buffer *vbuf); +/** + * v4l2_m2m_suspend() - stop new jobs from being run and wait for current job + * to finish + * + * @m2m_dev: opaque pointer to the internal data to handle M2M context + * + * Called by a driver in the suspend hook. Stop new jobs from being run, and + * wait for current running job to finish. + */ +void v4l2_m2m_suspend(struct v4l2_m2m_dev *m2m_dev); + +/** + * v4l2_m2m_resume() - resume job running and try to run a queued job + * + * @m2m_dev: opaque pointer to the internal data to handle M2M context + * + * Called by a driver in the resume hook. This reverts the operation of + * v4l2_m2m_suspend() and allows job to be run. Also try to run a queued job if + * there is any. + */ +void v4l2_m2m_resume(struct v4l2_m2m_dev *m2m_dev); + /** * v4l2_m2m_reqbufs() - multi-queue-aware REQBUFS multiplexer * -- 2.18.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.4 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,MIME_BASE64_TEXT,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EE9E3C433E3 for ; Fri, 14 Aug 2020 07:15:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B616C2074D for ; Fri, 14 Aug 2020 07:15:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="BJXj/rKR" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726709AbgHNHNU (ORCPT ); Fri, 14 Aug 2020 03:13:20 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:13311 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726674AbgHNHNT (ORCPT ); Fri, 14 Aug 2020 03:13:19 -0400 X-UUID: 77f47ef2a04e4f228624d3dc5eaf6a01-20200814 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=IbiFDDHum+jOdniC/v+DA+ppKQzebMyLkYXcc0l8USM=; b=BJXj/rKR2C/1cRoMW/6kkNdaCgwOfZY4/QASnoXWJ0IHjjvWQkPAZ6mqBIQfoanvExPFep+voC5ohEDnbXPcfGa9X78BQ1WCd/JVYla4DFWhF1Cz1wRLsUylmj4LNT8N233wwVqOoheZp8jYQMDxAzweKs0eAQcZtod1+GtqW/M=; X-UUID: 77f47ef2a04e4f228624d3dc5eaf6a01-20200814 Received: from mtkcas06.mediatek.inc [(172.21.101.30)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 1253427356; Fri, 14 Aug 2020 15:13:13 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs07n2.mediatek.inc (172.21.101.141) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 14 Aug 2020 15:13:11 +0800 Received: from localhost.localdomain (10.17.3.153) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Fri, 14 Aug 2020 15:13:10 +0800 From: Xia Jiang To: Hans Verkuil , Mauro Carvalho Chehab , Rob Herring , Matthias Brugger , Rick Chang CC: , , , , , Marek Szyprowski , Tomasz Figa , , , , , , Pi-Hsun Shih , Jerry-ch Chen Subject: [PATCH v12 07/29] media: v4l2-mem2mem: add v4l2_m2m_suspend, v4l2_m2m_resume Date: Fri, 14 Aug 2020 15:11:40 +0800 Message-ID: <20200814071202.25067-9-xia.jiang@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20200814071202.25067-1-xia.jiang@mediatek.com> References: <20200814071202.25067-1-xia.jiang@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Content-Transfer-Encoding: base64 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org RnJvbTogUGktSHN1biBTaGloIDxwaWhzdW5AY2hyb21pdW0ub3JnPg0KDQpBZGQgdHdvIGZ1bmN0 aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIHN0b3AgbmV3IGpvYnMgZnJvbSBiZWluZyBxdWV1ZWQg Lw0KY29udGludWUgcnVubmluZyBxdWV1ZWQgam9iLiBUaGlzIGNhbiBiZSB1c2VkIHdoaWxlIGEg ZHJpdmVyIHVzaW5nIG0ybQ0KaGVscGVyIGlzIGdvaW5nIHRvIHN1c3BlbmQgLyB3YWtlIHVwIGZy b20gcmVzdW1lLCBhbmQgY2FuIGVuc3VyZSB0aGF0DQp0aGVyZSdzIG5vIGpvYiBydW5uaW5nIGlu IHN1c3BlbmQgcHJvY2Vzcy4NCg0KQlVHPWI6MTQzMDQ2ODMzDQpURVNUPWJ1aWxkDQoNClNpZ25l ZC1vZmYtYnk6IFBpLUhzdW4gU2hpaCA8cGloc3VuQGNocm9taXVtLm9yZz4NClNpZ25lZC1vZmYt Ynk6IEplcnJ5LWNoIENoZW4gPGplcnJ5LWNoLmNoZW5AbWVkaWF0ZWsuY29ycC1wYXJ0bmVyLmdv b2dsZS5jb20+DQpSZXZpZXdlZC1ieTogVG9tYXN6IEZpZ2EgPHRmaWdhQGNocm9taXVtLm9yZz4N Ci0tLQ0KdjEyOiBhZGQgdGhpcyByZWxpZWQgcGF0Y2ggdG8gdGhlIHNlcmllcw0KLS0tDQogZHJp dmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1tZW0ybWVtLmMgfCA0MSArKysrKysrKysrKysrKysr KysrKysrKysrKw0KIGluY2x1ZGUvbWVkaWEvdjRsMi1tZW0ybWVtLmggICAgICAgICAgIHwgMjIg KysrKysrKysrKysrKysNCiAyIGZpbGVzIGNoYW5nZWQsIDYzIGluc2VydGlvbnMoKykNCg0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItbWVtMm1lbS5jIGIvZHJpdmVy cy9tZWRpYS92NGwyLWNvcmUvdjRsMi1tZW0ybWVtLmMNCmluZGV4IDYyYWM5NDI0YzkyYS4uZGRm ZGI2Mzc1MDY0IDEwMDY0NA0KLS0tIGEvZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1tZW0y bWVtLmMNCisrKyBiL2RyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItbWVtMm1lbS5jDQpAQCAt NDMsNiArNDMsMTAgQEAgbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCAwNjQ0KTsNCiAjZGVmaW5l IFRSQU5TX0FCT1JUCQkoMSA8PCAyKQ0KIA0KIA0KKy8qIFRoZSBqb2IgcXVldWUgaXMgbm90IHJ1 bm5pbmcgbmV3IGpvYnMgKi8NCisjZGVmaW5lIFFVRVVFX1BBVVNFRAkJKDEgPDwgMCkNCisNCisN CiAvKiBPZmZzZXQgYmFzZSBmb3IgYnVmZmVycyBvbiB0aGUgZGVzdGluYXRpb24gcXVldWUgLSB1 c2VkIHRvIGRpc3Rpbmd1aXNoDQogICogYmV0d2VlbiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGJ1 ZmZlcnMgd2hlbiBtbWFwcGluZyAtIHRoZXkgcmVjZWl2ZSB0aGUgc2FtZQ0KICAqIG9mZnNldHMg YnV0IGZvciBkaWZmZXJlbnQgcXVldWVzICovDQpAQCAtODQsNiArODgsNyBAQCBzdGF0aWMgY29u c3QgY2hhciAqIGNvbnN0IG0ybV9lbnRpdHlfbmFtZVtdID0gew0KICAqIEBqb2JfcXVldWU6CQlp bnN0YW5jZXMgcXVldWVkIHRvIHJ1bg0KICAqIEBqb2Jfc3BpbmxvY2s6CXByb3RlY3RzIGpvYl9x dWV1ZQ0KICAqIEBqb2Jfd29yazoJCXdvcmtlciB0byBydW4gcXVldWVkIGpvYnMuDQorICogQGpv Yl9xdWV1ZV9mbGFnczoJZmxhZ3Mgb2YgdGhlIHF1ZXVlIHN0YXR1cywgJVFVRVVFX1BBVVNFRC4N CiAgKiBAbTJtX29wczoJCWRyaXZlciBjYWxsYmFja3MNCiAgKi8NCiBzdHJ1Y3QgdjRsMl9tMm1f ZGV2IHsNCkBAIC0xMDEsNiArMTA2LDcgQEAgc3RydWN0IHY0bDJfbTJtX2RldiB7DQogCXN0cnVj dCBsaXN0X2hlYWQJam9iX3F1ZXVlOw0KIAlzcGlubG9ja190CQlqb2Jfc3BpbmxvY2s7DQogCXN0 cnVjdCB3b3JrX3N0cnVjdAlqb2Jfd29yazsNCisJdW5zaWduZWQgbG9uZwkJam9iX3F1ZXVlX2Zs YWdzOw0KIA0KIAljb25zdCBzdHJ1Y3QgdjRsMl9tMm1fb3BzICptMm1fb3BzOw0KIH07DQpAQCAt MjYzLDYgKzI2OSwxMiBAQCBzdGF0aWMgdm9pZCB2NGwyX20ybV90cnlfcnVuKHN0cnVjdCB2NGwy X20ybV9kZXYgKm0ybV9kZXYpDQogCQlyZXR1cm47DQogCX0NCiANCisJaWYgKG0ybV9kZXYtPmpv Yl9xdWV1ZV9mbGFncyAmIFFVRVVFX1BBVVNFRCkgew0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmbTJtX2Rldi0+am9iX3NwaW5sb2NrLCBmbGFncyk7DQorCQlkcHJpbnRrKCJSdW5uaW5nIG5l dyBqb2JzIGlzIHBhdXNlZFxuIik7DQorCQlyZXR1cm47DQorCX0NCisNCiAJbTJtX2Rldi0+Y3Vy cl9jdHggPSBsaXN0X2ZpcnN0X2VudHJ5KCZtMm1fZGV2LT5qb2JfcXVldWUsDQogCQkJCSAgIHN0 cnVjdCB2NGwyX20ybV9jdHgsIHF1ZXVlKTsNCiAJbTJtX2Rldi0+Y3Vycl9jdHgtPmpvYl9mbGFn cyB8PSBUUkFOU19SVU5OSU5HOw0KQEAgLTUwNCw2ICs1MTYsNyBAQCB2b2lkIHY0bDJfbTJtX2J1 Zl9kb25lX2FuZF9qb2JfZmluaXNoKHN0cnVjdCB2NGwyX20ybV9kZXYgKm0ybV9kZXYsDQogDQog CWlmIChXQVJOX09OKCFzcmNfYnVmIHx8ICFkc3RfYnVmKSkNCiAJCWdvdG8gdW5sb2NrOw0KKwl2 NGwyX20ybV9idWZfZG9uZShzcmNfYnVmLCBzdGF0ZSk7DQogCWRzdF9idWYtPmlzX2hlbGQgPSBz cmNfYnVmLT5mbGFncyAmIFY0TDJfQlVGX0ZMQUdfTTJNX0hPTERfQ0FQVFVSRV9CVUY7DQogCWlm ICghZHN0X2J1Zi0+aXNfaGVsZCkgew0KIAkJdjRsMl9tMm1fZHN0X2J1Zl9yZW1vdmUobTJtX2N0 eCk7DQpAQCAtNTI4LDYgKzU0MSwzNCBAQCB2b2lkIHY0bDJfbTJtX2J1Zl9kb25lX2FuZF9qb2Jf ZmluaXNoKHN0cnVjdCB2NGwyX20ybV9kZXYgKm0ybV9kZXYsDQogfQ0KIEVYUE9SVF9TWU1CT0wo djRsMl9tMm1fYnVmX2RvbmVfYW5kX2pvYl9maW5pc2gpOw0KIA0KK3ZvaWQgdjRsMl9tMm1fc3Vz cGVuZChzdHJ1Y3QgdjRsMl9tMm1fZGV2ICptMm1fZGV2KQ0KK3sNCisJdW5zaWduZWQgbG9uZyBm bGFnczsNCisJc3RydWN0IHY0bDJfbTJtX2N0eCAqY3Vycl9jdHg7DQorDQorCXNwaW5fbG9ja19p cnFzYXZlKCZtMm1fZGV2LT5qb2Jfc3BpbmxvY2ssIGZsYWdzKTsNCisJbTJtX2Rldi0+am9iX3F1 ZXVlX2ZsYWdzIHw9IFFVRVVFX1BBVVNFRDsNCisJY3Vycl9jdHggPSBtMm1fZGV2LT5jdXJyX2N0 eDsNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbTJtX2Rldi0+am9iX3NwaW5sb2NrLCBmbGFn cyk7DQorDQorCWlmIChjdXJyX2N0eCkNCisJCXdhaXRfZXZlbnQoY3Vycl9jdHgtPmZpbmlzaGVk LA0KKwkJCSAgICEoY3Vycl9jdHgtPmpvYl9mbGFncyAmIFRSQU5TX1JVTk5JTkcpKTsNCit9DQor RVhQT1JUX1NZTUJPTCh2NGwyX20ybV9zdXNwZW5kKTsNCisNCit2b2lkIHY0bDJfbTJtX3Jlc3Vt ZShzdHJ1Y3QgdjRsMl9tMm1fZGV2ICptMm1fZGV2KQ0KK3sNCisJdW5zaWduZWQgbG9uZyBmbGFn czsNCisNCisJc3Bpbl9sb2NrX2lycXNhdmUoJm0ybV9kZXYtPmpvYl9zcGlubG9jaywgZmxhZ3Mp Ow0KKwltMm1fZGV2LT5qb2JfcXVldWVfZmxhZ3MgJj0gflFVRVVFX1BBVVNFRDsNCisJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmbTJtX2Rldi0+am9iX3NwaW5sb2NrLCBmbGFncyk7DQorDQorCXY0 bDJfbTJtX3RyeV9ydW4obTJtX2Rldik7DQorfQ0KK0VYUE9SVF9TWU1CT0wodjRsMl9tMm1fcmVz dW1lKTsNCisNCiBpbnQgdjRsMl9tMm1fcmVxYnVmcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0 IHY0bDJfbTJtX2N0eCAqbTJtX2N0eCwNCiAJCSAgICAgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZl cnMgKnJlcWJ1ZnMpDQogew0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1tZW0ybWVt LmggYi9pbmNsdWRlL21lZGlhL3Y0bDItbWVtMm1lbS5oDQppbmRleCA5ODc1M2YwMGRmN2UuLjVh OTFiNTQ4ZWNjMCAxMDA2NDQNCi0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1tZW0ybWVtLmgNCisr KyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1tZW0ybWVtLmgNCkBAIC0zMDQsNiArMzA0LDI4IEBAIHY0 bDJfbTJtX2lzX2xhc3RfZHJhaW5pbmdfc3JjX2J1ZihzdHJ1Y3QgdjRsMl9tMm1fY3R4ICptMm1f Y3R4LA0KIHZvaWQgdjRsMl9tMm1fbGFzdF9idWZmZXJfZG9uZShzdHJ1Y3QgdjRsMl9tMm1fY3R4 ICptMm1fY3R4LA0KIAkJCSAgICAgICBzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICp2YnVmKTsNCiAN CisvKioNCisgKiB2NGwyX20ybV9zdXNwZW5kKCkgLSBzdG9wIG5ldyBqb2JzIGZyb20gYmVpbmcg cnVuIGFuZCB3YWl0IGZvciBjdXJyZW50IGpvYg0KKyAqIHRvIGZpbmlzaA0KKyAqDQorICogQG0y bV9kZXY6IG9wYXF1ZSBwb2ludGVyIHRvIHRoZSBpbnRlcm5hbCBkYXRhIHRvIGhhbmRsZSBNMk0g Y29udGV4dA0KKyAqDQorICogQ2FsbGVkIGJ5IGEgZHJpdmVyIGluIHRoZSBzdXNwZW5kIGhvb2su IFN0b3AgbmV3IGpvYnMgZnJvbSBiZWluZyBydW4sIGFuZA0KKyAqIHdhaXQgZm9yIGN1cnJlbnQg cnVubmluZyBqb2IgdG8gZmluaXNoLg0KKyAqLw0KK3ZvaWQgdjRsMl9tMm1fc3VzcGVuZChzdHJ1 Y3QgdjRsMl9tMm1fZGV2ICptMm1fZGV2KTsNCisNCisvKioNCisgKiB2NGwyX20ybV9yZXN1bWUo KSAtIHJlc3VtZSBqb2IgcnVubmluZyBhbmQgdHJ5IHRvIHJ1biBhIHF1ZXVlZCBqb2INCisgKg0K KyAqIEBtMm1fZGV2OiBvcGFxdWUgcG9pbnRlciB0byB0aGUgaW50ZXJuYWwgZGF0YSB0byBoYW5k bGUgTTJNIGNvbnRleHQNCisgKg0KKyAqIENhbGxlZCBieSBhIGRyaXZlciBpbiB0aGUgcmVzdW1l IGhvb2suIFRoaXMgcmV2ZXJ0cyB0aGUgb3BlcmF0aW9uIG9mDQorICogdjRsMl9tMm1fc3VzcGVu ZCgpIGFuZCBhbGxvd3Mgam9iIHRvIGJlIHJ1bi4gQWxzbyB0cnkgdG8gcnVuIGEgcXVldWVkIGpv YiBpZg0KKyAqIHRoZXJlIGlzIGFueS4NCisgKi8NCit2b2lkIHY0bDJfbTJtX3Jlc3VtZShzdHJ1 Y3QgdjRsMl9tMm1fZGV2ICptMm1fZGV2KTsNCisNCiAvKioNCiAgKiB2NGwyX20ybV9yZXFidWZz KCkgLSBtdWx0aS1xdWV1ZS1hd2FyZSBSRVFCVUZTIG11bHRpcGxleGVyDQogICoNCi0tIA0KMi4x OC4wDQo=