From patchwork Tue Jul 25 19:29:12 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 108671 Delivered-To: patch@linaro.org Received: by 10.140.101.44 with SMTP id t41csp939377qge; Tue, 25 Jul 2017 12:29:42 -0700 (PDT) X-Received: by 10.99.45.194 with SMTP id t185mr19918945pgt.388.1501010982502; Tue, 25 Jul 2017 12:29:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1501010982; cv=none; d=google.com; s=arc-20160816; b=N0AP1SnpwnU+nFWmssv85TIJUtkd4BtjprkiV9peJ6FE3yZzbMSKN+eV1PDQubiRF9 P9zyJbjq8/mCW0bDcxiiewjNSAFw/CvKuODutCctDOuwW6jP/B8rQD1xQldpwGfUypJL sOUpqR2fR5qEUk/K0W4EAM2ohxX+u4GOxIs0tYexlygV8N4hwhDM+QqUVau1Hywc7lO5 iqG9LJm76DqwJxVOEudG8Cm9Alj82UIBZbZkWEnGFwGStZic1fFPA/nZajr72LGEUvJS u2gEmZbAMZm3hWocU1sKvyj3/B8CHKoyR4ElfK/vruR2dRxpejCI3tDTkMk+OiryAD/r vAUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=L4m0NJYVqJLPWmcSo/mWibL+bKT6vlu62WHNznltx98=; b=SJAmjwhtnDBrZn9EycyBN7jbHI6La/IhoW9d1dkRKNczYtqNAZgBP0YClw0C1LDeC7 lWiSyjY/mYJhYxootQOKLzgw6C8gyANBmgDevHtiNhapKJOGvPaSRe+OAY/5HjsOblf0 3+mjtjvsYabInvQnfgXv0+q5AYyTyPrXSPHR2anJrFu/ssdqJh6ZwvbxUPjEwWO9BbWM d8m7I31fj76HtMoiWA+xTACBG8GnjgYq9dhp/m77aE9ny0jn+UAiEc/0k4vG3bNy7i51 LjOXBkN+4CM3cHAraak4rCHjOuIPtG3O2RKu2duLiurlcp5JfWAqEroUz1ixcU/TD3QJ rJbQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.b=e/yl7J7G; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o129si8605553pga.543.2017.07.25.12.29.42; Tue, 25 Jul 2017 12:29:42 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.b=e/yl7J7G; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754202AbdGYT3l (ORCPT + 6 others); Tue, 25 Jul 2017 15:29:41 -0400 Received: from mail-pg0-f53.google.com ([74.125.83.53]:35189 "EHLO mail-pg0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754362AbdGYT3i (ORCPT ); Tue, 25 Jul 2017 15:29:38 -0400 Received: by mail-pg0-f53.google.com with SMTP id v190so74108899pgv.2 for ; Tue, 25 Jul 2017 12:29:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=L4m0NJYVqJLPWmcSo/mWibL+bKT6vlu62WHNznltx98=; b=e/yl7J7G+7FIWfT5XP9z/Ew01dEVJEHpCypJGG+aiXUJhTc0+dzb37b3a0nAvmjAwC qdMTOfcQMWStgF8AtTg+FUkNSlgDBz8YUrxzOB3QCjd/KsFGnpsRzehIZxZO8DkDsC2Y boxtCsOjq0TcT97/C3xQ36ky/1gGWEMGyKBMA= 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:in-reply-to :references; bh=L4m0NJYVqJLPWmcSo/mWibL+bKT6vlu62WHNznltx98=; b=bAUGV626KolBgOJF6zxSI4ger6tb4BZgJpvXAdB69aLA5VSeQibrgZlFiSnrc8RTU5 7Tofs2IP6F7I4rA3pFJ9aG1M2y9C0fcjGYeARYFWxRJNBkh5nNCymVo7b3ZB+e2U0c5x hau7ELXmr8OmfcEx+IKndXUIXkl+HXxXUDc8v6wWSklu2LtQADQVhDPDu7aQRn4gET1V HGnvyv1/tQ0h8r+q3nBJkebCKNpcKnFmujtRSt1BEtbVjzIIHQ1ula/TMDTASpc3MaDC GSpt2nmX227GBAwB+kppzHF7+3XWRmqu5wxIKaoLasOJX0yJtUu0B+ewXBmWwwiexSmL SjYg== X-Gm-Message-State: AIVw112HoMgAWGOr6wB+XUO5+GTt4pC4qZXMu7jRVJgOjKiM0Jm81mKb Utq31Ihw73MA8Upj X-Received: by 10.84.236.4 with SMTP id q4mr17498211plk.423.1501010978283; Tue, 25 Jul 2017 12:29:38 -0700 (PDT) Received: from localhost.localdomain ([106.51.135.235]) by smtp.gmail.com with ESMTPSA id 85sm30371425pfr.90.2017.07.25.12.29.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 25 Jul 2017 12:29:37 -0700 (PDT) From: Amit Pundir To: Greg KH Cc: Stable , Lior David , Maya Erez , Kalle Valo Subject: [PATCH for-4.9 06/10] wil6210: fix deadlock when using fw_no_recovery option Date: Wed, 26 Jul 2017 00:59:12 +0530 Message-Id: <1501010956-27944-7-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1501010956-27944-1-git-send-email-amit.pundir@linaro.org> References: <1501010956-27944-1-git-send-email-amit.pundir@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Lior David commit dfb5b098e0f40b68aa07f2ec55f4dd762efefbfa upstream. When FW crashes with no_fw_recovery option, driver waits for manual recovery with wil->mutex held, this can easily create deadlocks. Fix the problem by moving the wait outside the lock. Signed-off-by: Lior David Signed-off-by: Maya Erez Signed-off-by: Kalle Valo Signed-off-by: Amit Pundir --- drivers/net/wireless/ath/wil6210/main.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) -- 2.7.4 diff --git a/drivers/net/wireless/ath/wil6210/main.c b/drivers/net/wireless/ath/wil6210/main.c index e7130b54d1d8..24b07a0ce6f7 100644 --- a/drivers/net/wireless/ath/wil6210/main.c +++ b/drivers/net/wireless/ath/wil6210/main.c @@ -384,18 +384,19 @@ static void wil_fw_error_worker(struct work_struct *work) wil->last_fw_recovery = jiffies; + wil_info(wil, "fw error recovery requested (try %d)...\n", + wil->recovery_count); + if (!no_fw_recovery) + wil->recovery_state = fw_recovery_running; + if (wil_wait_for_recovery(wil) != 0) + return; + mutex_lock(&wil->mutex); switch (wdev->iftype) { case NL80211_IFTYPE_STATION: case NL80211_IFTYPE_P2P_CLIENT: case NL80211_IFTYPE_MONITOR: - wil_info(wil, "fw error recovery requested (try %d)...\n", - wil->recovery_count); - if (!no_fw_recovery) - wil->recovery_state = fw_recovery_running; - if (0 != wil_wait_for_recovery(wil)) - break; - + /* silent recovery, upper layers will see disconnect */ __wil_down(wil); __wil_up(wil); break;