浏览代码

sh: Fix underflow in SH udelay() code.

Signed-off-by: Stuart Menefy <stuart.menefy@st.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Stuart Menefy 15 年之前
父节点
当前提交
bd4fb4d4c1
共有 1 个文件被更改,包括 3 次插入2 次删除
  1. 3 2
      arch/sh/lib/delay.c

+ 3 - 2
arch/sh/lib/delay.c

@@ -21,13 +21,14 @@ void __delay(unsigned long loops)
 
 
 inline void __const_udelay(unsigned long xloops)
 inline void __const_udelay(unsigned long xloops)
 {
 {
+	xloops *= 4;
 	__asm__("dmulu.l	%0, %2\n\t"
 	__asm__("dmulu.l	%0, %2\n\t"
 		"sts	mach, %0"
 		"sts	mach, %0"
 		: "=r" (xloops)
 		: "=r" (xloops)
 		: "0" (xloops),
 		: "0" (xloops),
-		  "r" (HZ * cpu_data[raw_smp_processor_id()].loops_per_jiffy)
+		  "r" (cpu_data[raw_smp_processor_id()].loops_per_jiffy * (HZ/4))
 		: "macl", "mach");
 		: "macl", "mach");
-	__delay(xloops);
+	__delay(++xloops);
 }
 }
 
 
 void __udelay(unsigned long usecs)
 void __udelay(unsigned long usecs)