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=-10.9 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,URIBL_BLOCKED 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 5E330C4363D for ; Fri, 25 Sep 2020 17:57:22 +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 CA1822075F for ; Fri, 25 Sep 2020 17:57:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="nBlcSA7p"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="SEE5NXvM" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CA1822075F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=chromium.org 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:In-Reply-To:MIME-Version:References:Message-ID: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=8wA6ZhfvXFeXYxPzyGYyE6foLjnSk3uE60M8rdYbC9k=; b=nBlcSA7pnYffOTM0K0vkIMiq+ HymldrVnp018ObRalED+8oRFPG0XvkXdUz9Y5o/oOfZr77ewa26W2wubqSOrpCPahlrTLv7PBbwE8 pagnutLpj4CMl9QwMC713erdj9YJsfUDRAJza+UNPjkZNvyZKgjd7a2VjZjeFsH51Okh37z8ScQIK O//nqUzvYmx3Wh+diWU5rzyL3FRDkxqG8/WLuPGUPnlvof0BFIWUgMyuUSsTs+v8lIRpYSjrULGP7 3+nO0N61McZ+3nY76tZ7POplnxBS86tY0lIcR9AzLLHp0iDeqRBazEgdoQN8xPG1nVgJ2dNdX+9Me IJRZrM1Yw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kLry0-0002sk-C2; Fri, 25 Sep 2020 17:57:08 +0000 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kLrxx-0002rl-Ou for linux-mediatek@lists.infradead.org; Fri, 25 Sep 2020 17:57:06 +0000 Received: by mail-wr1-x442.google.com with SMTP id s12so4557761wrw.11 for ; Fri, 25 Sep 2020 10:57:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=wXX5XN82rdvL6bEh20v+gTPlXlkQDSNYlOsYCjW32/w=; b=SEE5NXvMVZ3oIioawsUQ3FL8hhb0V1ekMCb+hguGxej4nbA1nbpjWVOAr7fc5zUYc7 wqpXoLys+zqljC8E4wN7TNikaQjsE4bhmDgjjdLJ1jBrzpiyylbOdixHS7zurwQvYEo2 wKpQAS42NxmxUljeEltzMG6fP67Az275jJI8Q= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=wXX5XN82rdvL6bEh20v+gTPlXlkQDSNYlOsYCjW32/w=; b=atRl4D4ElfXESRB3kZBkI/J+K2ZFZFyHZ+98uvJJ9abFEcGRdd3HKGfOGorykHDUEu ePVekM1XVe3Bz7YItF5Nz5HQ1L94DmdM53NBRkF8YB0y97OoJWTjcmbsUNLDWXS5F3JN PieFgrLb+2dPzPn4/WhWH2Ig8mYSZRjfJsDDCA9lEoECFxtSefhUTS8+ooiX/NDLGpCT 6Wd73b3PpTUJXzQTrwVSw76GHadA1RQR8ePu+xCHcJCqvA4zB9H0nZeagT910BfqusGO UKKv1pB05HTNPwfCBI8GpZmqMcvpNDFayKub+GE2/vzhUdcTSiQ5LPgPsUSeaCwkhLzS rxsA== X-Gm-Message-State: AOAM5322YXdb+pVkjDBwW6bzrfPRDdj+YqnoSXuCm2fw4tXbIMWV2I8Y s08ewwNilLcEVrmuyMC8wJaDEA== X-Google-Smtp-Source: ABdhPJwj39nbvqcxjQ3qJYf02shutUuLHTShNHQumM0YpHZBmNC9d6fipKt2VcXijVvLuUyKfIK3jQ== X-Received: by 2002:a5d:60c6:: with SMTP id x6mr6297523wrt.157.1601056622945; Fri, 25 Sep 2020 10:57:02 -0700 (PDT) Received: from chromium.org (216.131.76.34.bc.googleusercontent.com. [34.76.131.216]) by smtp.gmail.com with ESMTPSA id d19sm3508093wmd.0.2020.09.25.10.57.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 25 Sep 2020 10:57:02 -0700 (PDT) Date: Fri, 25 Sep 2020 17:57:00 +0000 From: Tomasz Figa To: Adrian Ratiu , Hans Verkuil Subject: Re: [PATCH v12 07/29] media: v4l2-mem2mem: add v4l2_m2m_suspend, v4l2_m2m_resume Message-ID: <20200925175700.GA3607091@chromium.org> References: <20200814071202.25067-1-xia.jiang@mediatek.com> <20200814071202.25067-9-xia.jiang@mediatek.com> <87lfgx4ube.fsf@collabora.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <87lfgx4ube.fsf@collabora.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200925_135705_841369_CDD678E6 X-CRM114-Status: GOOD ( 36.65 ) 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: Xia Jiang , linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , linux-mediatek@lists.infradead.org, Pi-Hsun Shih , Jerry-ch Chen , Hans Verkuil , kernel@collabora.com, linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org 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 On Fri, Sep 25, 2020 at 08:53:09PM +0300, Adrian Ratiu wrote: > Hi, > > I'm having a problem with this patch which landed in linux-next. > > On Fri, 14 Aug 2020, Xia Jiang wrote: > > 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); > > This line looks out of place in this commit and is causing a lot of warnings > (1 per frame). Any reason in particular why we need this? Right, it shouldn't be there. Looks like a rebase error. P.S. Please check your remail client settings as all the lines of your message seem to be just mixed together, as if someone removed the line breaks. Hans, is this something you could fix up or we need to revert and resend? Best regards, Tomasz > > [ 87.825061] ------------[ cut here ]------------ [ 87.829695] WARNING: > CPU: 0 PID: 0 at drivers/media/common/videobuf2/videobuf2-core.c:986 > vb2_buffer_done+0x208/0x2a0 [ 87.840302] Modules linked in: [ 87.843364] > CPU: 0 PID: 0 Comm: swapper/0 Tainted: G W 5.9.0-rc6-next-20200924+ > #472 [ 87.852407] Hardware name: NXP i.MX8MQ EVK (DT) [ 87.856942] > pstate: 20000085 (nzCv daIf -PAN -UAO -TCO BTYPE=--) [ 87.862953] pc : > vb2_buffer_done+0x208/0x2a0 [ 87.867224] lr : > v4l2_m2m_buf_done_and_job_finish+0x94/0x140 [ 87.872882] sp : > ffff80001183bd50 [ 87.876195] x29: ffff80001183bd50 x28: ffff8000115d1500 > [ 87.881512] x27: ffff80001128e018 x26: ffff00009fb4a828 [ 87.886828] > x25: ffff0000a4e13a08 x24: 0000000000000080 [ 87.892143] x23: > 0000000000000005 x22: ffff0000a253bc00 [ 87.897457] x21: ffff00009fb4aa98 > x20: ffff00009fb4a800 [ 87.902772] x19: ffff0000a24f0000 x18: > 0000000000000000 [ 87.908086] x17: 0000000000000000 x16: 0000000000000000 > [ 87.913400] x15: 0000000000000000 x14: 0000000000000500 [ 87.918714] > x13: 0000000000000003 x12: 0000000000000000 [ 87.924028] x11: > 0000000000000040 x10: ffff800011658520 [ 87.929340] x9 : ffff800010998464 > x8 : ffff0000a5800270 [ 87.934655] x7 : 0000000000000000 x6 : > ffff00009fb4aa20 [ 87.939969] x5 : ffff80001183bd10 x4 : 0000000000000000 > [ 87.945285] x3 : 0000000000000000 x2 : 0000000000000000 [ 87.950599] > x1 : 0000000000000005 x0 : 0000000000000005 [ 87.955914] Call trace: [ > 87.958364] vb2_buffer_done+0x208/0x2a0 [ 87.962288] > v4l2_m2m_buf_done_and_job_finish+0x94/0x140 [ 87.967601] > hantro_job_finish+0xa8/0xe0 [ 87.971524] hantro_irq_done+0x58/0x90 [ > 87.975275] imx8m_vpu_g1_irq+0x8c/0x160 [ 87.979201] > __handle_irq_event_percpu+0x68/0x2a0 [ 87.983905] > handle_irq_event_percpu+0x3c/0xa0 [ 87.988347] handle_irq_event+0x50/0xf0 > [ 87.992185] handle_fasteoi_irq+0xc0/0x180 [ 87.996283] > generic_handle_irq+0x38/0x50 [ 88.000296] __handle_domain_irq+0x6c/0xd0 [ > 88.004393] gic_handle_irq+0x60/0x12c [ 88.008143] el1_irq+0xbc/0x180 [ > 88.011287] arch_cpu_idle+0x1c/0x30 [ 88.014864] do_idle+0x220/0x270 [ > 88.018093] cpu_startup_entry+0x30/0x70 [ 88.022019] rest_init+0xe0/0xf0 [ > 88.025250] arch_call_rest_init+0x18/0x24 [ 88.029347] > start_kernel+0x7a4/0x7e0 [ 88.033013] CPU: 0 PID: 0 Comm: swapper/0 > Tainted: G W 5.9.0-rc6-next-20200924+ #472 [ 88.042056] > Hardware name: NXP i.MX8MQ EVK (DT) [ 88.046585] Call trace: [ 88.049034] > dump_backtrace+0x0/0x1b0 [ 88.052697] show_stack+0x20/0x70 [ 88.056014] > dump_stack+0xd0/0x12c [ 88.059418] __warn+0xfc/0x180 [ 88.062474] > report_bug+0xfc/0x170 [ 88.065875] bug_handler+0x28/0x70 [ 88.069276] > brk_handler+0x70/0xe0 [ 88.072681] do_debug_exception+0xcc/0x1e0 [ > 88.076776] el1_sync_handler+0xd8/0x140 [ 88.080697] el1_sync+0x80/0x100 [ > 88.083926] vb2_buffer_done+0x208/0x2a0 [ 88.087852] > v4l2_m2m_buf_done_and_job_finish+0x94/0x140 [ 88.093162] > hantro_job_finish+0xa8/0xe0 [ 88.097083] hantro_irq_done+0x58/0x90 [ > 88.100831] imx8m_vpu_g1_irq+0x8c/0x160 [ 88.104753] > __handle_irq_event_percpu+0x68/0x2a0 [ 88.109456] > handle_irq_event_percpu+0x3c/0xa0 [ 88.113899] handle_irq_event+0x50/0xf0 > [ 88.117734] handle_fasteoi_irq+0xc0/0x180 [ 88.121832] > generic_handle_irq+0x38/0x50 [ 88.125841] __handle_domain_irq+0x6c/0xd0 [ > 88.129937] gic_handle_irq+0x60/0x12c [ 88.133686] el1_irq+0xbc/0x180 [ > 88.136827] arch_cpu_idle+0x1c/0x30 [ 88.140403] do_idle+0x220/0x270 [ > 88.143630] cpu_startup_entry+0x30/0x70 [ 88.147553] rest_init+0xe0/0xf0 [ > 88.150782] arch_call_rest_init+0x18/0x24 [ 88.154879] > start_kernel+0x7a4/0x7e0 [ 88.158542] ---[ end trace 847145312866dff5 ]--- > > Regards, > Adrian > > > 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=-10.9 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,URIBL_BLOCKED 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 7C600C4363D for ; Fri, 25 Sep 2020 18:00: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 E3A722075F for ; Fri, 25 Sep 2020 18:00:27 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="X+M2QxKg"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="SEE5NXvM" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E3A722075F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=chromium.org 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:In-Reply-To:MIME-Version:References:Message-ID: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=0thJDKQ0nCIsOmrCgzFjSh0ppBdcP5HBD0TAlFZEKEU=; b=X+M2QxKg+U6r/RpOBftsCVscH e6kn2xUPYMmAzQw+77zJWfjFTAhKrhorJmrn3TlAbIeo1XYGQ1YnvmqFsic2W7n4oaAUiDqehClgb 2DeKqpG8Y+OySohvoEjOVJE47kPUDYyIDKr5PRRm9yDqd3ZI2nVopIPWAaS3olK5ZGuQYJY7isPEB S7oXiFyhz7WEeTroIN54VH31BpnhDsFVVjs9Vt22D/38OyavVTH9pV1ILrG1pMCNUAKILxQ0CF1zc m/JvpnZ1NOxbmVCrk9wD5FTJS3b8ivGNiUFfG4i26fCId2GuiuAYNgCHQ/JhKxU/HdO1aaP5xVV0U VQXnSg4VQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kLry1-0002sw-AF; Fri, 25 Sep 2020 17:57:09 +0000 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kLrxy-0002rk-CC for linux-arm-kernel@lists.infradead.org; Fri, 25 Sep 2020 17:57:07 +0000 Received: by mail-wr1-x442.google.com with SMTP id e16so4622577wrm.2 for ; Fri, 25 Sep 2020 10:57:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=wXX5XN82rdvL6bEh20v+gTPlXlkQDSNYlOsYCjW32/w=; b=SEE5NXvMVZ3oIioawsUQ3FL8hhb0V1ekMCb+hguGxej4nbA1nbpjWVOAr7fc5zUYc7 wqpXoLys+zqljC8E4wN7TNikaQjsE4bhmDgjjdLJ1jBrzpiyylbOdixHS7zurwQvYEo2 wKpQAS42NxmxUljeEltzMG6fP67Az275jJI8Q= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=wXX5XN82rdvL6bEh20v+gTPlXlkQDSNYlOsYCjW32/w=; b=CF2yG7pwWdGfcEwg+K08oOmbW3bvYt8mL17+XcJA1G+7QZRDh6HFleDVtZ2Qgu8YFV 00UAfSPF6zJppuYGTyNd/KoPnqRGI244TXjZcfG162QXFQ9NZJR+9wiTYKdEi7Z4YKOO ek1OwwaSU3ZkkJe7erYhWKt3x2RLobJZEC4x4oO43r2Ebu7kJY5Et6ow+OsaHiMFJIOf CxYlCIkKHZ4F/U+LRK3H1Xa5cSRNQ3FsaA6t4FI/qfukMeml6idJOf8XqhzMdh/if4e9 cJYfKpSNrzx/E1J0UVE0emf9tcyFzBtdSWc4gUX8DeGRT4KpZv6IVIYs/QUN+F8RFPX8 CI4Q== X-Gm-Message-State: AOAM530CtIY1u5LqnD1ps4DitE/gpioAsMMoJ2QaP9uN5h9rSEFB9p1n 8tvDvgkwSNPxXLnxGrMWalYyFw== X-Google-Smtp-Source: ABdhPJwj39nbvqcxjQ3qJYf02shutUuLHTShNHQumM0YpHZBmNC9d6fipKt2VcXijVvLuUyKfIK3jQ== X-Received: by 2002:a5d:60c6:: with SMTP id x6mr6297523wrt.157.1601056622945; Fri, 25 Sep 2020 10:57:02 -0700 (PDT) Received: from chromium.org (216.131.76.34.bc.googleusercontent.com. [34.76.131.216]) by smtp.gmail.com with ESMTPSA id d19sm3508093wmd.0.2020.09.25.10.57.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 25 Sep 2020 10:57:02 -0700 (PDT) Date: Fri, 25 Sep 2020 17:57:00 +0000 From: Tomasz Figa To: Adrian Ratiu , Hans Verkuil Subject: Re: [PATCH v12 07/29] media: v4l2-mem2mem: add v4l2_m2m_suspend, v4l2_m2m_resume Message-ID: <20200925175700.GA3607091@chromium.org> References: <20200814071202.25067-1-xia.jiang@mediatek.com> <20200814071202.25067-9-xia.jiang@mediatek.com> <87lfgx4ube.fsf@collabora.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <87lfgx4ube.fsf@collabora.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200925_135706_427493_00B03CE3 X-CRM114-Status: GOOD ( 38.04 ) 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: Xia Jiang , linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , linux-mediatek@lists.infradead.org, Pi-Hsun Shih , Jerry-ch Chen , Hans Verkuil , kernel@collabora.com, linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org 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 On Fri, Sep 25, 2020 at 08:53:09PM +0300, Adrian Ratiu wrote: > Hi, > > I'm having a problem with this patch which landed in linux-next. > > On Fri, 14 Aug 2020, Xia Jiang wrote: > > 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); > > This line looks out of place in this commit and is causing a lot of warnings > (1 per frame). Any reason in particular why we need this? Right, it shouldn't be there. Looks like a rebase error. P.S. Please check your remail client settings as all the lines of your message seem to be just mixed together, as if someone removed the line breaks. Hans, is this something you could fix up or we need to revert and resend? Best regards, Tomasz > > [ 87.825061] ------------[ cut here ]------------ [ 87.829695] WARNING: > CPU: 0 PID: 0 at drivers/media/common/videobuf2/videobuf2-core.c:986 > vb2_buffer_done+0x208/0x2a0 [ 87.840302] Modules linked in: [ 87.843364] > CPU: 0 PID: 0 Comm: swapper/0 Tainted: G W 5.9.0-rc6-next-20200924+ > #472 [ 87.852407] Hardware name: NXP i.MX8MQ EVK (DT) [ 87.856942] > pstate: 20000085 (nzCv daIf -PAN -UAO -TCO BTYPE=--) [ 87.862953] pc : > vb2_buffer_done+0x208/0x2a0 [ 87.867224] lr : > v4l2_m2m_buf_done_and_job_finish+0x94/0x140 [ 87.872882] sp : > ffff80001183bd50 [ 87.876195] x29: ffff80001183bd50 x28: ffff8000115d1500 > [ 87.881512] x27: ffff80001128e018 x26: ffff00009fb4a828 [ 87.886828] > x25: ffff0000a4e13a08 x24: 0000000000000080 [ 87.892143] x23: > 0000000000000005 x22: ffff0000a253bc00 [ 87.897457] x21: ffff00009fb4aa98 > x20: ffff00009fb4a800 [ 87.902772] x19: ffff0000a24f0000 x18: > 0000000000000000 [ 87.908086] x17: 0000000000000000 x16: 0000000000000000 > [ 87.913400] x15: 0000000000000000 x14: 0000000000000500 [ 87.918714] > x13: 0000000000000003 x12: 0000000000000000 [ 87.924028] x11: > 0000000000000040 x10: ffff800011658520 [ 87.929340] x9 : ffff800010998464 > x8 : ffff0000a5800270 [ 87.934655] x7 : 0000000000000000 x6 : > ffff00009fb4aa20 [ 87.939969] x5 : ffff80001183bd10 x4 : 0000000000000000 > [ 87.945285] x3 : 0000000000000000 x2 : 0000000000000000 [ 87.950599] > x1 : 0000000000000005 x0 : 0000000000000005 [ 87.955914] Call trace: [ > 87.958364] vb2_buffer_done+0x208/0x2a0 [ 87.962288] > v4l2_m2m_buf_done_and_job_finish+0x94/0x140 [ 87.967601] > hantro_job_finish+0xa8/0xe0 [ 87.971524] hantro_irq_done+0x58/0x90 [ > 87.975275] imx8m_vpu_g1_irq+0x8c/0x160 [ 87.979201] > __handle_irq_event_percpu+0x68/0x2a0 [ 87.983905] > handle_irq_event_percpu+0x3c/0xa0 [ 87.988347] handle_irq_event+0x50/0xf0 > [ 87.992185] handle_fasteoi_irq+0xc0/0x180 [ 87.996283] > generic_handle_irq+0x38/0x50 [ 88.000296] __handle_domain_irq+0x6c/0xd0 [ > 88.004393] gic_handle_irq+0x60/0x12c [ 88.008143] el1_irq+0xbc/0x180 [ > 88.011287] arch_cpu_idle+0x1c/0x30 [ 88.014864] do_idle+0x220/0x270 [ > 88.018093] cpu_startup_entry+0x30/0x70 [ 88.022019] rest_init+0xe0/0xf0 [ > 88.025250] arch_call_rest_init+0x18/0x24 [ 88.029347] > start_kernel+0x7a4/0x7e0 [ 88.033013] CPU: 0 PID: 0 Comm: swapper/0 > Tainted: G W 5.9.0-rc6-next-20200924+ #472 [ 88.042056] > Hardware name: NXP i.MX8MQ EVK (DT) [ 88.046585] Call trace: [ 88.049034] > dump_backtrace+0x0/0x1b0 [ 88.052697] show_stack+0x20/0x70 [ 88.056014] > dump_stack+0xd0/0x12c [ 88.059418] __warn+0xfc/0x180 [ 88.062474] > report_bug+0xfc/0x170 [ 88.065875] bug_handler+0x28/0x70 [ 88.069276] > brk_handler+0x70/0xe0 [ 88.072681] do_debug_exception+0xcc/0x1e0 [ > 88.076776] el1_sync_handler+0xd8/0x140 [ 88.080697] el1_sync+0x80/0x100 [ > 88.083926] vb2_buffer_done+0x208/0x2a0 [ 88.087852] > v4l2_m2m_buf_done_and_job_finish+0x94/0x140 [ 88.093162] > hantro_job_finish+0xa8/0xe0 [ 88.097083] hantro_irq_done+0x58/0x90 [ > 88.100831] imx8m_vpu_g1_irq+0x8c/0x160 [ 88.104753] > __handle_irq_event_percpu+0x68/0x2a0 [ 88.109456] > handle_irq_event_percpu+0x3c/0xa0 [ 88.113899] handle_irq_event+0x50/0xf0 > [ 88.117734] handle_fasteoi_irq+0xc0/0x180 [ 88.121832] > generic_handle_irq+0x38/0x50 [ 88.125841] __handle_domain_irq+0x6c/0xd0 [ > 88.129937] gic_handle_irq+0x60/0x12c [ 88.133686] el1_irq+0xbc/0x180 [ > 88.136827] arch_cpu_idle+0x1c/0x30 [ 88.140403] do_idle+0x220/0x270 [ > 88.143630] cpu_startup_entry+0x30/0x70 [ 88.147553] rest_init+0xe0/0xf0 [ > 88.150782] arch_call_rest_init+0x18/0x24 [ 88.154879] > start_kernel+0x7a4/0x7e0 [ 88.158542] ---[ end trace 847145312866dff5 ]--- > > Regards, > Adrian > > > 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.1 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED 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 546B2C4363D for ; Fri, 25 Sep 2020 17:57:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C77D7235FD for ; Fri, 25 Sep 2020 17:57:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="SEE5NXvM" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727751AbgIYR5F (ORCPT ); Fri, 25 Sep 2020 13:57:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57918 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727495AbgIYR5E (ORCPT ); Fri, 25 Sep 2020 13:57:04 -0400 Received: from mail-wr1-x441.google.com (mail-wr1-x441.google.com [IPv6:2a00:1450:4864:20::441]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6EC72C0613D3 for ; Fri, 25 Sep 2020 10:57:04 -0700 (PDT) Received: by mail-wr1-x441.google.com with SMTP id k15so4550217wrn.10 for ; Fri, 25 Sep 2020 10:57:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=wXX5XN82rdvL6bEh20v+gTPlXlkQDSNYlOsYCjW32/w=; b=SEE5NXvMVZ3oIioawsUQ3FL8hhb0V1ekMCb+hguGxej4nbA1nbpjWVOAr7fc5zUYc7 wqpXoLys+zqljC8E4wN7TNikaQjsE4bhmDgjjdLJ1jBrzpiyylbOdixHS7zurwQvYEo2 wKpQAS42NxmxUljeEltzMG6fP67Az275jJI8Q= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=wXX5XN82rdvL6bEh20v+gTPlXlkQDSNYlOsYCjW32/w=; b=CBmGihqNPSq7m4EwKY7TxjjEdCK3+fNN67fb721Wg1kQZLNthq5YdSCE/X2EGVB3c4 mZNquEdLrXQN8qn9E54Ar+Zxu/+ca1VvXdRSl0cm3xb9KNFzmwomgx5C5FdXwajb51Cf TsH66oFjvfaImt8WH8ln/hjwJemEu57oWnaMEx2jo+WzLwB3V+Jxwo68KBitU6+f0EUV 4VpTpsRjKDIufsnmvdwLEnvHhqIzjHCYpuxiR1EoUeZqSxYGSeVqBEY8KggHcpMdfxmX RFRZE2kv0+CYXQEsDU2ZX0UWamGEIkQPacm7b5a6lBLT6rEBPe2T2K4T7lwtIXmy2Uc+ lIEQ== X-Gm-Message-State: AOAM532BwBMMGd9eUBeYTlFFuVe0Tm2agWhhheKa4xQlT+aB6q42beNa dO8N4hP9wVkC1qMzAiI6+OTdHA== X-Google-Smtp-Source: ABdhPJwj39nbvqcxjQ3qJYf02shutUuLHTShNHQumM0YpHZBmNC9d6fipKt2VcXijVvLuUyKfIK3jQ== X-Received: by 2002:a5d:60c6:: with SMTP id x6mr6297523wrt.157.1601056622945; Fri, 25 Sep 2020 10:57:02 -0700 (PDT) Received: from chromium.org (216.131.76.34.bc.googleusercontent.com. [34.76.131.216]) by smtp.gmail.com with ESMTPSA id d19sm3508093wmd.0.2020.09.25.10.57.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 25 Sep 2020 10:57:02 -0700 (PDT) Date: Fri, 25 Sep 2020 17:57:00 +0000 From: Tomasz Figa To: Adrian Ratiu , Hans Verkuil Cc: Xia Jiang , Hans Verkuil , Mauro Carvalho Chehab , kernel@collabora.com, linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, Pi-Hsun Shih , Jerry-ch Chen Subject: Re: [PATCH v12 07/29] media: v4l2-mem2mem: add v4l2_m2m_suspend, v4l2_m2m_resume Message-ID: <20200925175700.GA3607091@chromium.org> References: <20200814071202.25067-1-xia.jiang@mediatek.com> <20200814071202.25067-9-xia.jiang@mediatek.com> <87lfgx4ube.fsf@collabora.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87lfgx4ube.fsf@collabora.com> Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org On Fri, Sep 25, 2020 at 08:53:09PM +0300, Adrian Ratiu wrote: > Hi, > > I'm having a problem with this patch which landed in linux-next. > > On Fri, 14 Aug 2020, Xia Jiang wrote: > > 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); > > This line looks out of place in this commit and is causing a lot of warnings > (1 per frame). Any reason in particular why we need this? Right, it shouldn't be there. Looks like a rebase error. P.S. Please check your remail client settings as all the lines of your message seem to be just mixed together, as if someone removed the line breaks. Hans, is this something you could fix up or we need to revert and resend? Best regards, Tomasz > > [ 87.825061] ------------[ cut here ]------------ [ 87.829695] WARNING: > CPU: 0 PID: 0 at drivers/media/common/videobuf2/videobuf2-core.c:986 > vb2_buffer_done+0x208/0x2a0 [ 87.840302] Modules linked in: [ 87.843364] > CPU: 0 PID: 0 Comm: swapper/0 Tainted: G W 5.9.0-rc6-next-20200924+ > #472 [ 87.852407] Hardware name: NXP i.MX8MQ EVK (DT) [ 87.856942] > pstate: 20000085 (nzCv daIf -PAN -UAO -TCO BTYPE=--) [ 87.862953] pc : > vb2_buffer_done+0x208/0x2a0 [ 87.867224] lr : > v4l2_m2m_buf_done_and_job_finish+0x94/0x140 [ 87.872882] sp : > ffff80001183bd50 [ 87.876195] x29: ffff80001183bd50 x28: ffff8000115d1500 > [ 87.881512] x27: ffff80001128e018 x26: ffff00009fb4a828 [ 87.886828] > x25: ffff0000a4e13a08 x24: 0000000000000080 [ 87.892143] x23: > 0000000000000005 x22: ffff0000a253bc00 [ 87.897457] x21: ffff00009fb4aa98 > x20: ffff00009fb4a800 [ 87.902772] x19: ffff0000a24f0000 x18: > 0000000000000000 [ 87.908086] x17: 0000000000000000 x16: 0000000000000000 > [ 87.913400] x15: 0000000000000000 x14: 0000000000000500 [ 87.918714] > x13: 0000000000000003 x12: 0000000000000000 [ 87.924028] x11: > 0000000000000040 x10: ffff800011658520 [ 87.929340] x9 : ffff800010998464 > x8 : ffff0000a5800270 [ 87.934655] x7 : 0000000000000000 x6 : > ffff00009fb4aa20 [ 87.939969] x5 : ffff80001183bd10 x4 : 0000000000000000 > [ 87.945285] x3 : 0000000000000000 x2 : 0000000000000000 [ 87.950599] > x1 : 0000000000000005 x0 : 0000000000000005 [ 87.955914] Call trace: [ > 87.958364] vb2_buffer_done+0x208/0x2a0 [ 87.962288] > v4l2_m2m_buf_done_and_job_finish+0x94/0x140 [ 87.967601] > hantro_job_finish+0xa8/0xe0 [ 87.971524] hantro_irq_done+0x58/0x90 [ > 87.975275] imx8m_vpu_g1_irq+0x8c/0x160 [ 87.979201] > __handle_irq_event_percpu+0x68/0x2a0 [ 87.983905] > handle_irq_event_percpu+0x3c/0xa0 [ 87.988347] handle_irq_event+0x50/0xf0 > [ 87.992185] handle_fasteoi_irq+0xc0/0x180 [ 87.996283] > generic_handle_irq+0x38/0x50 [ 88.000296] __handle_domain_irq+0x6c/0xd0 [ > 88.004393] gic_handle_irq+0x60/0x12c [ 88.008143] el1_irq+0xbc/0x180 [ > 88.011287] arch_cpu_idle+0x1c/0x30 [ 88.014864] do_idle+0x220/0x270 [ > 88.018093] cpu_startup_entry+0x30/0x70 [ 88.022019] rest_init+0xe0/0xf0 [ > 88.025250] arch_call_rest_init+0x18/0x24 [ 88.029347] > start_kernel+0x7a4/0x7e0 [ 88.033013] CPU: 0 PID: 0 Comm: swapper/0 > Tainted: G W 5.9.0-rc6-next-20200924+ #472 [ 88.042056] > Hardware name: NXP i.MX8MQ EVK (DT) [ 88.046585] Call trace: [ 88.049034] > dump_backtrace+0x0/0x1b0 [ 88.052697] show_stack+0x20/0x70 [ 88.056014] > dump_stack+0xd0/0x12c [ 88.059418] __warn+0xfc/0x180 [ 88.062474] > report_bug+0xfc/0x170 [ 88.065875] bug_handler+0x28/0x70 [ 88.069276] > brk_handler+0x70/0xe0 [ 88.072681] do_debug_exception+0xcc/0x1e0 [ > 88.076776] el1_sync_handler+0xd8/0x140 [ 88.080697] el1_sync+0x80/0x100 [ > 88.083926] vb2_buffer_done+0x208/0x2a0 [ 88.087852] > v4l2_m2m_buf_done_and_job_finish+0x94/0x140 [ 88.093162] > hantro_job_finish+0xa8/0xe0 [ 88.097083] hantro_irq_done+0x58/0x90 [ > 88.100831] imx8m_vpu_g1_irq+0x8c/0x160 [ 88.104753] > __handle_irq_event_percpu+0x68/0x2a0 [ 88.109456] > handle_irq_event_percpu+0x3c/0xa0 [ 88.113899] handle_irq_event+0x50/0xf0 > [ 88.117734] handle_fasteoi_irq+0xc0/0x180 [ 88.121832] > generic_handle_irq+0x38/0x50 [ 88.125841] __handle_domain_irq+0x6c/0xd0 [ > 88.129937] gic_handle_irq+0x60/0x12c [ 88.133686] el1_irq+0xbc/0x180 [ > 88.136827] arch_cpu_idle+0x1c/0x30 [ 88.140403] do_idle+0x220/0x270 [ > 88.143630] cpu_startup_entry+0x30/0x70 [ 88.147553] rest_init+0xe0/0xf0 [ > 88.150782] arch_call_rest_init+0x18/0x24 [ 88.154879] > start_kernel+0x7a4/0x7e0 [ 88.158542] ---[ end trace 847145312866dff5 ]--- > > Regards, > Adrian > > > 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