| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
there is still some missing kernel support.
Reviewed by: marcel
|
|
|
|
|
|
|
| |
o Fix a bug in kse_free_unlocked(), kcb_dtor shouldn't be called because
the KSE is cached and will be resued in _kse_alloc().
Reviewed by: deischen
|
|
|
|
|
|
|
| |
bypass it. Doing otherwise did not allow compiler to detect and disable
conflicting options generated from specs.
Reported by: jake
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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).
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
TCB. We know that the thread pointer points to &tcb->tcb_tp, so all
we have to do is subtract offsetof(struct tcb, tcb_tp) from the
thread pointer to get to the TCB. Any reasonably smart compiler will
translate accesses to fields in the TCB as negative offsets from TP.
In _tcb_set() make sure the fake TCB gets a pointer to the current
KCB, just like any other TCB. This fixes a NULL-pointer dereference
in _thr_ref_add() when it tried to get the current KSE.
|
|
|
|
|
|
|
| |
thread. It should only be called by the current kse and
never by a KSE on behalf of another.
Submitted by: davidxu
|
|
|
|
|
|
| |
makecontext(). We only supply 3, not 4. This is mostly harmless,
except that on ia64 the garbage can include NaT bits, resulting
in NaT consumption faults.
|
|
|
|
|
|
|
| |
that the TLS is 16-byte aligned, as well as guarantee that the thread
pointer is 16-byte aligned as it points to struct ia64_tp. Likewise,
struct tcb and struct ksd are also guaranteed to be 16-byte aligned
(if they weren't already).
|
| |
|
|
|
|
|
|
|
|
|
| |
archs that can (or are required to) have per-thread registers.
Tested on i386, amd64; marcel is testing on ia64 and will
have some follow-up commits.
Reviewed by: davidxu
|
|
|
|
|
|
|
|
|
| |
context functions. We don't need to enter the kernel anymore. The
contexts are compatible (ie a context created by getcontext() can
be restored by _ia64_restore_context()).
While here, make the use of THR_ALIGNBYTES and THR_ALIGN a no-op.
They are going to be removed anyway.
|
|
|
|
|
|
|
|
|
|
| |
We write 1 for r8 in the context so that _ia64_restore_context()
will return with a non-zero value. _ia64_save_context() always
return 0.
o In _ia64_restore_context(), don't restore the thread pointer. It
is not normally part of the context. Also, restore the return
registers. We get called for contexts created by getcontext(),
which means we have to restore all the syscall return values.
|
| |
|
|
|
|
| |
Reminded by: marcel
|
| |
|
|
|
|
|
|
|
|
|
| |
the userland version of [gs]etcontext to switch between a thread
and the UTS scheduler (and back again). This also fixes a bug
in i386 _thr_setcontext() which wasn't properly restoring the
context.
Reviewed by: davidxu
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
from one of my last commits. This only affected priority ceiling
mutexes.
Pointy hat to: deischen
|
|
|
|
| |
Reviewed by: deischen
|
| |
|
|
|
|
|
|
|
|
| |
This eliminates ping-ponging of locks, where the idle KSE wakes
up only to find the lock it needs is being held. This gives
little or no gain to M:N mode but greatly speeds up 1:1 mode.
Reviewed & Tested by: davidxu
|
|
|
|
| |
THR_SETCONTEXT().
|
|
|
|
|
|
| |
send signal to current thread.
Reviewed by: deischen
|
| |
|
|
|
|
|
|
|
|
| |
when it blocks; it only gets reset when it yields.
Properly set a thread's default stack guardsize.
Reviewed by: davidxu
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
handed-off/signaled to a higher priority thread. Note that when
there are idle KSEs that could run the higher priority thread,
we still add the preemption point because it seems to take the
kernel a while to schedule an idle KSE. The drawbacks are that
threads will be swapped more often between CPUs (KSEs) and
that there will be an extra userland context switch (the idle
KSE is still woken and will probably resume the preempted
thread). We'll revisit this if and when idle CPU/KSE wakeup
times improve.
Inspired by: Petri Helenius <pete@he.iki.fi>
Reviewed by: davidxu
|
|
|
|
| |
Reviewed by: davidxu
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
is system bound thread and when it is blocked, no upcall is generated.
o Add ability to libkse to allow it run in pure 1:1 threading mode,
defining SYSTEM_SCOPE_ONLY in Makefile can turn on this option.
o Eliminate code for installing dummy signal handler for sigwait call.
o Add hash table to find thread.
Reviewed by: deischen
|
| |
|
|
|
|
|
|
|
|
| |
its waitset, but if the signal is not masked by the thread, the signal
can interrupt the thread and signal action can be invoked by the thread,
sigwait should return with errno set to EINTR.
Also save and restore thread internal state(timeout and interrupted)
around signal handler invoking.
|
| |
|
|
|
|
| |
Reviewed by: deischen
|
|
|
|
| |
in last commit.
|
| |
|
|
|
|
| |
Reviewed by: deischen
|
|
|
|
| |
it in one line.
|
| |
|
|
|
|
| |
outside of lock.
|
|
|
|
| |
it only need purely wait in user space.
|
|
|
|
| |
is not enough.
|
| |
|
|
|
|
|
|
| |
Record the missing dependency of thr_libc.So on the libc_pic.a library.
OK'ed by: kan
|
|
|
|
|
| |
Use THR_CONDQ_CLEAR not THR_COND_SET in cond_queue_deq, current
cond_queue_deq is not used.
|
| |
|
| |
|
|
|
|
| |
Submitted by: bde
|
|
|
|
| |
use [signal number - 1] as subscript to access the array.
|