A few years ago, I reported a problem with mdelay (that it basically
didn't work) - see

http://marc.theaimsgroup.com/?l=user-mode-linux-devel&m=103774842828993&w=2

and preceding messages.

I see the problem is still there in 2.6.18 (I find it because I insert an
mdelay(1000) into one of the ubd routines to simulate the effect of
busy-waiting on i/o in one of my practical exercises).

Here's the patch I currently use to fix it. I can't remember now how I
produced this patch four years ago, but it should make sense in
conjunction with the above referenced message.

--- arch/um/sys-i386/delay.c.dist       2006-10-26 14:50:38.069023000 +0100
+++ arch/um/sys-i386/delay.c    2006-10-26 14:50:42.527846000 +0100
@@ -3,7 +3,7 @@
 #include <linux/delay.h>
 #include <asm/param.h>
 
-void __delay(unsigned long time)
+static void __loop_delay(unsigned long loops)
 {
        /* Stolen from the i386 __loop_delay */
        int d0;
@@ -14,27 +14,28 @@
                ".align 16\n"
                "2:\tdecl %0\n\tjns 2b"
                :"=&a" (d0)
-               :"0" (time));
+               :"0" (loops));
 }
 
-void __udelay(unsigned long usecs)
+void __delay(unsigned long loops)
 {
-       int i, n;
-
-       n = (loops_per_jiffy * HZ * usecs) / MILLION;
-        for(i=0;i<n;i++)
-                cpu_relax();
+       __loop_delay(loops);
 }
 
-EXPORT_SYMBOL(__udelay);
-
-void __const_udelay(unsigned long usecs)
+inline void __const_udelay(unsigned long xloops)
 {
-       int i, n;
+       int d0;
+       __asm__("mull %0"
+               :"=d" (xloops), "=&a" (d0)
+               :"1" (xloops),"0" (loops_per_jiffy));
+        __delay(xloops * HZ);
+}
 
-       n = (loops_per_jiffy * HZ * usecs) / MILLION;
-        for(i=0;i<n;i++)
-                cpu_relax();
+void __udelay(unsigned long usecs)
+{
+       __const_udelay(usecs * 0x000010c6);  /* 2**32 / 1000000 */
 }
 
+EXPORT_SYMBOL(__udelay);
+
 EXPORT_SYMBOL(__const_udelay);

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
User-mode-linux-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

Reply via email to