From patchwork Mon Jul 10 08:40:13 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akihiro TSUKADA X-Patchwork-Id: 42388 Received: from mail.tu-berlin.de ([130.149.7.33]) by www.linuxtv.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dUUGl-00035Y-Ft; Mon, 10 Jul 2017 08:42:15 +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.89/mailfrontend-8) with esmtp id 1dUUGj-0004Qf-kd; Mon, 10 Jul 2017 10:42:15 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753628AbdGJImL (ORCPT + 1 other); Mon, 10 Jul 2017 04:42:11 -0400 Received: from mail-it0-f66.google.com ([209.85.214.66]:35019 "EHLO mail-it0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753584AbdGJImL (ORCPT ); Mon, 10 Jul 2017 04:42:11 -0400 Received: by mail-it0-f66.google.com with SMTP id v193so12182015itc.2 for ; Mon, 10 Jul 2017 01:42:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=KuPNzD0u+CMzB7862NBAaLDXD39TKf6UgCCN273kw8M=; b=pkKoArON8qgNy/oPqYOTR7lXeEMsWbvFP2TghSNoJCFLB/yAzw6FSkynapcSYr1rK2 4sGGYuYC7AXcC5gOjr5SDra6Wmru486AtgwYGrqRCaFOesOpnW+pkaIyZJJCrx+OjDpJ 2bM1Lzh/gZEdVfpQ6GxpnVgqDS3//DVAumEPk0r/+jgQT23A8OMFgFe6yw1ENgQATMER DbckSXddDDGdZ15KSZG8zafTD5nhC3JA1NNgi+Fm5PXB9DABn+ye5exWCcS9/YvABPGU oD305TDEeigRQcEJfa+UKA7csy1h5paNmFBUUiMSLWws9PpLNjiJD1eKxzE/U5dgdwr9 n+kQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=KuPNzD0u+CMzB7862NBAaLDXD39TKf6UgCCN273kw8M=; b=Axw67CJ9sjAKsRuDlxz+bzNqoo9HMp+N6i6EWRqdC4Dnq4N5d5TqRS45fPJJU8UQbZ 7vzEVgwgS7RJwt5TDesBSWBIaQ2e26BraOiREhVRaneS3Zdz3finRjvNMov++iR1D9nY psB7vwjWffuDk7YpIzxJjxJr3cB3s12za2KH4D/6iSOBwHuptE3O2ehrPHfw9Vfjyns2 oQCpj/Uyd94HG4HZpYY3dOdxPezi4oR0pwNFGOXTdohhJGJa7t1BVnc4haLu0HQZKDAj KSVDxSQfoo+dDODrwVgfCRzaLrAEGxCC0G8x+5CdPBN0Orkye+EQLrlShtowSpgHSZVS Jl9Q== X-Gm-Message-State: AIVw1107TD8uHGQnEgMBkWfpM5IVz3e9V/Lrzx8+OORj9bWQGjOobe61 MvjU5gek5UxVeoeP X-Received: by 10.36.0.70 with SMTP id 67mr10119718ita.114.1499676129832; Mon, 10 Jul 2017 01:42:09 -0700 (PDT) Received: from localhost.localdomain (softbank219203027033.bbtec.net. [219.203.27.33]) by smtp.googlemail.com with ESMTPSA id j21sm3225403itb.15.2017.07.10.01.42.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 10 Jul 2017 01:42:09 -0700 (PDT) From: tskd08@gmail.com To: linux-media@vger.kernel.org Cc: mchehab@s-opensource.com, Akihiro Tsukada Subject: [PATCH] media/dvb: earth-pt3: fix hang-up in a rare case Date: Mon, 10 Jul 2017 17:40:13 +0900 Message-Id: <20170710084013.4321-1-tskd08@gmail.com> X-Mailer: git-send-email 2.13.2 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: 2017.7.10.83316 X-PMX-Spam: Gauge=IIIIIIIII, Probability=9%, Report=' FORGED_FROM_GMAIL 0.1, MULTIPLE_RCPTS 0.1, HTML_00_01 0.05, HTML_00_10 0.05, BODYTEXTP_SIZE_3000_LESS 0, BODY_SIZE_1900_1999 0, BODY_SIZE_2000_LESS 0, BODY_SIZE_5000_LESS 0, BODY_SIZE_7000_LESS 0, DKIM_SIGNATURE 0, NO_REAL_NAME 0, NO_URI_HTTPS 0, __ANY_URI 0, __CC_NAME 0, __CC_NAME_DIFF_FROM_ACC 0, __CC_REAL_NAMES 0, __FRAUD_BODY_WEBMAIL 0, __FRAUD_WEBMAIL 0, __FRAUD_WEBMAIL_FROM 0, __FROM_GMAIL 0, __HAS_CC_HDR 0, __HAS_FROM 0, __HAS_LIST_ID 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, __NO_HTML_TAG_RAW 0, __PHISH_SPEAR_STRUCTURE_1 0, __SANE_MSGID 0, __SUBJ_ALPHA_END 0, __TO_MALFORMED_2 0, __TO_NO_NAME 0, __URI_NO_WWW 0, __URI_NS , __YOUTUBE_RCVD 0' From: Akihiro Tsukada When a user starts and stops filtering at a demux device too quickly in a very short interval, the user process hangs in uninterruptible sleep, due to an inconsistency of kthread status in the driver. The kthread can be stopped before it starts running its thread function, but the invocation status was partly managed in the kthread function, which resulted in a double kthread_stop() of one kthread. Signed-off-by: Akihiro Tsukada --- drivers/media/pci/pt3/pt3.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/drivers/media/pci/pt3/pt3.c b/drivers/media/pci/pt3/pt3.c index e8b5d099215..34044a45fec 100644 --- a/drivers/media/pci/pt3/pt3.c +++ b/drivers/media/pci/pt3/pt3.c @@ -472,7 +472,6 @@ static int pt3_fetch_thread(void *data) } dev_dbg(adap->dvb_adap.device, "PT3: [%s] exited\n", adap->thread->comm); - adap->thread = NULL; return 0; } @@ -486,6 +485,7 @@ static int pt3_start_streaming(struct pt3_adapter *adap) if (IS_ERR(thread)) { int ret = PTR_ERR(thread); + adap->thread = NULL; dev_warn(adap->dvb_adap.device, "PT3 (adap:%d, dmx:%d): failed to start kthread\n", adap->dvb_adap.num, adap->dmxdev.dvbdev->id); @@ -508,6 +508,7 @@ static int pt3_stop_streaming(struct pt3_adapter *adap) /* kill the fetching thread */ ret = kthread_stop(adap->thread); + adap->thread = NULL; return ret; } @@ -520,14 +521,8 @@ static int pt3_start_feed(struct dvb_demux_feed *feed) adap = container_of(feed->demux, struct pt3_adapter, demux); adap->num_feeds++; - if (adap->thread) + if (adap->num_feeds > 1) return 0; - if (adap->num_feeds != 1) { - dev_warn(adap->dvb_adap.device, - "%s: unmatched start/stop_feed in adap:%i/dmx:%i\n", - __func__, adap->dvb_adap.num, adap->dmxdev.dvbdev->id); - adap->num_feeds = 1; - } return pt3_start_streaming(adap);