Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp7127120rwb; Wed, 23 Nov 2022 02:31:33 -0800 (PST) X-Google-Smtp-Source: AA0mqf41WXePar9Gi1GoIKgatcbar+23W6qvG3zhwnSAfAO9rpKDCBGD8VmRaCFdfvMvXxbnAGj3 X-Received: by 2002:a17:906:4e14:b0:7b2:b15e:8ab1 with SMTP id z20-20020a1709064e1400b007b2b15e8ab1mr15422344eju.659.1669199492765; Wed, 23 Nov 2022 02:31:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669199492; cv=none; d=google.com; s=arc-20160816; b=iW0nNkzVQUMLdX18AmdpsNkjYzLnVTUPorUVyB+q86/BPYPDYQMOCHlHD8qoXXTtmi zXeh/hSzNSRF+n3Znz5TLYrtlPLj5YQovtJqptTeLNsAq1d3BLZZf5X6QGyDDGUaerxl xU+DTV6E+J0zmtiRZGLywd19vTU+FdLazRTePJ0RUrPwwz3PZfsr78f8AuRsHOxvsEYL I8sjPYmS7n48RuSGu6zcc8nB9iEIROmJZyXGYXHdukTDguXFLpefhNPESyUnXSkA9IHX GGmnT2pLo42fJhR/+MXax/ANl/k+4Br8jJ4VskF8067ILjM8nYikD7Ij9ba0ZtvZEynb zjWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:date:subject:cc:to:from; bh=NY+p9JEChTJbDnn9X1Hhb/DS1OipdMrH3h9Kb/aDlT0=; b=QYqKpbI1LiuKGoGLT6OIfdZKvmYQ7HC6vC5ZJe0j9g5ksnBZ87aCBwdIrYxINNhIIP UMJOBM65ceHyRvdNHgVEBRttGReLHLYFu47v5z8fJVN5iTSlFcCRkPiZaNItr2bMq+/K c2pnXSj8BSbq6s60142O8KUNFvP5mxCiYrU6VktN7j8ixMYyZpW17WM3DHkCrv+qJi87 hG8n5KIjoW8jZ+/V+7PsbuwBFjxRn/yIBrseKVb8MQYU1gVB8gi53gt+Z5uutireOf1l Ilg4kpK5pKo+Ukc4xWKhjAxpnsNIQbpspzYNiWpF/Zzo+6NkEWt0qzYUUKexiWm7uO5I kn1w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c14-20020aa7df0e000000b004692dc7d456si10230582edy.370.2022.11.23.02.31.08; Wed, 23 Nov 2022 02:31:32 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237256AbiKWKTh (ORCPT + 88 others); Wed, 23 Nov 2022 05:19:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46072 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236347AbiKWKTH (ORCPT ); Wed, 23 Nov 2022 05:19:07 -0500 Received: from zju.edu.cn (spam.zju.edu.cn [61.164.42.155]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 99D82116058; Wed, 23 Nov 2022 02:07:05 -0800 (PST) Received: from ubuntu.localdomain (unknown [10.162.98.155]) by mail-app4 (Coremail) with SMTP id cS_KCgCHrN+y8H1jRKRPCA--.33927S2; Wed, 23 Nov 2022 18:06:49 +0800 (CST) From: Duoming Zhou To: linux-kernel@vger.kernel.org Cc: shshaikh@marvell.com, manishc@marvell.com, GR-Linux-NIC-Dev@marvell.com, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, netdev@vger.kernel.org, Duoming Zhou Subject: [PATCH net] qlcnic: fix sleep-in-atomic-context bugs caused by msleep Date: Wed, 23 Nov 2022 18:06:42 +0800 Message-Id: <20221123100642.6922-1-duoming@zju.edu.cn> X-Mailer: git-send-email 2.17.1 X-CM-TRANSID: cS_KCgCHrN+y8H1jRKRPCA--.33927S2 X-Coremail-Antispam: 1UD129KBjvJXoW7CF47Aw4kAw1DCF18Xr17Awb_yoW8ur1fpr 4agF9rGr4DAr1Yy3yxAw18ZF98CayvyFyI9Fn8u393Xrn0yF1fJFy8Kw4fWa48ArykJFyj yr15Zan8ZF12yF7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUvm1xkIjI8I6I8E6xAIw20EY4v20xvaj40_Wr0E3s1l1IIY67AE w4v_Jr0_Jr4l8cAvFVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xvwVC0I7IYx2 IY67AKxVWDJVCq3wA2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8Jr0_Cr1UM28EF7xvwVC2 z280aVAFwI0_GcCE3s1l84ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0DM2AIxVAIcxkEcV Aq07x20xvEncxIr21l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1j 6r18McIj6I8E87Iv67AKxVWUJVW8JwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IYc2Ij64 vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8cxan2IY04v7MxAIw28I cxkI7VAKI48JMxAIw28IcVCjz48v1sIEY20_GFWkJr1UJwCFx2IqxVCFs4IE7xkEbVWUJV W8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF 1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6x IIjxv20xvEc7CjxVAFwI0_Jr0_Gr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMIIF0xvE x4A2jsIE14v26r1j6r4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Jr0_GrUvcSsGvfC2KfnxnU UI43ZEXa7VUbXdbUUUUUU== X-CM-SenderInfo: qssqjiasttq6lmxovvfxof0/1tbiAgcDAVZdtcjhAAAss8 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_PASS, SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The watchdog timer is used to monitor whether the process of transmitting data is timeout. If we use qlcnic driver, the dev_watchdog() that is the timer handler of watchdog timer will call qlcnic_tx_timeout() to process the timeout. But the qlcnic_tx_timeout() calls msleep(), as a result, the sleep-in-atomic-context bugs will happen. The processes are shown below: (atomic context) dev_watchdog qlcnic_tx_timeout qlcnic_83xx_idc_request_reset qlcnic_83xx_lock_driver msleep --------------------------- (atomic context) dev_watchdog qlcnic_tx_timeout qlcnic_83xx_idc_request_reset qlcnic_83xx_lock_driver qlcnic_83xx_recover_driver_lock msleep Fix by changing msleep() to mdelay(), the mdelay() is busy-waiting and the bugs could be mitigated. Fixes: 629263acaea3 ("qlcnic: 83xx CNA inter driver communication mechanism") Signed-off-by: Duoming Zhou --- drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c index bd060768032..2fd5c6fdb50 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c @@ -2991,7 +2991,7 @@ static void qlcnic_83xx_recover_driver_lock(struct qlcnic_adapter *adapter) QLCWRX(adapter->ahw, QLC_83XX_RECOVER_DRV_LOCK, val); dev_info(&adapter->pdev->dev, "%s: lock recovery initiated\n", __func__); - msleep(QLC_83XX_DRV_LOCK_RECOVERY_DELAY); + mdelay(QLC_83XX_DRV_LOCK_RECOVERY_DELAY); val = QLCRDX(adapter->ahw, QLC_83XX_RECOVER_DRV_LOCK); id = ((val >> 2) & 0xF); if (id == adapter->portnum) { @@ -3027,7 +3027,7 @@ int qlcnic_83xx_lock_driver(struct qlcnic_adapter *adapter) if (status) break; - msleep(QLC_83XX_DRV_LOCK_WAIT_DELAY); + mdelay(QLC_83XX_DRV_LOCK_WAIT_DELAY); i++; if (i == 1) -- 2.17.1