freebsd-nq/lib/libkse
Marcel Moolenaar 778a4a9dd4 Grok async contexts. When a thread is interrupted and an upcall
happens, the context of the interrupted thread is exported to
userland. Unlike most contexts, it will be an async context and
we cannot easily use our existing functions to set such a
context.
To avoid a lot of complexity that may possibly interfere with
the common case, we simply let the kernel deal with it. However,
we don't use the EPC based syscall path to invoke setcontext(2).
No, we use the break-based syscall path. That way the trapframe
will be compatible with the context we're trying to restore and
we save the kernel a lot of trouble. The kind of trouble we did
not want to go though ourselves...

However, we also need to set the threads mailbox and there's no
syscall to help us out. To avoid creating a new syscall, we use
the context itself to pass the information to the kernel so that
the kernel can update the mailbox. This involves setting a flag
(_MC_FLAGS_KSE_SET_MBOX) and setting ifa (the address) and isr
(the value).
2003-08-07 08:03:05 +00:00
..
arch Grok async contexts. When a thread is interrupted and an upcall 2003-08-07 08:03:05 +00:00
support Style. 2003-07-02 20:52:39 +00:00
sys Move the machine specific files from sys/Makefile.inc and put them 2003-06-23 04:28:31 +00:00
test o Eliminate upcall for PTHREAD_SYSTEM_SCOPE thread, now it 2003-07-17 23:02:30 +00:00
thread Don't call kse_set_curthread() when scheduling a new bound 2003-08-06 00:43:28 +00:00
Makefile o Eliminate upcall for PTHREAD_SYSTEM_SCOPE thread, now it 2003-07-17 23:02:30 +00:00