[Top] [All Lists]

[PATCH] MIPS: Make __{,n,u}delay declarations agree with definitions and

Subject: [PATCH] MIPS: Make __{,n,u}delay declarations agree with definitions and asm-generic/delay.h
From: David Daney <>
Date: Fri, 28 Sep 2012 11:34:10 -0700
Cc: David Daney <>
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer; bh=BkN1hs2kiKHlYbwBiGRNJvNYiphMuVKzJZ5dL6OtT0s=; b=YBHkshiQumTKt1XB10f/Wp71uKC3esSUvU5M/tCp9o3cNav1oY3jKUODdqiHNgQMnW RgK3Bnt0Lkv5O4iAT+zcsM5+2d/UlPas49SNCNxZWX1+0PVB/HkRKOvzLIROyWVYJyKd 9OR2ehYCP/NPeHvzRxDeCLpI2SoOjdYMnfsZ/ekwkNP7kBu0hsbX58f/p5wRQkpTX60p BVDIz3YYRbn66L1qTs5SASc1c7MevGdX//FuiK1s9RDyz/KzW1DDBr2KenW5+ub1qtbb YDLplJ7RzxEq14eRhErZB7e8dsCPUsA4yioDdFZhCNOs4Y6EibB5QZXl5SVvHrd2+Nys 7qEg==
List-archive: <>
List-help: <>
List-id: linux-mips <>
List-owner: <>
List-post: <>
List-software: Ecartis version 1.0.0
List-subscribe: <>
List-unsubscribe: <>
From: David Daney <>

At some recent point arch/mips/include/asm/delay.h has started being
included into csrc-octeon.c where the __?delay() functions are
defined.  This causes a compile failure due to conflicting
declarations and definitions of the functions.

It turns out that the generic definitions in arch/mips/lib/delay.c also

Proposed fix: Declare the functions to take unsigned long parameters
just like asm-generic (and x86) does.  Update __delay to agree
(__ndelay and __udelay need no change).

Bonus: Get rid of 'inline' from __delay() definition, as it is globally
visible, and the compiler should be making this decision itself (it
does in fact inline the function without being told to).

Signed-off-by: David Daney <>

As seen on linux-next for 20120928

 arch/mips/include/asm/delay.h | 6 +++---
 arch/mips/lib/delay.c         | 6 +++++-
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/arch/mips/include/asm/delay.h b/arch/mips/include/asm/delay.h
index e7cd782..dc0a5f7 100644
--- a/arch/mips/include/asm/delay.h
+++ b/arch/mips/include/asm/delay.h
@@ -13,9 +13,9 @@
 #include <linux/param.h>
-extern void __delay(unsigned int loops);
-extern void __ndelay(unsigned int ns);
-extern void __udelay(unsigned int us);
+extern void __delay(unsigned long loops);
+extern void __ndelay(unsigned long ns);
+extern void __udelay(unsigned long us);
 #define ndelay(ns) __ndelay(ns)
 #define udelay(us) __udelay(us)
diff --git a/arch/mips/lib/delay.c b/arch/mips/lib/delay.c
index 5995969..dc81ca8 100644
--- a/arch/mips/lib/delay.c
+++ b/arch/mips/lib/delay.c
@@ -15,13 +15,17 @@
 #include <asm/compiler.h>
 #include <asm/war.h>
-inline void __delay(unsigned int loops)
+void __delay(unsigned long loops)
        __asm__ __volatile__ (
        "       .set    noreorder                               \n"
        "       .align  3                                       \n"
        "1:     bnez    %0, 1b                                  \n"
+#if __SIZEOF_LONG__ == 4
        "       subu    %0, 1                                   \n"
+       "       dsubu   %0, 1                                   \n"
        "       .set    reorder                                 \n"
        : "=r" (loops)
        : "0" (loops));

<Prev in Thread] Current Thread [Next in Thread>
  • [PATCH] MIPS: Make __{,n,u}delay declarations agree with definitions and asm-generic/delay.h, David Daney <=