On Wed, 2010-08-25 at 12:06 +0200, Bharath Achuta Bhat wrote:
> Hi  Philippe,
> It is an mmap-ed I/O memory.

This is a TLB miss which ends up in a heavyweight call to fill the linux
page table entry. Try to pre-fault the I/O memory region if possible,
reading some bytes within the same 4k page.

> 
> 
> Regards
> Bharath
> 
> On Wed, Aug 25, 2010 at 11:53 AM, Philippe Gerum <[email protected]>
> wrote:
>         On Wed, 2010-08-25 at 11:12 +0200, Bharath Achuta Bhat wrote:
>         > Hello Xenomai experts,
>         >
>         >
>         > I am running a xenomai-2.5.1 patched kernel (v 2.6.30.3)
>         with ipipe
>         > version 2.7-06.
>         > The target is powerpc (MPC8533E).
>         > My application is switching to the secondary mode (I guess
>         because of
>         > a page-fault) when ntohl() is called.
>         > This is a libc function and I am wondering why only this
>         function
>         > (ntohl()) is causing a page-fault.
>         
>         
>         What memory are you reading from / writing to in the statement
>         involving
>         ntohl()? Is this plain RAM, or mapped I/O memory?
>         
>         >
>         >
>         > Here is how the application looks like
>         >
>         >
>         > main ()
>         > {
>         > ...
>         > ...
>         > /* Avoids memory swapping for this program */
>         > mlockall(MCL_CURRENT | MCL_FUTURE);
>         >
>         >
>         > ......
>         > ......
>         > /* signal handlers */
>         > .....
>         > .....
>         > /* create communication pipes */
>         > rt_pipe_create(&tPipe1, .....
>         > rt_pipe_create(&tPipe2,.......
>         >
>         >
>         > /* create RT tasks */
>         > rt_task_create(&tTask1,.....
>         > rt_task_create(&tTask2,......
>         > ...........
>         > ..........
>         >
>         >
>         > /* start the RT tasks */
>         > rt_task_start(&tTask1,.....
>         > ..............
>         > ..............
>         >
>         >
>         > /* turn the current thread into RT function */
>         > ret = rt_task_shadow(NULL, "RT main function", 1, T_SUSP);
>         >
>         >
>         > ....
>         > ....
>         >
>         >
>         > }
>         >
>         >
>         > One of the rt tasks created calls ntohl() and switches to
>         secondary
>         > mode.
>         > Is there a way to avoid it ?
>         >
>         >
>         > --
>         > Thanks and regards
>         > Bharath
>         >
>         
>         > _______________________________________________
>         > Xenomai-help mailing list
>         > [email protected]
>         > https://mail.gna.org/listinfo/xenomai-help
>         
>         --
>         Philippe.
>         
>         
> 
> 
> 
> -- 
> Thanks and regards
> Bharath
> 

-- 
Philippe.



_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help

Reply via email to