From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751643AbeAZDh7 (ORCPT ); Thu, 25 Jan 2018 22:37:59 -0500 Received: from mail-pg0-f65.google.com ([74.125.83.65]:37077 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751594AbeAZDh5 (ORCPT ); Thu, 25 Jan 2018 22:37:57 -0500 X-Google-Smtp-Source: AH8x225JfPUXYgrariHAaUMJ9a/1sYWrwXdH0i+ID5fJHuO/zOp6HQpFnl0Zet23PdD4+1KMr62Drw== From: Jia-Ju Bai To: 3chas3@gmail.com Cc: linux-atm-general@lists.sourceforge.net, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, 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> X-Mailer: git-send-email 1.7.9.5 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@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