From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753350AbcKZB4u (ORCPT ); Fri, 25 Nov 2016 20:56:50 -0500 Received: from shards.monkeyblade.net ([184.105.139.130]:58916 "EHLO shards.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752461AbcKZB4n (ORCPT ); Fri, 25 Nov 2016 20:56:43 -0500 Date: Fri, 25 Nov 2016 20:56:38 -0500 (EST) Message-Id: <20161125.205638.2032421932060534687.davem@davemloft.net> To: arnd@arndb.de Cc: samuel@sortiz.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] irda: fix overly long udelay() From: David Miller In-Reply-To: <20161124162630.3802535-1-arnd@arndb.de> References: <20161124162630.3802535-1-arnd@arndb.de> X-Mailer: Mew version 6.7 on Emacs 25.1 / Mule 6.0 (HANACHIRUSATO) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.5.12 (shards.monkeyblade.net [149.20.54.216]); Fri, 25 Nov 2016 16:57:17 -0800 (PST) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Arnd Bergmann Date: Thu, 24 Nov 2016 17:26:22 +0100 > irda_get_mtt() returns a hardcoded '10000' in some cases, > and with gcc-7, we get a build error because this triggers a > compile-time check in udelay(): > > drivers/net/irda/w83977af_ir.o: In function `w83977af_hard_xmit': > w83977af_ir.c:(.text.w83977af_hard_xmit+0x14c): undefined reference to `__bad_udelay' > > Older compilers did not run into this because they either did not > completely inline the irda_get_mtt() or did not consider the > 10000 value a constant expression. > > The code has been wrong since the start of git history. > > Signed-off-by: Arnd Bergmann ... > @@ -518,7 +518,9 @@ static netdev_tx_t w83977af_hard_xmit(struct sk_buff *skb, > > mtt = irda_get_mtt(skb); > pr_debug("%s(%ld), mtt=%d\n", __func__ , jiffies, mtt); > - if (mtt) > + if (mtt > 1000) > + mdelay(mtt/1000); > + else if (mtt) > udelay(mtt); I know this isn't caused by you, but wow what is going on with the indentation here?!?!?