From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jia-Ju Bai Subject: [PATCH] atm: idt77252: Replace mdelay with usleep_range in idt77252_preset Date: Fri, 26 Jan 2018 11:42:18 +0800 Message-ID: <1516938138-27259-1-git-send-email-baijiaju1990@gmail.com> Cc: linux-atm-general@lists.sourceforge.net, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Jia-Ju Bai To: 3chas3@gmail.com Return-path: Sender: linux-kernel-owner@vger.kernel.org List-Id: netdev.vger.kernel.org After checking all possible call chains to idt77252_preset() here, my tool finds that idt77252_preset() is never called in atomic context, namely never in an interrupt handler or holding a spinlock. And idt77252_preset() calls deinit_card, which calls free_irq (can sleep), so it indicates that idt77252_preset() can call functions which can sleep. Thus mdelay can be replaced with usleep_range to avoid busy wait. This is found by a static analysis tool named DCNS written by myself. Signed-off-by: Jia-Ju Bai --- drivers/atm/idt77252.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/atm/idt77252.c b/drivers/atm/idt77252.c index 0277f36..cea4bf2 100644 --- a/drivers/atm/idt77252.c +++ b/drivers/atm/idt77252.c @@ -3563,7 +3563,7 @@ static int idt77252_preset(struct idt77252_dev *card) /* Software reset */ writel(SAR_CFG_SWRST, SAR_REG_CFG); - mdelay(1); + usleep_range(500, 1000); writel(0, SAR_REG_CFG); IPRINTK("%s: Software resetted.\n", card->name); -- 1.7.9.5