Hi all,

I found udelay may cause dead in rtl , And Yodaiken said that udelay cannot
be used in rtl context in a thread of Jun 18.(I paste the thread below.)

But after examined the code of udelay I did not found any special operation.
As far as I see, the code is nothing more than a busy loop, and it only use
a piece of data in Linux ,the current_cpu_data.loops_per_sec.
Who can ponit out where the mistake is? thanks a lot.

#define udelay(n) (__builtin_constant_p(n) ? \
 __const_udelay((n) * 0x10c6ul) : \
 __udelay(n))

inline void __const_udelay(unsigned long xloops)
{
 int d0;
 __asm__("mull %0"
  :"=d" (xloops), "=&a" (d0)
  :"1" (xloops),"0" (current_cpu_data.loops_per_sec));
        __delay(xloops);
}

void __udelay(unsigned long usecs)
{
 __const_udelay(usecs * 0x000010c6);  /* 2**32 / 1000000 */
}

This is the thread I mentioned.
On Sat, Jun 17, 2000 at 11:52:57PM +0800, Zaimin Zhong wrote:
> Hi!
>
> Sorry to waste the bandwidth, but I could not link following functions
>
> check_region()
> request_region()
> udelay()

These  are exported kernel functions and are linked in dynamically by insmod
but
live in kernel space and cannot be statically linked.
(BTW: they cannot be used in RT threads or interrupt handlers).

>
> statically into my RTL module. Which libary must be linked when above
> functions are called.
>

dyd




-- [rtl] ---
To unsubscribe:
echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
---
For more information on Real-Time Linux see:
http://www.rtlinux.org/rtlinux/

Reply via email to