On Sun, Jul 09, 2000 at 10:47:05AM +0800, dyd wrote:
> Hi ,
> 
> Yes ,both rtl_delay in RT and udelay in Linux ultimately boil down to
> __delay(),but the rtl_delay will run smoothly.
> I am greatly confused by this. I had never realized there is a so fantastic
> thing lies behind it.
> 
> What I still cannot understand is why Linux cannot advance when a RT task
> execute udelay().
> 
> When the udelay is running , Interrupts can be triggered and nothing prevent
> it. So Interrupt can go on. And anything else in Linux will not able to run
> because of the schedule mechanism of RTL.
> And I thought that code in linux  will be usable if it is reentrant?
> 
> Where am I wrong ? I am a student, and I will not be shamed of making
> mistake. Please point me out.

If a RT thread is running and a Linux interrupt asserts, the low
level RTLinux code will determine that the system is busy doing something
RT and will refuse to let the Linux interrupt handler be invoked --
the interrupt will be emulated when the RT system is idle.

Look in the function rtl_intercept to see how it is done.



> 
> Thank you .
> 
> 
> Dyd
> 
> 
> >In V3 RTLinux we have "udelay" native.
> >What is happens when you use the Linux udelay? Note it is a busy waiting
> >loop, so  if you call the Linux udelay from a RT context, Linux will
> >not advance.
> 
> >On Sat, Jul 08, 2000 at 03:26:18PM +0800, dyd wrote:
> >> 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/
> >
> >--
> >---------------------------------------------------------
> >Victor Yodaiken
> >FSMLabs:  www.fsmlabs.com  www.rtlinux.com
> >FSMLabs is a servicemark and a service of
> >VJY Associates L.L.C, New Mexico.
> >
> >-- [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/
> >
> 
> 
> 
> 
> 

-- 
---------------------------------------------------------
Victor Yodaiken 
FSMLabs:  www.fsmlabs.com  www.rtlinux.com
FSMLabs is a servicemark and a service of 
VJY Associates L.L.C, New Mexico.

-- [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