From: Jia-Ju Bai Date: Mon, 9 Apr 2018 13:03:38 +0000 (+0800) Subject: ALSA: ad1889: Replace mdelay with usleep_range in snd_ad1889_ac97_ready X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=1fa350b6e1a14edaeeb4e4f84010f5b0c53d2915;p=openwrt%2Fstaging%2Fblogic.git ALSA: ad1889: Replace mdelay with usleep_range in snd_ad1889_ac97_ready snd_ad1889_ac97_ready() is never called in atomic context. The call chain ending up at snd_ad1889_ac97_ready() is: [1] snd_ad1889_ac97_ready() <- snd_ad1889_ac97_xinit() <- snd_ad1889_ac97_init() <- snd_ad1889_probe() snd_ad1889_probe() is only set as ".probe" in struct pci_driver. This function is not called in atomic context. Despite never getting called from atomic context, snd_ad1889_ac97_ready() calls mdelay for busy wait. This is not necessary and can be replaced with usleep_range to avoid busy waiting. This is found by a static analysis tool named DCNS written by myself. Signed-off-by: Jia-Ju Bai Signed-off-by: Takashi Iwai --- diff --git a/sound/pci/ad1889.c b/sound/pci/ad1889.c index d4965ebe967f..d9c54c08e2db 100644 --- a/sound/pci/ad1889.c +++ b/sound/pci/ad1889.c @@ -258,7 +258,7 @@ snd_ad1889_ac97_ready(struct snd_ad1889 *chip) while (!(ad1889_readw(chip, AD_AC97_ACIC) & AD_AC97_ACIC_ACRDY) && --retry) - mdelay(1); + usleep_range(1000, 2000); if (!retry) { dev_err(chip->card->dev, "[%s] Link is not ready.\n", __func__);