From patchwork Mon Oct 17 19:25:59 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrey Utkin X-Patchwork-Id: 37639 Received: from mail.tu-berlin.de ([130.149.7.33]) by www.linuxtv.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bwCcF-0006Xi-8r; Mon, 17 Oct 2016 18:26:27 +0000 X-tubIT-Incoming-IP: 209.132.180.67 Received: from vger.kernel.org ([209.132.180.67]) by mail.tu-berlin.de (exim-4.84_2/mailfrontend-5) with esmtp id 1bwCcC-00064x-8l; Mon, 17 Oct 2016 20:26:26 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757555AbcJQS0T (ORCPT + 1 other); Mon, 17 Oct 2016 14:26:19 -0400 Received: from out1-smtp.messagingengine.com ([66.111.4.25]:33109 "EHLO out1-smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757497AbcJQS0S (ORCPT ); Mon, 17 Oct 2016 14:26:18 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id 5EFD120921; Mon, 17 Oct 2016 14:26:17 -0400 (EDT) Received: from frontend1 ([10.202.2.160]) by compute7.internal (MEProxy); Mon, 17 Oct 2016 14:26:17 -0400 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=fastmail.com; h=cc :date:from:message-id:subject:to:x-sasl-enc:x-sasl-enc; s= mesmtp; bh=dk8nBuo3dfmYZpPAh1XKg2f6z8o=; b=Uksat3tDPRHUpQZwMD7Ok pk051S6b3t2iBSNssgAVC8TNm0drwKLrdCgumD2VcRrfOE8QOFC9187WqHozT96A vy91MEUTo11dw8g3QXdsyKHt03bCK0bWNYI5BUfBEVtd1JGnFE42TFQc7BW5KZEV Tsng7ZepOmLYCfaz/K7Zxk= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=cc:date:from:message-id:subject:to :x-sasl-enc:x-sasl-enc; s=smtpout; bh=dk8nBuo3dfmYZpPAh1XKg2f6z8 o=; b=II3zBnUfrMM5YWH5e49vI/EX8WmD4F53F4Kal3EKizBO9FKdGGLwGmKO1G jkjn6q8m30G6dMCmxu/WQOBek8LA7hgXtjX66Pl7KBQUqkEj+39tHisOSL5Is8o5 yh36Y6IAfh7fFjOFqCS/1zQhh3ViLug5aFwrhgL4IKQ/QSpCE= X-Sasl-enc: RF8hJvfSNiKi6He/Q6rsedaDnhmmEOPtYRPcJG9sHByG 1476728776 Received: from localhost.localdomain (unknown [195.171.9.194]) by mail.messagingengine.com (Postfix) with ESMTPA id 6831CF29C9; Mon, 17 Oct 2016 14:26:16 -0400 (EDT) From: Andrey Utkin To: hverkuil@xs4all.nl, mchehab@kernel.org Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, pmhahn+video@pmhahn.de, Andrey Utkin Subject: [PATCH v1] media: saa7146: Fix for "[BUG] process stuck when closing saa7146 [dvb_ttpci]" Date: Mon, 17 Oct 2016 20:25:59 +0100 Message-Id: <20161017192559.2918-1-andrey_utkin@fastmail.com> X-Mailer: git-send-email 2.10.1 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-PMX-Version: 6.0.0.2142326, Antispam-Engine: 2.7.2.2107409, Antispam-Data: 2016.10.17.181816 X-PMX-Spam: Gauge=IIIIIIII, Probability=8%, Report=' MULTIPLE_RCPTS 0.1, HTML_00_01 0.05, HTML_00_10 0.05, BODY_SIZE_3000_3999 0, BODY_SIZE_5000_LESS 0, BODY_SIZE_7000_LESS 0, DKIM_SIGNATURE 0, NO_URI_HTTPS 0, SINGLE_URI_IN_BODY 0, URI_ENDS_IN_HTML 0, __ANY_URI 0, __CC_NAME 0, __CC_NAME_DIFF_FROM_ACC 0, __CC_REAL_NAMES 0, __CP_MEDIA_BODY 0, __CP_URI_IN_BODY 0, __FRAUD_BODY_WEBMAIL 0, __FRAUD_WEBMAIL 0, __FRAUD_WEBMAIL_FROM 0, __FROM_DOMAIN_IN_ANY_CC2 0, __FROM_DOMAIN_IN_RCPT 0, __HAS_CC_HDR 0, __HAS_FROM 0, __HAS_MSGID 0, __HAS_X_MAILER 0, __HAS_X_MAILING_LIST 0, __MIME_TEXT_ONLY 0, __MIME_TEXT_P 0, __MIME_TEXT_P1 0, __MULTIPLE_RCPTS_CC_X2 0, __PHISH_SPEAR_STRUCTURE_1 0, __SANE_MSGID 0, __SINGLE_URI_TEXT 0, __TO_MALFORMED_2 0, __TO_NO_NAME 0, __URI_IN_BODY 0, __URI_NO_WWW 0, __URI_NS , __URI_WITH_PATH 0' Release queued DMA buffers when ending streaming, so that videobuf_waiton() doesn't block forever. As reported, this fixes avoids occasional lockup of process reading from video device, which manifests in such log: INFO: task ffmpeg:9864 blocked for more than 120 seconds. Tainted: P O 4.6.7 #3 "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. ffmpeg D ffff880177cc7b00 0 9864 1 0x00000000 ffff880177cc7b00 0000000000000202 0000000000000202 ffffffff8180b4c0 ffff88019d79e4c0 ffffffff81064050 ffff880177cc7ae0 ffff880177cc8000 ffff880177cc7b18 ffff8801fd41d648 ffff8802307acca0 ffff8802307acc70 Call Trace: [] ? preempt_count_add+0x89/0xab [] schedule+0x86/0x9e [] ? schedule+0x86/0x9e [] videobuf_waiton+0x131/0x15e [videobuf_core] [] ? wait_woken+0x6d/0x6d [] saa7146_dma_free+0x39/0x5b [saa7146_vv] [] buffer_release+0x2a/0x3e [saa7146_vv] [] videobuf_vm_close+0xd8/0x103 [videobuf_dma_sg] [] remove_vma+0x25/0x4d [] exit_mmap+0xce/0xf7 [] mmput+0x4e/0xe2 [] do_exit+0x372/0x920 [] do_group_exit+0x3c/0x98 [] get_signal+0x4e8/0x56e [] ? task_dead_fair+0xd/0xf [] do_signal+0x23/0x521 [] ? _raw_spin_unlock_irqrestore+0x13/0x25 [] ? hrtimer_try_to_cancel+0xd7/0x104 [] ? ktime_get+0x4c/0xa1 [] ? update_rmtp+0x46/0x5b [] ? hrtimer_nanosleep+0xe4/0x10e [] ? hrtimer_init+0xeb/0xeb [] exit_to_usermode_loop+0x4f/0x93 [] syscall_return_slowpath+0x3b/0x46 [] entry_SYSCALL_64_fastpath+0x8d/0x8f Reported-by: Philipp Matthias Hahn Tested-by: Philipp Matthias Hahn Signed-off-by: Andrey Utkin --- Dear maintainers, Please check whether the used buffer status (DONE) is correct for this situation. I am in doubt, shouldn't it be VIDEOBUF_ERROR? However, ERROR wasn't tested by Philipp and I guess it may indicate some undesired failure status to application. [PATCH v1] prefix is used to distinguish it from old letter with subj "[PATCH] ..." which was a quick reply to Philipp's request and wasn't signed off and otherwise properly formatted for submission. drivers/media/common/saa7146/saa7146_video.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/media/common/saa7146/saa7146_video.c b/drivers/media/common/saa7146/saa7146_video.c index ea2f3bf..e034bcf 100644 --- a/drivers/media/common/saa7146/saa7146_video.c +++ b/drivers/media/common/saa7146/saa7146_video.c @@ -390,6 +390,7 @@ static int video_end(struct saa7146_fh *fh, struct file *file) { struct saa7146_dev *dev = fh->dev; struct saa7146_vv *vv = dev->vv_data; + struct saa7146_dmaqueue *q = &vv->video_dmaq; struct saa7146_format *fmt = NULL; unsigned long flags; unsigned int resource; @@ -428,6 +429,9 @@ static int video_end(struct saa7146_fh *fh, struct file *file) /* shut down all used video dma transfers */ saa7146_write(dev, MC1, dmas); + if (q->curr) + saa7146_buffer_finish(dev, q, VIDEOBUF_DONE); + spin_unlock_irqrestore(&dev->slock, flags); vv->video_fh = NULL;