summaryrefslogtreecommitdiffstats
path: root/lib/libpthread
Commit message (Collapse)AuthorAgeFilesLines
...
* This file hasn't been used for some time; nuke it.deischen2003-07-311-42/+0
|
* Take the same approach for i386 as that for ia64 and amd64. Usedeischen2003-07-315-226/+75
| | | | | | | | | 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
* Set GSBASE for kse. Finally make libkse work on AMD64.davidxu2003-07-311-6/+3
|
* Fix some typos, correctly jump into UTS.davidxu2003-07-311-2/+2
|
* sysctlbyname needs size_t type, not int.davidxu2003-07-311-1/+1
|
* Don't forget to unlock the scheduler lock. Somehow this got removeddeischen2003-07-301-0/+1
| | | | | | | from one of my last commits. This only affected priority ceiling mutexes. Pointy hat to: deischen
* Simplify sigwait code a bit by using a waitset and removing oldsigmask.davidxu2003-07-273-22/+17
| | | | Reviewed by: deischen
* Fix typo.davidxu2003-07-261-5/+5
|
* Move idle kse wakeup to outside of regions where locks are held.deischen2003-07-238-73/+130
| | | | | | | | 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
* Add missing arguments to _amd64_restore_context() when called fromdeischen2003-07-201-2/+4
| | | | THR_SETCONTEXT().
* Override libc function raise(), in threading mode, raise() willdavidxu2003-07-193-0/+56
| | | | | | send signal to current thread. Reviewed by: deischen
* Add some very beta amd64 bits. These will also need some tweaking.deischen2003-07-196-0/+528
|
* Cleanup thread accounting. Don't reset a threads timeslicedeischen2003-07-183-38/+27
| | | | | | | | when it blocks; it only gets reset when it yields. Properly set a thread's default stack guardsize. Reviewed by: davidxu
* Add a preemption point when a mutex or condition variable isdeischen2003-07-182-6/+18
| | | | | | | | | | | | | | | 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
* Clean up KSE specific data (KSD) macros a bit.deischen2003-07-181-29/+8
| | | | Reviewed by: davidxu
* o Eliminate upcall for PTHREAD_SYSTEM_SCOPE thread, now itdavidxu2003-07-1716-395/+602
| | | | | | | | | | | | | 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
* Don't resume sigwait thread If signal is masked.davidxu2003-07-091-8/+12
|
* POSIX says if a thread is in sigwait state, although a signal may not indavidxu2003-07-092-11/+29
| | | | | | | | 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.
* Restore signal mask correctly after fork().davidxu2003-07-092-4/+6
|
* Save and restore thread's error code around signal handling.davidxu2003-07-091-1/+2
| | | | Reviewed by: deischen
* Correctly print signal mask, the bug was introduced by cut and pastedavidxu2003-07-071-11/+20
| | | | in last commit.
* Add a newline to debug message.davidxu2003-07-071-1/+1
|
* Avoid accessing user provided parameters in critical region.davidxu2003-07-079-46/+65
| | | | Reviewed by: deischen
* Print thread's scope, also print signal mask for every thread and printdavidxu2003-07-071-17/+13
| | | | it in one line.
* Correctly lock/unlock signal lock. I must be in bad state, need to sleep.davidxu2003-07-041-1/+2
|
* Always check and restore sigaction previously set, also access user parameterdavidxu2003-07-041-4/+7
| | | | outside of lock.
* If select() is only used for sleep, convert it to nanosleep,davidxu2003-07-031-4/+9
| | | | it only need purely wait in user space.
* Check if thread is in critical region, only testing check_pendingdavidxu2003-07-031-1/+2
| | | | is not enough.
* Style.ru2003-07-021-2/+2
|
* Take thr_support.c out of SRCS so that it does not end up in libraries.ru2003-07-022-3/+8
| | | | | | Record the missing dependency of thr_libc.So on the libc_pic.a library. OK'ed by: kan
* Set unlock_mutex to 1 after locked mutex.davidxu2003-07-021-2/+4
| | | | | Use THR_CONDQ_CLEAR not THR_COND_SET in cond_queue_deq, current cond_queue_deq is not used.
* Fix typo.davidxu2003-07-021-1/+1
|
* Unbreak "make checkdpadd".ru2003-07-011-1/+1
|
* Axe AINC.ru2003-07-011-1/+0
| | | | Submitted by: bde
* Because there are only _SIG_MAXSIG elements in thread siginfo array,davidxu2003-06-303-16/+16
| | | | use [signal number - 1] as subscript to access the array.
* Remove surplus unlocking code I accidentally checked in. This won't bedavidxu2003-06-301-4/+0
| | | | triggered until LDT entry is exhausted.
* o Use a daemon thread to monitor signal events in kernel, if pendingdavidxu2003-06-2814-586/+813
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | signals were changed in kernel, it will retrieve the pending set and try to find a thread to dispatch the signal. The dispatching process can be rolled back if the signal is no longer in kernel. o Create two functions _thr_signal_init() and _thr_signal_deinit(), all signal action settings are retrieved from kernel when threading mode is turned on, after a fork(), child process will reset them to user settings by calling _thr_signal_deinit(). when threading mode is not turned on, all signal operations are direct past to kernel. o When a thread generated a synchoronous signals and its context returned from completed list, UTS will retrieve the signal from its mailbox and try to deliver the signal to thread. o Context signal mask is now only used when delivering signals, thread's current signal mask is always the one in pthread structure. o Remove have_signals field in pthread structure, replace it with psf_valid in pthread_signal_frame. when psf_valid is true, in context switch time, thread will backout itself from some mutex/condition internal queues, then begin to process signals. when a thread is not at blocked state and running, check_pending indicates there are signals for the thread, after preempted and then resumed time, UTS will try to deliver signals to the thread. o At signal delivering time, not only pending signals in thread will be scanned, process's pending signals will be scanned too. o Change sigwait code a bit, remove field sigwait in pthread_wait_data, replace it with oldsigmask in pthread structure, when a thread calls sigwait(), its current signal mask is backuped to oldsigmask, and waitset is copied to its signal mask and when the thread gets a signal in the waitset range, its current signal mask is restored from oldsigmask, these are done in atomic fashion. o Two additional POSIX APIs are implemented, sigwaitinfo() and sigtimedwait(). o Signal code locking is better than previous, there is fewer race conditions. o Temporary disable most of code in _kse_single_thread as it is not safe after fork().
* Use mmap retuned value.davidxu2003-06-281-2/+3
| | | | Reviewed by: deischen
* Temporary disable rwlock based code, replace it with low level KSE lockingdavidxu2003-06-281-0/+92
| | | | | | | code until rtld-elf and libkse can cooperate better, those code can be restored. Reviewed by: deischen
* Write new thread pointer back only when success.davidxu2003-06-281-3/+4
| | | | Reviewed by: deischen
* After thread was interrupted by signal, it should relock mutex.davidxu2003-06-281-2/+1
| | | | Reviewed by: deischen
* if thread is exiting, just returns. kse_thr_interrupt interfacedavidxu2003-06-281-2/+6
| | | | | | | was changed, it needs signal parameter, pass -1 to it, it indicates to interrupt syscall. Reviewed by: deischen
* Implement _ia64_save_context() and _ia64_restore_context(). Bothmarcel2003-06-271-0/+285
| | | | | | | | | | | | | | | | functions are derived from the swapctx() and restorectx() (resp) from sys/ia64/ia64/context.s. The code is expected to be 99% correct, but has not yet been tested. Note that with these functions operating on mcontext_t, we also created the foundation upon which we can implement getcontext(2) and setcontext(2) replacements. It's not guaranteed that the use of these syscalls and _ia64_{save|restore}_context() on the same uicontext_t is actually going to work. Replacing the syscalls is now trivially achieved. This commit completes the ia64 port of libpthread itself (modulo testing and bugfixes).
* Implement _ia64_enter_uts(). The purpose of this function is to switchmarcel2003-06-263-1/+101
| | | | | | | | | the register stack and memory stack and call the function given to it. While here, provide empty, non-working, stubs for the context functions (_ia64_save_context() and _ia64_restore_context()) so that anyone can at least compile libkse from CVS sources. Real implementations will follow soon.
* Implement _thr_enter_uts() and _thr_switch() as inline functions tomarcel2003-06-261-0/+30
| | | | | | | | | | | minimize the amount and complexity of assembly code that needs to be written. This way the core functionality is spread over 3 elementary functions that don't have to do anything that can more easily and more safely be done in C. As such, assembly code will only have to know about the definition of mcontext_t. The runtime cost of not having these functions being inlined is less important than the cleanliness and maintainability of the code at this stage of the implementation.
* Explicitly widen int types before casting to pointer types. On 64-bitmarcel2003-06-241-3/+4
| | | | | | | | platforms the compiler warns about incompatible integer/pointer casts and on ia64 this generally is bad news. We know that what we're doing here is valid/correct, so suppress the warning. No functional change. Sleeps better: marcel
* Untangle the inter-dependency of kse types and ksd types/functionsmarcel2003-06-238-16/+112
| | | | | | | | | | | | | | | | | | | by moving the definition of struct ksd to pthread_md.h and removing the inclusion of ksd.h from thr_private.h (which has the definition of struct kse and kse_critical_t). This allows ksd.h to have inline functions that use struct kse and kse_critical_t and generally yields a cleaner implementation at the cost of not having all ksd related types/definitions in one header. Implement the ksd functionality on ia64 by using inline functions and permanently remove ksd.c from the ia64 specific makefile. This change does not clean up the i386 specific version of ksd.h. NOTE: The ksd code on ia64 abuses the tp register in the same way as it is abused in libthr in that it is incompatible with the runtime specification. This will be address when support for TLS hits the tree.
* Change the definition of _ksd_curkse, _ksd_curthread andmarcel2003-06-232-7/+7
| | | | | | | | | _ksd_readandclear_tmbx to be function-like. That way we can define them as inline functions or create prototypes for them. This change allows the ksd interface on ia64 to be fully inlined.
* Define THR_{G|S}ETCONTEXT to expand to {g|s}etcontext(2).marcel2003-06-231-0/+38
| | | | Define THR_ALIGN to align at 16-byte boundaries.
* Implement atomic_swap_{int|long|ptr}. Define atomic_swap_ptr as amarcel2003-06-231-0/+47
| | | | | macro that expands to atomic_swap_long() to avoid compiler warnings caused by incompatible pointer passing.
OpenPOWER on IntegriCloud