I'm using the Adeos nanokernel (2.6.8.1-i386-r6) within a project to implement a specific realtime environment embedded within Linux. I recognized the following problem within the routines for the kernel entry calls which we also use for our special code:
For every call to the Linux kernel (x86 architecture using Int 0x80) Adeos provides a hook within entry.s to call a subroutine within a higher priority domain. When this subroutine returns a nonzero value, the "standard" code sequence in entry.s is stopped and the code returns immediately. This works also when you use the kernel entry via sysenter() which is much faster. However, when the subroutine of the higher priority domain wants to skip the "standard" code sequence during its return, Adeos uses a normal "iret" to leave the kernel. The "standard" procedure would be to use sysexit(). As a result returning back to the user code costs much more time with Adeos than within Linux. I wonder whether there are reasons for this different behavior or whether it was simply forgotten. I modified the code in this way that Adeos also uses sysexit() and did not recognize any problems so far but a performance gain. Manfred
