#
30fda09a |
|
19-Jun-2023 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel: Rewrite KDEBUG_RW_LOCK_DEBUG. Previously this just turned the rw_lock into the equivalent of a recursive_lock, which meant that reader vs. writer assertions were of no use. Now, we have a per-thread static array which stores the held read locks, allowing ASSERT_READ_LOCKED_RW_LOCK to work properly, and allowing multiple readers to be active at a time. This probably should still remain disabled even on nightly builds, but at least it's much more useful as a debugging tool than it was beforehand. Change-Id: I386b2bc2ada8df42f4ab11a05563ef22af58e77f
|
#
93d7d1c5 |
|
12-Jun-2023 |
Augustin Cavalier <waddlesplash@gmail.com> |
user_mutex: Per-team contexts. This requires the introduction of the flag B_USER_MUTEX_SHARED, and then actually using the SHARED flags in pthread structures to determine when it should be passed through. This commit still uses wired memory even for per-team contexts. That will change in the next commit. GLTeapot FPS seems about the same. Change-Id: I749a00dcea1531e113a65299b6d6610f57511fcc Reviewed-on: https://review.haiku-os.org/c/haiku/+/6602 Reviewed-by: waddlesplash <waddlesplash@gmail.com> Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
|
#
b809279c |
|
15-May-2023 |
Trung Nguyen <trungnt282910@gmail.com> |
kernel/team: Allow retrieving more attributes - Stored the additional start time of each team, expressed by milliseconds since boot. - Added more fields to the `team_info` structure. These field include those provided by the `get_extended_team_info` syscall as well as the newly introduced `start_time`. - Extended the `_kern_get_team_info` system call to receive an additional `size_t` argument. If this size is smaller than or equal to the size of the old `team_info` structure, the newly added attributes will not be retrieved. Change-Id: I22ee6b91ad2ee3b66a7f770036c79a718c5f115c Reviewed-on: https://review.haiku-os.org/c/haiku/+/6390 Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org> Reviewed-by: Jessica Hamilton <jessica.l.hamilton@gmail.com>
|
#
0c2a5bb5 |
|
09-May-2023 |
Augustin Cavalier <waddlesplash@gmail.com> |
Replace the "tty" driver with a "pty" driver. This new driver uses the "generic" TTY layer, unlike the old driver which had its own implementation (which the generic module was derived from, originally.) The remaining bits of support for controlling TTYs is added to the kernel & generic layer at the same time, which should allow for serial interfaces to be controlling terminals now, as well. Tested with bash, nano, vim; all seems to still be working as expected.
|
#
f5e531e9 |
|
26-Apr-2023 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/thread_types: Remove Thread::condition_variable_entry. Unused, and "struct PrivateConditionVariableEntry" no longer exists, anyway.
|
#
c25f6f53 |
|
29-Mar-2022 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/vm: Completely replace mlock() implementation. The old implementation used the real lock_memory(). This is problematic and does not work for a large number of reasons: 1) Various parts of the kernel assume memory is locked only very temporarily, and will often wait on locked memory to become unlocked. The transient nature of locks is further demonstrated by the fact that lock_memory acquires references to structures, like the address space, which are only released by unlock_memory 2) The VM has a hard assumption that all lock_memory calls will be exactly balanced, and maintains internal "WiredRange" structures on areas, etc. corresponding to the original lock_memory calls. Maintaining separate data structures as this code did is a recipe for even more problems when the structures are manipulated separately, leading to confusing or incorrect behavior on unlocks. 3) Areas with locked memory cannot be deleted, nor can the pages which are locked be removed from the areas/caches. This of course is most notable when destroying teams which locked memory, but the problem also occurs when just using delete_area, resize_area, mmap/munmap, etc. Because of (2) and especially (3), adding support for mlock()-like semantics to the existing memory locking system is just not a good option. A further reason is that our lock_memory is much stricter than mlock(), which only demands the pages in question must remain resident in RAM and cannot be swapped out (or, it seems, otherwise written back to disk.) Thus, this commit completely removes the old implementation (which was seriously broken and did not actually automatically unlock memory on team exit or area destruction at all, etc.) and instead adds a new feature to VMAnonymousCache to block certain pages from being written out. The syscall then just invokes this to do its work. Fixes #17674. Related to #13651. Change-Id: Id2745c51796bcf9a74ba5325fe686a95623cd521 Reviewed-on: https://review.haiku-os.org/c/haiku/+/5147 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
e372ec1e |
|
09-Feb-2022 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel: Use KernelReferenceable for the supplementary_groups array. Instead of the malloc_referenced system. Makes for some cleaner code, and the malloc_referenced system was only used here, so it can now be dropped altogether.
|
#
29536a23 |
|
10-Jan-2021 |
Jérôme Duval <jerome.duval@gmail.com> |
kernel/thread: restore signal mask just before returning to userland * otherwise the signal to be handled might be blocked. fixes #15193 * also remove automatic syscall restart on _kern_select, to match Linux and BSDs behavior: this fixes parallel build with newer gnu make, which happens to use pselect. * also remove automatic syscall restart on _kern_poll. from https://man7.org/linux/man-pages/man7/signal.7.html "The following interfaces are never restarted after being interrupted by a signal handler, regardless of the use of SA_RESTART; they always fail with the error EINTR when interrupted by a signal handler: ... select(2), and pselect(2)." from https://notes.shichao.io/unp/ch6/ "Berkeley-derived kernels never automatically restart select." Change-Id: I3e9488f60c966b38d427f992f06e6e2217d4adc5 Reviewed-on: https://review.haiku-os.org/c/haiku/+/3636 Reviewed-by: Jérôme Duval <jerome.duval@gmail.com> Reviewed-by: Axel Dörfler <axeld@pinc-software.de>
|
#
6ff344d7 |
|
16-Jan-2021 |
Jérôme Duval <jerome.duval@gmail.com> |
Revert "kernel/thread: restore signal mask just before returning to userland" This reverts commit 837f4f48db2f543c730f30d374ec65c7d44c9644. Reason for revert: breaks DNS resolution Change-Id: If6f2a0f60dbfb24121616a9f3879ce226ea4a09a Reviewed-on: https://review.haiku-os.org/c/haiku/+/3519 Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
|
#
837f4f48 |
|
10-Jan-2021 |
Jérôme Duval <jerome.duval@gmail.com> |
kernel/thread: restore signal mask just before returning to userland * otherwise the signal to be handled might be blocked. fixes #15193 * also remove automatic syscall restart on _kern_select, to match Linux and BSDs behavior: this fixes parallel build with newer gnu make, which happens to use pselect. * also remove automatic syscall restart on _kern_poll. from https://man7.org/linux/man-pages/man7/signal.7.html "The following interfaces are never restarted after being interrupted by a signal handler, regardless of the use of SA_RESTART; they always fail with the error EINTR when interrupted by a signal handler: ... select(2), and pselect(2)." from https://notes.shichao.io/unp/ch6/ "Berkeley-derived kernels never automatically restart select." Change-Id: I7f86d221eae1ad93d8a308a75581d2c30a369c9e Reviewed-on: https://review.haiku-os.org/c/haiku/+/3627 Reviewed-by: Adrien Destugues <pulkomandy@gmail.com> Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
a959262c |
|
14-Dec-2019 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
implement mlock(), munlock() Change-Id: I2f04b8986d2ed32bb4d30d238d668e21a1505778 Reviewed-on: https://review.haiku-os.org/c/haiku/+/1991 Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
|
#
331889d0 |
|
28-Aug-2020 |
Niels Sascha Reedijk <niels.reedijk@gmail.com> |
Kernel/Threads: remove limit on number of dead threads in a team When a thread is created, it is expected that some other thread (usually the creating thread) will want to make sure it completes. This is done using the pthread_join() or wait_for_thread() calls. It is possible that threads end before another thread waits for its completion. That's why there is a dead thread list for each team, which holds thread ids and their exit status so that a call to pthread_join() or wait_for_thread() in the future can complete succesfully. The dead thread list was limited to 32 threads per team. If there would be more, the oldest thread would be kicked off. This could cause issues in situations where a team would create more than 32 threads, and would start waiting for their result after they have finished. Some of the calls would fail because the threads would no longer be in the dead list. This specifically caused problems for cargo (the Rust package manager), which could depending on the number of dependencies, could create more than 32 threads. See: https://github.com/nielx/rust/issues/3 This change removes the limit of dead threads within a team. Note that there is a risk that a badly written program that does not detach or joins its threads can make this an endless list, but the impact is relatively small (dead threads only occupy a bit of kernel memory). Change-Id: I0135dd54e10ee48a529f23228d21237d4f1a74e2 Reviewed-on: https://review.haiku-os.org/c/haiku/+/3178 Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
|
#
13beda00 |
|
26-Dec-2018 |
Michael Lotz <mmlr@mlotz.ch> |
kernel: Fix race condition when waiting for load of new team. There was no synchronization of the check of the done flag and the waiting thread suspending to wait for it. It was therefore possible that the new team both set the flag and triggered the wakeup of the waiting thread in that time window, causing it to miss both the set flag and the thread resumption. Use a condition variable instead. Fixes #13081. Change-Id: I93c45db8dd773fe42b45c4b67153bcd39e200d3b Reviewed-on: https://review.haiku-os.org/803 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
27b32ee0 |
|
03-May-2018 |
Jérôme Duval <jerome.duval@gmail.com> |
kernel/x86_64: adjust descriptors tables for compatibility mode. * also adjust BOOT_GDT_SEGMENT_COUNT for x86, the definition is used by the boot loader. * add some 32-bit definitions. * add a UserTLSDescriptor class, this will be used by 32-bit threads. Change-Id: I5b1d978969a1ce97091a16c9ec2ad7c0ca831656
|
#
a295d3f4 |
|
10-Oct-2017 |
Jérôme Duval <jerome.duval@gmail.com> |
wait4(): retrieve dead team entries usage information. * This adds a parameter to the wait_for_child syscall. I extended the test case to show the actual retrieved information. * fix #13546
|
#
467fe4ca |
|
24-Apr-2016 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
kernel: Add core dump facility * Add function core_dump_write_core_file(). It writes a core file for the current thread's team. The file format is similar to that of other OSs (i.e. ELF with PT_LOAD segments and a PT_NOTE segment), but most of the notes are Haiku specific (infos for team, areas, images, threads). More data will probably need to be added. * Add team flag TEAM_FLAG_DUMP_CORE, thread flag THREAD_FLAGS_TRAP_FOR_CORE_DUMP, and Team property coreDumpCondition, a condition variable available while a core dump is progress. A thread that finds its flag THREAD_FLAGS_TRAP_FOR_CORE_DUMP set before exiting the kernel to userland calls core_dump_trap_thread(), which blocks on the condition variable until the core dump has finished. We need the team's threads to stop so we can get their CPU state (and have a generally unchanging team state while writing the core file). * Add user debugger message B_DEBUG_WRITE_CORE_FILE. It causes core_dump_write_core_file() to be called for the team. * Dumping core as an immediate effect of a terminal signal has not been implemented yet, but that should be fairly straight forward.
|
#
5d4501aa |
|
20-Aug-2015 |
Michael Lotz <mmlr@mlotz.ch> |
Assorted whitespace cleanup and typo fixes.
|
#
52d500e5 |
|
28-Oct-2014 |
Michael Lotz <mmlr@mlotz.ch> |
kernel: Workaround for double lock of spinlock in user timers. The thread that is being [un]scheduled already has its time_lock locked in {stop|continue}_cpu_timers(). When updating the TeamTimeUserTimer, the team is asked for its cpu time. Team::CPUTime() then iterates the threads of the team and locks the time_lock of the thread again. This workaround passes a possibly locked thread through the relevant functions so Team::CPUTime() can decide whether or not a thread it iterates needs to be locked or not. This works around #11032 and its duplicates #11314 and #11344.
|
#
95e97463 |
|
14-Sep-2014 |
Paweł Dziepak <pdziepak@quarnos.org> |
kernel: add generic wrapper for accessing user memory This patch adds user_access() which can be used to gracefully handle page faults that may happen when accessing user memory. It is used by arch_cpu_user{memcpy, memset, strlcpy}() to allow using optimized functions from the standard library. Currently only x64 uses this, but nothing really is arch specific here. Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
|
#
4ad7d95b |
|
09-Aug-2014 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
Revert "Add sys/ucontext.h" This reverts commit 6ddf93bfbec1ecec76cf119c50327f93f6d4fef8. As pointed out by Ingo, those were moved to sugnal.h in the latest issue (issue 7) of the POSIX spec. Sorry!
|
#
6ddf93bf |
|
09-Aug-2014 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
Add sys/ucontext.h * Move ucontext_t and mcontext_t there as that's where POSIX says they should be.
|
#
b1673075 |
|
16-Mar-2014 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Properly synchronize suspending new thread After load_image() the child thread is suspended and the parent is expected to resume it later. However, it is possible that the parent attempts to resume its child after it has been notified that the image had been loaded but before the child managed to suspend itself. In such case the child would suspends itself after that wake up attempt and, consequently will not be ever resumed. To mitigate that problem flag Thread::going_to_suspend has been added which helps synchronizing thread suspension and continuation in a similar way that "traditional" thread blocking is performed. This means that the child should behave in a following manner: set its going_to_suspend flag, notify the parent (i.e. any thread that may want to resume it), acquire its scheduler_lock and suspend itself if the going_to_suspend flag is set. The parent should follow pattern: clear going_to_suspend flag of the thread that is about to be resumed, acquire that thread scheduler_lock and enqueue it in a run queue if it is suspended. Thanks Oliver for reporting the bug and identifying what causes it.
|
#
d287274d |
|
05-Dec-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
scheduler: Code refactoring
|
#
2b7ea4cd |
|
29-Nov-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Remove Thread::next_state
|
#
03fb2d88 |
|
07-Nov-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Remove gSchedulerLock * Thread::scheduler_lock protects thread state, priority, etc. * sThreadCreationLock protects thread creation and removal and list of threads in team. * Team::signal_lock and Team::time_lock protect list of threads in team as well. * Scheduler uses its own internal locking.
|
#
72addc62 |
|
07-Nov-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Introduce Thread::time_lock and Team::time_lock
|
#
3519eb33 |
|
06-Nov-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Change Thread::team_lock to rw_spinlock
|
#
83983eaf |
|
06-Nov-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Remove Thread::alarm
|
#
aa4aca02 |
|
06-Nov-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Protect signal data with Team::signal_lock
|
#
73ad2473 |
|
05-Nov-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
Remove remaining unnecessary 'volatile' qualifiers
|
#
ea79da95 |
|
20-Oct-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Remove support for thread_queue
|
#
29e65827 |
|
09-Oct-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Remove possibility to yield to all threads Kernel support for yielding to all (including lower priority) threads has been removed. POSIX sched_yield() remains unchanged. If a thread really needs to yield to everyone it can reduce its priority to the lowest possible and then yield (it will then need to manually return to its prvious priority upon continuing).
|
#
0896565a |
|
08-Oct-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Support sched_yield() properly sched_yield() should not yield to the threads with lower priority.
|
#
9363e99b |
|
08-Oct-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Remove Thread::next_priority
|
#
b8c1df9b |
|
05-Oct-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Add O(1) lookup and insertion priority queue
|
#
e85e399f |
|
17-Mar-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
commpage: randomize position of commpage This patch introduces randomization of commpage position. From now on commpage table contains offsets from begining to of the commpage to the particular commpage entry. Similary addresses of symbols in ELF memory image "commpage" are just offsets from the begining of the commpage. This patch also updates KDL so that commpage entries are recognized and shown correctly in stack trace. An update of Debugger is yet to be done.
|
#
25871c68 |
|
04-Aug-2012 |
Alex Smith <alex@alex-smith.me.uk> |
Removed Thread::fault_callback, no longer necessary now that vm86 is gone.
|
#
24df6592 |
|
11-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Merged signals-merge branch into trunk with the following changes: * Reorganized the kernel locking related to threads and teams. * We now discriminate correctly between process and thread signals. Signal handlers have been moved to teams. Fixes #5679. * Implemented real-time signal support, including signal queuing, SA_SIGINFO support, sigqueue(), sigwaitinfo(), sigtimedwait(), waitid(), and the addition of the real-time signal range. Closes #1935 and #2695. * Gave SIGBUS a separate signal number. Fixes #6704. * Implemented <time.h> clock and timer support, and fixed/completed alarm() and [set]itimer(). Closes #5682. * Implemented support for thread cancellation. Closes #5686. * Moved send_signal() from <signal.h> to <OS.h>. Fixes #7554. * Lots over smaller more or less related changes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42116 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4535495d |
|
10-Jan-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Merged the signals branch into trunk, with these changes: * The team and thread kernel structures have been renamed to Team and Thread respectively and moved into the new BKernel namespace. * Several (kernel add-on) sources have been converted from C to C++ since private kernel headers are included that are no longer C compatible. Changes after merging: * Fixed gcc 2 build (warnings mainly in the scary firewire bus manager). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40196 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
88e38c17 |
|
16-Dec-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Replace uses of obsolescent BReference[able] API. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39870 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2d8d1cdb |
|
15-Dec-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Implemented a generic way to associate data with a team which is automatically cleaned up when the team is deleted: Class AssociatedData is the base class for a data item, AssociatedDataOwner a container for them (struct team derives from it). Functions team_associate_data() and team_dissociate_data() add/remove data. * Turned sTeamHash into a BOpenHashTable (necessary since struct team is no longer a POD). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39860 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
eeecbf6f |
|
15-Dec-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
The header is no longer included from pure C sources, so we can finally freely use C++. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39859 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
13b81a3b |
|
30-Oct-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added new thread flag THREAD_FLAGS_SINGLE_STEP, which is set to indicate that userland single-stepping is enabled for the thread. * x86_exit_user_debug_at_kernel_entry(): Always store DR6 and DR7 in the CPU structure, not only when breakpoints are installed. * x86_handle_debug_exception(): When encountering a syscall single-step, also set the THREAD_FLAGS_DEBUG_THREAD thread flag. Otherwise the B_THREAD_DEBUG_STOP would be ignored. * x86 interrupt handling, DISABLE_BREAKPOINTS(): - Renamed to STOP_USER_DEBUGGING(). - Now it also call x86_exit_user_debug_at_kernel_entry() when THREAD_FLAGS_SINGLE_STEP is set, so that the debug registers are saved. Fixes #6751. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39201 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7f0bff63 |
|
07-Apr-2010 |
Axel Dörfler <axeld@pinc-software.de> |
* Fixed typo. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36058 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2be99447 |
|
06-Apr-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added some comments to the thread flags. * Added new thread flag THREAD_FLAGS_ALWAYS_RESTART_SYSCALL. If set, it forces syscall restart even when a signal handler without SA_RESTART was invoked. * Fixed sigwait(): If one of requested signals wasn't already pending it would never wake up. Also, the syscall always needs to be restarted, if interrupted by another signal. * Renamed a bunch of the POSIX signal function implementations which did return an error code directly (instead via errno). Added correct POSIX functions where needed. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36054 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7778bccf |
|
13-Mar-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
sigsuspend() would previously wake up correctly when a matching signal was received, but if the signal was in the thread's signal block mask, it would not be handled. Added thread::sig_temp_enabled, an additional mask of not blocked signals, which is set by sigsuspend() and evaluated and reset by handle_signals(). Fixes #5567. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35836 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5662ae45 |
|
20-Jan-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Changed the team shutdown process a bit: * The threads beside the main thread are killed earlier now (in the new team_shutdown_team()), before removing the team from the team hash and from its process group. This fixes #5296. * Use a condition variable instead of a semaphore to wait for the non-main threads to die. We notify the condition right after a thread has left the team. The semaphore was released by the undertaker. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35196 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3533b659 |
|
10-Dec-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Reintroduced the SMP_MSG_RESCHEDULE_IF_IDLE ICI message. This time implemented by means of an additional member in cpu_ent. * Removed thread::keep_scheduled and the related functions. The feature wasn't used yet and wouldn't have worked as implemented anyway. * Resurrected an older, SMP aware version of our simple scheduler and made it the default instead of the affine scheduler. The latter is in no state to be used yet. It causes enormous latencies (I've seen up to 0.1s) even when six or seven CPUs were idle at the same time, totally killing parallelism. That's also the reason why a -j8 build was slower than a -j2. This is no longer the case. On my machine the -j2 build takes about 10% less time now and the -j8 build saves another 20%. The latter is not particularly impressive (compared with Linux), but that seems to be due to lock contention. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34615 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b0db552c |
|
01-Dec-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Renamed vm_address_space to VMAddressSpace. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34422 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
86a999ad |
|
26-Oct-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* delete_owned_ports() no longer scans the whole port array for ports belonging to the owning team. * Instead, the team now maintains a list containing the ports it owns. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33771 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ddbe1200 |
|
22-Oct-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Semaphores are now put into the team struct in a doubly linked list. * This makes sem_delete_owned_sems() a lot more efficient; before it would need to scan the entire semaphore table. * This speeds up the test build of the kernel by another 2 seconds (with KDEBUG=2) on my laptop. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33743 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
68d9d880 |
|
22-Oct-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Just use the heap instead of cbuf for send_data(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33722 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
dc707c28 |
|
29-Mar-2009 |
Rene Gollent <anevilyak@gmail.com> |
Small cleanup, no functional change. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29784 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0296b82a |
|
25-Mar-2009 |
Rene Gollent <anevilyak@gmail.com> |
Add several extra scheduler hook functions to allow the scheduler(s) to maintain private housekeeping data on the thread structs. These hooks are called on thread creation/destruction and when prepping a thread for use. Review welcome. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29721 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5ecc4b37 |
|
01-Mar-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Introduced ref-counting for the I/O contexts. * The I/O context related vfs_*() functions have io_context* instead of void* parameters/return values, now. * vfs_new_io_context(): Lock the parent I/O context before getting its table size. Otherwise the table size could change until we do. * vfs_resize_fd_table(): Fixed use of MutexLocker. We created only a temporary object, not one with function scope. * Renamed load_image_etc() to load_image_internal() and added a parameter for specifying the parent team of the one to create. * Introduced a kernel private load_image_etc() with a few more arguments than load_image(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29375 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2c1e463c |
|
05-Nov-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Removed B_{MIN|MAX}_PRIORITY from OS.h - they were never really intended as public defines. They are now called THREAD_{MIN|MAX}_SET_PRIORITY to better reflect what they are for. Minimum priority is now 1, ie. you no longer can set another thread to the idle priority. This fixes part of ticket #2959. * set_thread_priority() will no longer allow to change the priority of the idle thread to something else. This fixes the rest of ticket #2959. * Automatic whitespace cleanup in OS.h. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28521 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6503e5d9 |
|
11-Oct-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added functions to pin a thread to the current CPU (i.e. it will only be scheduled on that CPU) and to avoid unscheduling it. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27974 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
23884ae0 |
|
19-Sep-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Introduced a callback field in the thread structure. It can be set in an interrupt handler and will be executed right before returning from the interrupt. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27648 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
232fd3ba |
|
03-Sep-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Moved the wait type definitions to <thread_defs.h>. We're going to use them in userland, too. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27301 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3b3e3805 |
|
30-Aug-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added thread::io_priority field and functions to get/set it. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27247 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6ae7f687 |
|
16-Aug-2008 |
Salvatore Benedetto <salvatore.benedetto@gmail.com> |
* Reworked the way sem_undo requests are processed by following Ingo suggestions: instead of having one global sem_undo list, we now have two local list, one per semaphore set and one per team which is held in its xsi_sem_context structure, along with a mutex. A mutex has also been added to the semaphore set class in order to protect the local list, but also in order to (hopefully) improve concurrency. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26993 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
15374c5d |
|
02-Aug-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Renamed thread_spinlock and team_spinlock to gThreadSpinlock and gTeamSpinlock. * Renamed the static global variables in smp.c to match our style guide. * Minor other cleanup. * Removed superfluous white space. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26730 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
12c9f176 |
|
31-Jul-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added thread block type constant for rw_locks, so that they are listed correctly by the "thread" and "threads" debugger commands. * Added "rwlock" debugger command. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26703 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
47ca7595 |
|
28-Jul-2008 |
Axel Dörfler <axeld@pinc-software.de> |
First patch by Salvatore to implement XSI semaphores with a few changes by myself: * renamed xsi_do_undo() to xsi_sem_undo() (there is more to XSI than sems). * Fixed coding style issues in sys/sem.h and xsi_sem.cpp. * Added _kern_*() syscall prototypes to syscalls.h. * Added a TODO in xsi_sem.cpp and xsi_semaphore.h about moving union semun to a shared header. * Made the team::xsi_sem_undo_requests int32 - due to padding, it would have needed 4 bytes anyway; please always use specific types over int/short/long. * xsi_sem_undo() now checks if it needs to do anything - the calls in team.cpp no longer needs to do this. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26676 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
91015353 |
|
29-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added new kernel thread "undertaker" which gets rid of dead thread remains. This replaces the previous mechanism of switching the thread to a dedicated death stack. We might consider moving more cleanup work to the undertaker, but that seems a little more involved. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25704 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7da0a81c |
|
21-May-2008 |
Axel Dörfler <axeld@pinc-software.de> |
Patch by Jan Klötzke (with additional TODO comments): * Add a "fault_callback" to the thread structure which is called when a unhandled page fault happens in user space. A SIGSEGV will only be sent if the callback returns "true". git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25609 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6b202f4e |
|
13-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Introduced new header directory headers/private/system which is supposed to contain headers shared by kernel and userland (mainly libroot). * Moved quite a few private kernel headers to the new location. Split several kernel headers into a shared part and one that is still kernel private. Adjusted all affected Jamfiles and source in the standard x86 build accordingly. The build for other architectures and for test code may be broken. * Quite a bit of userland code still includes private kernel headers. Mostly those are <util/*> headers. The ones that aren't strictly kernel-only should be moved to some other place (maybe headers/private/shared/util). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25486 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d648afb8 |
|
11-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* For each userland team the kernel creates an area in the userland address space that is fully locked and marked B_KERNEL_AREA. It can thus be accessed by the kernel without additional checks. * For each userland thread we do create a user_thread structure in that area. The structure is accessible from userland via TLS, using the private get_user_thread() function. * Introduced private userland functions [un]defer_signals(). They can be used to cheaply disable/re-enable signal delivery. They use the user_thread::defer_signals/pending_signals fields which are checked/updated by the kernel. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25451 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5142c2ac |
|
05-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added support for POSIX semaphores (the ones from the XSI extension Realtime option group). The implementation should be complete, but is totally untested yet. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25326 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0c615a01 |
|
01-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Removed old mutex implementation and renamed cutex to mutex. * Trivial adjustments of code using mutexes. Mostly removing the mutex_init() return value check. * Added mutex_lock_threads_locked(), which is called with the threads spinlock being held. The spinlock is released while waiting, of course. This function is useful in cases where the existence of the mutex object is ensured by holding the threads spinlock. * Changed the two instances in the VFS code where an IO context of another team needs to be locked to use mutex_lock_threads_locked(). Before it required a semaphore-based mutex implementation. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25283 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8562499f |
|
30-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Introduced a new locking primitive I called "cutex" (sorry for the name, couldn't resist :-P). It's semantically equivalent to a mutex, but doesn't need a semaphore (it uses thread blocking and a simple queue instead). Initialization can't fail. In fact it is ready to use without initialization when living in the bss segment, also in the early boot process. It's as fast as a benaphore in cases of low lock contention, and faster otherwise. Only disadvantage is the higher immediate memory footprint of 16 bytes. * Changed how the "thread" and "threads" debugger commands list the objects they are waiting for. Cutexes are also included. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25276 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f842b6fa |
|
22-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added THREAD_BLOCK_TYPE_OTHER. * Made the object pointer passed to thread_prepare_to_block() const, so that strings can be passed without casting. Passing a string could maybe be made a convention for THREAD_BLOCK_TYPE_OTHER. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25109 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6cef245e |
|
22-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Detemplatized ConditionVariable{Entry}. Merged them with their respective Private* base class. * Changed sigwait() and sigsuspend() to use thread_block() instead of a condition variable. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25100 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b95f6d47 |
|
22-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Introduced a set of functions (thread_prepare_to_block(), thread_block(), thread_unblock(),...) that allow a thread to wait for something without needing a semaphore or condition variable. It can simply block and another thread can unblock it. Supports timeouts and interrupting. Both semaphores and condition variables use this common mechanism, now. * Semaphores: - Some simplifications due to the thread blocking mechanism. - Changed locking order to sem -> thread. It was the other way around before and when introducing the wait_for_objects() support I had also introduced a situation where the locking was reverse, which could potentially cause a dead lock on SMP systems. - Instead of queueing thread structures, a semaphore queues queued_thread entries now, which are created on the stack. The thread::sem structure could thus be removed. - Added sem_entry::net_count, which is sem_entry::count plus the acquisition count of all waiting threads. This number is needed in remove_thread_from_sem() and instead of computing it there we maintain it. - Fixed remove_thread_from_sem(). It would not unblock threads, if the sem count was <= 0. - Made sem::last_acquirer unconditional. It is actually needed for sem_info::latest_holder. Fixed fill_sem_info() accordingly. - Added some optional tracing output, though only via ktrace_printf(). * Condition variables: - Could be simplified significantly through the use of the thread blocking mechanism. Removed a good deal of unnecessary code. - Moved the ConditionVariableEntry "flags" parameter from Wait() to Add(), and adjusted all places where condition variables are used accordingly. * snooze() uses thread_block_with_timeout() instead of a semaphore. * Simplified thread interrupting in the signal and user debugger code. Instead of separate functions for threads waiting on a semaphore or condititon variable, we only have a single thread_interrupt(), now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25099 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
66aac81e |
|
20-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
We use only a single condition variable (instead of thread different ones) for wait_for_child(), which is notified when any job control condition (child dead, stopped, continued) occurs. These events are relatively rare anyway, and it simplifies the code. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25079 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
75015ff5 |
|
11-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Renamed THREAD_FLAGS_IOCTL_SYSCALL to THREAD_FLAGS_SYSCALL, syscall_restart_ioctl_is_restarted() to syscall_restart_is_restarted, IoctlSyscallFlagUnsetter to SyscallFlagUnsetter, and IoctlSyscallRestartWrapper to SyscallRestartWrapper, as they are no longer only used for ioctl(). * Removed unused syscall_restart_ioctl_handle_post(). * Made SyscallRestartWrapper a lot fancier. Instead of storing a reference to the result value, it stores the value itself, and it features all the interesting operators that make it appear like that value. This simplifies the use of the class quite a bit. * THREAD_FLAGS_SYSCALL is now set for all socket function and the read[v](), write[v]() syscalls. * Added is_syscall() function and net_stack hook to the net stack. * Removed "kernel" parameter from all net_stack_interface and net_socket module hooks. They aren't need any longer, since is_syscall() can be used instead. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24914 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
290946ce |
|
29-Mar-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Implemented some basics for supplementary groups support: - The kernel stores the group IDs in the team structure. They are correctly inherited on fork() and load_image_etc(). - Implemented getgroups() for real, i.e. it retrieves the groups associated with the process. - Implemented setgroups(), initgroups() and (the BSDish) getgrouplist(). The latter two read the group information from the "group database" /etc/group (if existing). - Change the BIND port config, since we do have getgrouplist() now. * The set-uid feature was broken when the path to the executable was relative, since we used stat(), which, in the kernel, uses the kernel IO context. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24669 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4eb35609 |
|
11-Mar-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added real, effective and saved set- user and group IDs to the team structure. They are properly inherited and updated on fork(), load_image(), and exec(). * Implemented the get[e]{u,g}id(), set[[r]e]{u,g}id() family for real. * getgroups() also calls the kernel now, but only returns the effective group ID. Supplementary groups support is still missing. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24359 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4a7f236b |
|
09-Mar-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Process groups are now reference-counted. Processes in a group as well as the death entries of a deceased processes that were in this group and have not yet been reaped hold references to the group, so that it won't be deleted until the group is empty and all gone group members have been reaped. This fixes #1799 at last. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24335 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
562e2f20 |
|
20-Feb-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Removed unused team::pending_signals. * Added team::flags. Currently only used for setting a flag when a team has exec()ed. * Some improvements of _user_setpgid(): - It failed incorrectly when the target process was a process group leader. According to the standard it shall fail when the process is a session leader. Moving a process group leader to another process group is fine, even if that leaves the group leaderless. - Fixed race conditions. We need to recheck the error conditions when we hold the team spinlock. Otherwise the situation could change while we allocated the new process group. This was one of the reasons for bug #1799 -- after the shell fork()'s both parent and child invoke setpgid() for the child. - Fixed behavior for pid == pgid. It doesn't necessarily mean that a new group has to be created. - Fixed update of target process group orphaned state. - Squashed TODO: setpgid() on a child is supposed to fail after the child has exec()ed. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24041 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4048494c |
|
17-Feb-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
axeld + bonefish: * Implemented automatic syscall restarts: - A syscall can indicate that it has been interrupted and can be restarted by setting a respective bit in thread::flags. It can store parameters it wants to be preserved for the restart in thread::syscall_restart::parameters. Another thread::flags bit indicates whether it has been restarted. - handle_signals() clears the restart flag, if the handled signal has a handler function installed and SA_RESTART is not set. Another thread flag (THREAD_FLAGS_DONT_RESTART_SYSCALL) can prevent syscalls from being restarted, even if they could be (not used yet, but we might want to use it in resume_thread(), so that we stay behaviorally compatible with BeOS). - The architecture specific syscall handler restarts the syscall, if the restart flag is set. Implemented for x86 only. - Added some support functions in the private <syscall_restart.h> to simplify the syscall restart code in the syscalls. - Adjusted all syscalls that can potentially be restarted accordingly. - _user_ioctl() sets new thread flag THREAD_FLAGS_IOCTL_SYSCALL while calling the underlying FS's/driver's hook, so that syscall restarts can also be supported there. * thread_at_kernel_exit() invokes handle_signals() in a loop now, as long as the latter indicates that the thread shall be suspended, so that after waking up signals received in the meantime will be handled before the thread returns to userland. Adjusted handle_signals() accordingly -- when encountering a suspending signal we don't check for further signals. * Fixed sigsuspend(): Suspending the thread and rescheduling doesn't result in the correct behavior. Instead we employ a temporary condition variable and interruptably wait on it. The POSIX test suite test passes, now. * Made the switch_sem[_etc]() behavior on interruption consistent. Depending on when the signal arrived (before the call or when already waiting) the first semaphore would or wouldn't be released. Now we consistently release it. * Refactored _user_{read,write}[v]() syscalls. Use a common function for either pair. The iovec version doesn't fail anymore, if anything could be read/written at all. It also checks whether a complete vector could be read/written, so that we won't skip data, if the underlying FS/driver couldn't read/write more ATM. * Some refactoring in the x86 syscall handler: The int 99 and sysenter handlers use a common subroutine to avoid code duplication. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23983 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
34b3b26b |
|
10-Jan-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Merged branch haiku/branches/developer/bonefish/optimization revision 23139 into trunk, with roughly the following changes (for details svn log the branch): * The int 99 syscall handler is now fully in assembly. * Added a sysenter/sysexit handler and use it on Pentiums that support it (via commpage). * Got rid of i386_handle_trap(). A bit of functionality was moved into the assembly handler which now uses a jump table to call C functions handling the respective interrupt. * Some optimizations to get user debugger support code out of the interrupt handling path. * Introduced a thread::flags fields which allows to skip handling of rare events (signals, user debug enabling/disabling) on the common interrupt handling path. * Got rid of the explicit iframe stack. The iframes can still be retrieved by iterating through the stack frames. * Made the commpage an architecture independent feature. It's used for the real time data stuff (instead of creating a separate area). * The x86 CPU modules can now provide processor optimized versions for common functions (currently memcpy() only). They are used in the kernel and are provided to the userland via commpage entries. * Introduced build system feature allowing easy use of C structure member offsets in assembly code. Changes after merging: * Fixed merge conflict in src/system/kernel/arch/x86/arch_debug.cpp (caused by refactoring and introduction of "call" debugger command). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23370 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
92ab20b3 |
|
27-Nov-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added a list of death_entry's to the teams structure. It stores the exit status of (non-main) threads of a team. Fixes bug #1644. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23009 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
636bfc08 |
|
02-Oct-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Renamed fs/vfs_select.cpp to wait_for_objects.cpp and got rid of vfs_select.h, respectively moved most of it into the new kernel private header wait_for_objects.h. * Added new experimental API functions wait_for_objects[_etc](). They work pretty much like poll(), but also for semaphores, ports, and threads. * Removed the "ref" parameter from notify_select_events() and the select_sync_pool functions as well as from fd_ops::fd_[de]select(). It is no longer needed. The FS interface select() hook still has it, though -- the VFS will always pass 0. * de]select_fd() take a select_info* instead of a select_sync* + ref pair, now. Added respective functions for semaphores, ports, and threads. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22416 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
923efaa8 |
|
05-Sep-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* We store the ID of the controlling terminal and the foreground process group ID with the session and let the terminal update them. * Added an "orphaned" flag to the process_group structure and code to maintain it. * Handle the death of a controlling process correctly: The foreground process group gets a SIGHUP and all newly-orphaned process groups containing at least one stopped processes are sent SIGHUP+SIGCONT. * The tty handles the O_NOCTTY flag correctly, now. * The tty handles reads/writes from processes from other sessions correctly, now. * Handle tcsetpgrp() from background processes correctly. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22187 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
24bcf559 |
|
27-Aug-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Introduced new job_control_entry structure which, among other things, is used instead of death_entry for team::dead_children. * Added team::{stopped,continued}_children, which, analoguously to dead_children, are used to track the state of stopped/continued children. * A team does have a job_control_entry, which is allocated at team creation time. It will be inserted into the parent's {stopped,continued}_children lists as the team's main thread is stopped/continued and removed when waitpid() retrieves the child state. When the team dies the entry is detached from the team and goes into the parent's dead_children list. * Removed the wait_for_any field from team_dead_children. It was solely used to avoid deletion of the contained entries in certain situations. wait_for_child() (the waitpid() backend) always deletes an entry now, regardless of whether other threads are waiting; that's in accordance with the waidpid() specification. wait_for_thread() removes the entry only, if the caller is the parent of the respective team. * Introduced team_set_job_control_state() which performes the job control entry transitions between the respective lists and wakes up threads waiting in wait_for_child(). It is invoked on team death and when the team's main thread receives job control signals. * Reorganized wait_for_child(). It handles WCONTINUED and WUNTRACED now, too. Removed a block that interpreted the supplied ID as thread ID. * Added missing parts in waitpid(). Job control starts to work, though it seems to have some glitches. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22088 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ff895459 |
|
27-Aug-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Replaced the team::dead_children::sem semaphore by a condition variable. Due to C code including the header I had to turn it from and aggregated member to a pointer. I'm very close to starting to convert all remaining .c to .cpp files. :-/ * Got rid of the "waiters" field. It was only written, never read. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22084 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ff308b0b |
|
26-Aug-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Condition variables changes: * Removed left-over commented C implementation. * It is now possible for a thread to wait for more than one condition variable at a time. * Made waiting for condition variables optionally interruptable. * Renamed Notify() method to NotifyAll() and added a NotifyOne(), so that it is now possible to wake up only one of the waiting threads. Pretty much untested at the moment. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22081 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0b70ea59 |
|
16-Aug-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* Implemented sigaltstack() and set_signal_stack(), thus closing bug #1401. * On exec() the new function thread_reset_for_exec() is called which clears the signals and cancels an eventually set alarm. Both things weren't done before... * Some minor cleanups. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21989 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
279c6b76 |
|
09-Aug-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Use condition variables when waiting for busy pages or busy caches. * Removed a few instances where the page state was set busy directly after allocating it. This is a no-op, since a page is always busy after allocation. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21875 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
eb117b4b |
|
05-Feb-2007 |
Axel Dörfler <axeld@pinc-software.de> |
Reworked the way thread_yield() works: just setting the thread to B_LOWEST_ACTIVE_PRIORITY for one quantum wasn't really a good idea, as this could get quite expensive for the thread (depending on the system load, it might have taken a long time until the thread was scheduled again, no matter what priority it was). Also, calling thread_yield() in a loop would have taken 100% CPU time. Now, we sort the thread into the queue as with any other thread, but we'll ignore it once. This now guarantees an actual context switch, as well as a much fairer rescheduling policy for threads calling that function. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20077 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2e278745 |
|
29-Jan-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* wait_for_child() now behaves correctly when waiting for children of a specific process group. This fixes bug #996. * As a result, the process group stuff and wait_for_child() got much simpler; get_death_entry() and update_wait_for_any() could go away completely. * If a team goes away, all of its children are now "reparented" to the kernel team, instead of the team's parent - this follows common implementations (and POSIX if I understand it correctly), but not BeOS anymore. The OpenGroup Base says this about this topic: "If a parent process terminates without waiting for all of its child processes to terminate, the remaining child processes shall be assigned a new parent process ID corresponding to an implementation-defined system process." * We wait too long in wait_test_4 which at least puts us on par with Linux; see comment in _user_setpgid(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20010 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6961cdf6 |
|
24-Aug-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Process groups are no longer searched via their team/session, but by using a separate hash. This also allows them to stay valid after the group leader died when there are other teams left in it. This closes bug #1. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18622 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2b6a3688 |
|
20-Aug-2006 |
Axel Dörfler <axeld@pinc-software.de> |
wait_for_child() could eventually hang until another team exited (or forever if it waited for a specific child), as B_RELEASE_ALL opened up a race condition between looking for an existing death entry, and waiting for the dead children semaphore. Now we're counting all waiting threads for teams and groups separately. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18543 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c8882988 |
|
29-May-2006 |
Axel Dörfler <axeld@pinc-software.de> |
The kernel's struct team now has a field to remember where the arguments of a running team to be able to fill in the team_info::args field. Currently, only the path is stored, there, though. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17646 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2bbc6df8 |
|
05-May-2006 |
Axel Dörfler <axeld@pinc-software.de> |
* The kernel now remembers the signal that killed a thread (if it was killed). * As suggested by Korli, the signal is now encoded in the "reason" field of wait_for_child(). * waitpid() now sets the status passed in so that the signal can be read out (but it still doesn't do it's full job). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17338 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
17fee3ea |
|
29-Apr-2006 |
Michael Lotz <mmlr@mlotz.ch> |
Removed the extra info struct in the cpu_ent union and made said union a struct instead. Same as r1137 in NewOS. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17273 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2a03240e |
|
29-Apr-2006 |
Michael Lotz <mmlr@mlotz.ch> |
Reverted my last change as it turned out that the lazy FPU state handling was not SMP safe afterall and the performance gain is questionable. Maybe it'll be implemented correctly in the future. Sorry for any inconvenience this may have cost. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17272 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7eee76e6 |
|
27-Apr-2006 |
Michael Lotz <mmlr@mlotz.ch> |
Implemented lazy FPU state save/restore. In the end mostly ported from NewOS. SMP safe. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17251 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d14af9fd |
|
30-Jan-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Introduced a next_priority field to struct thread that will be used when enqueueing a thread to the run queue. This mechanism is now used for the thread priority boost on semaphore release. Also, those threads are no longer made real time threads, they now get a temporary priority of B_FIRST_REAL_TIME_PRIORITY - 1. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16165 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
35cf5155 |
|
20-Dec-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Replaced arch/thread_struct.h with arch/thread_types.h, and renamed arch/*/thread_struct.h to arch_thread_types.h, so that it can directly be included without having to specify the architecure. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15616 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
96e01a27 |
|
20-Dec-2005 |
Axel Dörfler <axeld@pinc-software.de> |
* Merged vm_virtual_map with vm_address_space - there was no reason to have them apart (this even saves a pointer from vm_virtual_map to its address space) * aspace -> address_space * vm_create_address_space() did not check if creating the semaphore succeeded * Removed team::kaspace - was not really needed (introduced a new vm_kernel_address_space() function that doesn't grab a reference to the address space) * Removed vm_address_space::name - it was just a copy of the team name, anyway, and there is always only one address space per team * Removed aspace_id - the address space is now using the team_id * Some cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15609 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
99c566f6 |
|
02-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Added a team watching mechanism in the kernel, not yet tested (but at least doesn't cause any harm yet :-)). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13888 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0dd3a50b |
|
12-Mar-2005 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
_user_load_image() has a flags parameter now. Added a new structure team_loading_info, which is referenced by the team structure while the team is being loaded.. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@11695 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3c75dcf9 |
|
10-Mar-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Removed team::user_env_base; it's no longer needed. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@11673 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
90bce836 |
|
10-Feb-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Changed the way user/kernel time is tracked for threads. Now, thread_at_kernel_entry() and thread_at_kernel_exit() are always called for userland threads at the appropriate situation (note, I've renamed those from *_atkernel_*). The timing should be more accurate this way, and the thread::last_time_type field is no longer needed: all interrupts are now added to the kernel time (where the time is actually spent). git-svn-id: file:///srv/svn/repos/haiku/trunk/current@11331 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
032fea39 |
|
09-Feb-2005 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added userland debugging support structures to thread and team structures. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@11315 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
97dda329 |
|
13-Dec-2004 |
Axel Dörfler <axeld@pinc-software.de> |
Some header work to reduce dependencies. Also fixes the debug build. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10434 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2080a7c0 |
|
26-Nov-2004 |
Axel Dörfler <axeld@pinc-software.de> |
Added fields to be able to track the time spent in children and threads that are already gone. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10250 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a3a80c27 |
|
20-Nov-2004 |
shatty <shatty@nowhere.fake> |
change vm_address_space to struct vm_address_space git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10063 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
148a8e0c |
|
08-Nov-2004 |
Axel Dörfler <axeld@pinc-software.de> |
Renamed *_stack_region_id with *_stack_area, also replaced region_id with area_id. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9853 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c2452435 |
|
14-Oct-2004 |
Axel Dörfler <axeld@pinc-software.de> |
The group must also know how many wait_for_child() are on it. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9353 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
07265ad7 |
|
14-Oct-2004 |
Axel Dörfler <axeld@pinc-software.de> |
Added new process_session/process_group structures, and added all fields to the team structure to support these concepts. Moved the dead_children stuff into a sub-structure. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9346 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7533ce05 |
|
13-Oct-2004 |
Axel Dörfler <axeld@pinc-software.de> |
Moved the thread::sem fields into their own sub-structure for clarity. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9327 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2500c27b |
|
13-Oct-2004 |
Axel Dörfler <axeld@pinc-software.de> |
Began work for waitpid() functionality. Changed the way a dying thread propagates its exit status and reason: we no longer abuse the semaphore mechanism to carry an extra status value, instead, wait_for_thread() registers a death_entry with the thread that will be filled upon exit. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9322 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1a705b91 |
|
07-Oct-2004 |
Axel Dörfler <axeld@pinc-software.de> |
Removed team::_aspace_id since it already has a direct pointer to it. Changed the way a vm_address_space is deleted: instead of having to explicitly call vm_delete_aspace(), the last vm_put_aspace() will remove it. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9254 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2130a091 |
|
04-Oct-2004 |
Axel Dörfler <axeld@pinc-software.de> |
Added field for the size of the userland stack; a userland stack is allowed to have any stack size, it's not a fixed value (well, at least that's what will happen :)). git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9189 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9ade9e87 |
|
28-Sep-2004 |
Axel Dörfler <axeld@pinc-software.de> |
Added fields for process group and session IDs. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9095 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
655c4f0c |
|
01-Sep-2004 |
Axel Dörfler <axeld@pinc-software.de> |
Resolved the argument type change of _user- vs. _kern_spawn_thread() - introduced a new thread_entry_func typedef in the kernel only. Unlike thread_func, it accepts two arguments - that functionality is not exported to the user, though. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8777 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
31bedae9 |
|
22-Feb-2004 |
Axel Dörfler <axeld@pinc-software.de> |
Replaced SYS_MAX_OS_NAME_LEN with B_OS_NAME_LENGTH. Replaced "addr" with "addr_t". And while I was at it, I also added the additional team parent/child members as found in NewOS change 1930 (not applying the whole change yet). git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6686 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c7a03dad |
|
08-Sep-2003 |
Axel Dörfler <axeld@pinc-software.de> |
list.h is now in util/. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4594 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
564cba31 |
|
03-May-2003 |
Axel Dörfler <axeld@pinc-software.de> |
Some header work: removed unnecessary dependencies to stage2.h, fixed some broken C++ export definitions, added missing licenses etc. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@3152 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a02a5888 |
|
18-Apr-2003 |
Axel Dörfler <axeld@pinc-software.de> |
Added another argument parameter for the thread creation code. Helps implementing a more efficient on_exit_thread(). git-svn-id: file:///srv/svn/repos/haiku/trunk/current@3073 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f3eabb6a |
|
29-Jan-2003 |
Philippe Houdoin <philippe.houdoin@gmail.com> |
Backport time tracking fix from NewOS: thread code now properly traces time spent in user vs kernel mode. The code was just plain broken before http://www.newos.org/cgi-bin/perfbrowse.perl?@describe+1704 git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2599 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a9731b41 |
|
26-Jan-2003 |
Axel Dörfler <axeld@pinc-software.de> |
Housekeeping changes and small bug-fixes: Added new syscall for set_thread_priority(). Replaced the userland syscall snooze_until() with snooze_etc() (the latter has to be exported to userland and realize snooze() and snooze_until()). Cleaned the sources - scheduler functions now have the scheduler_ prefix. Moved signal related stuff into ksignal.h (out of thread.h). Replaced public kernel API with direct exports (i.e. resume_thread() instead of thread_resume_thread()). Removed the thread_create_XXX_thread*() calls, and replaced them with a BeOS compatible set. Made some fields of struct thread a bit prettier. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2569 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
04d145c9 |
|
26-Jan-2003 |
Axel Dörfler <axeld@pinc-software.de> |
The team's image API is now using "list" instead of "kqueue". git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2564 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c6794920 |
|
12-Jan-2003 |
Axel Dörfler <axeld@pinc-software.de> |
Added a queue to the team structure for the registered images. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2423 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1f648057 |
|
07-Jan-2003 |
Axel Dörfler <axeld@pinc-software.de> |
Added new fields for the local storage of "errno" in the kernel and user- level TLS. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2378 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
420a6221 |
|
03-Dec-2002 |
Axel Dörfler <axeld@pinc-software.de> |
Moved thread_types.h to this place. Changed fd.h inlines because team->ioctx is now team->io_context. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2140 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5d4501aa0187e1a8790784dc2ab3382a16660e93 |
|
20-Aug-2015 |
Michael Lotz <mmlr@mlotz.ch> |
Assorted whitespace cleanup and typo fixes.
|
#
52d500e5b4abc36a9c2106de52412da5324ca9ee |
|
28-Oct-2014 |
Michael Lotz <mmlr@mlotz.ch> |
kernel: Workaround for double lock of spinlock in user timers. The thread that is being [un]scheduled already has its time_lock locked in {stop|continue}_cpu_timers(). When updating the TeamTimeUserTimer, the team is asked for its cpu time. Team::CPUTime() then iterates the threads of the team and locks the time_lock of the thread again. This workaround passes a possibly locked thread through the relevant functions so Team::CPUTime() can decide whether or not a thread it iterates needs to be locked or not. This works around #11032 and its duplicates #11314 and #11344.
|
#
95e97463d265c9f4a6e43265ef0f1f63a0825b21 |
|
14-Sep-2014 |
Paweł Dziepak <pdziepak@quarnos.org> |
kernel: add generic wrapper for accessing user memory This patch adds user_access() which can be used to gracefully handle page faults that may happen when accessing user memory. It is used by arch_cpu_user{memcpy, memset, strlcpy}() to allow using optimized functions from the standard library. Currently only x64 uses this, but nothing really is arch specific here. Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
|
#
4ad7d95bac481ad2c29b5ba200adceb18cf1575a |
|
09-Aug-2014 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
Revert "Add sys/ucontext.h" This reverts commit 6ddf93bfbec1ecec76cf119c50327f93f6d4fef8. As pointed out by Ingo, those were moved to sugnal.h in the latest issue (issue 7) of the POSIX spec. Sorry!
|
#
6ddf93bfbec1ecec76cf119c50327f93f6d4fef8 |
|
09-Aug-2014 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
Add sys/ucontext.h * Move ucontext_t and mcontext_t there as that's where POSIX says they should be.
|
#
b167307526897db52743daa0aeffe2a0041abaa8 |
|
16-Mar-2014 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Properly synchronize suspending new thread After load_image() the child thread is suspended and the parent is expected to resume it later. However, it is possible that the parent attempts to resume its child after it has been notified that the image had been loaded but before the child managed to suspend itself. In such case the child would suspends itself after that wake up attempt and, consequently will not be ever resumed. To mitigate that problem flag Thread::going_to_suspend has been added which helps synchronizing thread suspension and continuation in a similar way that "traditional" thread blocking is performed. This means that the child should behave in a following manner: set its going_to_suspend flag, notify the parent (i.e. any thread that may want to resume it), acquire its scheduler_lock and suspend itself if the going_to_suspend flag is set. The parent should follow pattern: clear going_to_suspend flag of the thread that is about to be resumed, acquire that thread scheduler_lock and enqueue it in a run queue if it is suspended. Thanks Oliver for reporting the bug and identifying what causes it.
|
#
d287274dcec634da4973a1b92c97dd14d7c5ecd0 |
|
05-Dec-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
scheduler: Code refactoring
|
#
2b7ea4cddf362859cd3089e3cb95481cda4adc5f |
|
29-Nov-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Remove Thread::next_state
|
#
03fb2d886830e4dd4b344c56725db59f96733216 |
|
07-Nov-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Remove gSchedulerLock * Thread::scheduler_lock protects thread state, priority, etc. * sThreadCreationLock protects thread creation and removal and list of threads in team. * Team::signal_lock and Team::time_lock protect list of threads in team as well. * Scheduler uses its own internal locking.
|
#
72addc62e042d2a39fba1f04e2cc8dadc155adfe |
|
07-Nov-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Introduce Thread::time_lock and Team::time_lock
|
#
3519eb334ac161e88fa56bcef287a2275a1c963e |
|
06-Nov-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Change Thread::team_lock to rw_spinlock
|
#
83983eaf38ac442edaa4418de4b6a389e911c72d |
|
06-Nov-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Remove Thread::alarm
|
#
aa4aca0264aa285e07c0b8e43112ac06803fcd2e |
|
06-Nov-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Protect signal data with Team::signal_lock
|
#
73ad2473e7874b3702cf5b0fdf4c81b747812ed9 |
|
05-Nov-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
Remove remaining unnecessary 'volatile' qualifiers
|
#
ea79da95009a2f916bebbd5d3b57281035548e25 |
|
20-Oct-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Remove support for thread_queue
|
#
29e65827fd93f67acbebcdbbe1f233b004a48e18 |
|
09-Oct-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Remove possibility to yield to all threads Kernel support for yielding to all (including lower priority) threads has been removed. POSIX sched_yield() remains unchanged. If a thread really needs to yield to everyone it can reduce its priority to the lowest possible and then yield (it will then need to manually return to its prvious priority upon continuing).
|
#
0896565a6e405d3543b15772571138d622c7fba9 |
|
08-Oct-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Support sched_yield() properly sched_yield() should not yield to the threads with lower priority.
|
#
9363e99b19d122db7d6684b06d7240fb73255cd2 |
|
08-Oct-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Remove Thread::next_priority
|
#
b8c1df9b004a2602f23d0ad046efbe7924b62847 |
|
05-Oct-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Add O(1) lookup and insertion priority queue
|
#
e85e399fd7b229b8bc92f28928a059876d7216d3 |
|
17-Mar-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
commpage: randomize position of commpage This patch introduces randomization of commpage position. From now on commpage table contains offsets from begining to of the commpage to the particular commpage entry. Similary addresses of symbols in ELF memory image "commpage" are just offsets from the begining of the commpage. This patch also updates KDL so that commpage entries are recognized and shown correctly in stack trace. An update of Debugger is yet to be done.
|
#
25871c6895b536640b3d9f453e95219a54b84d20 |
|
04-Aug-2012 |
Alex Smith <alex@alex-smith.me.uk> |
Removed Thread::fault_callback, no longer necessary now that vm86 is gone.
|
#
24df65921befcd0ad0c5c7866118f922da61cb96 |
|
11-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Merged signals-merge branch into trunk with the following changes: * Reorganized the kernel locking related to threads and teams. * We now discriminate correctly between process and thread signals. Signal handlers have been moved to teams. Fixes #5679. * Implemented real-time signal support, including signal queuing, SA_SIGINFO support, sigqueue(), sigwaitinfo(), sigtimedwait(), waitid(), and the addition of the real-time signal range. Closes #1935 and #2695. * Gave SIGBUS a separate signal number. Fixes #6704. * Implemented <time.h> clock and timer support, and fixed/completed alarm() and [set]itimer(). Closes #5682. * Implemented support for thread cancellation. Closes #5686. * Moved send_signal() from <signal.h> to <OS.h>. Fixes #7554. * Lots over smaller more or less related changes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42116 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4535495d80c86e19e2610e7444a4fcefe3e0f8e6 |
|
10-Jan-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Merged the signals branch into trunk, with these changes: * The team and thread kernel structures have been renamed to Team and Thread respectively and moved into the new BKernel namespace. * Several (kernel add-on) sources have been converted from C to C++ since private kernel headers are included that are no longer C compatible. Changes after merging: * Fixed gcc 2 build (warnings mainly in the scary firewire bus manager). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40196 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
88e38c178a96634d52920e2de8bb3cbd49869f93 |
|
16-Dec-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Replace uses of obsolescent BReference[able] API. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39870 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2d8d1cdbaa4448aa12a6e516b34a2e2cda52533b |
|
15-Dec-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Implemented a generic way to associate data with a team which is automatically cleaned up when the team is deleted: Class AssociatedData is the base class for a data item, AssociatedDataOwner a container for them (struct team derives from it). Functions team_associate_data() and team_dissociate_data() add/remove data. * Turned sTeamHash into a BOpenHashTable (necessary since struct team is no longer a POD). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39860 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
eeecbf6fb8305375bd265cd991d0c7a97e541133 |
|
15-Dec-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
The header is no longer included from pure C sources, so we can finally freely use C++. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39859 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
13b81a3b8eed9750171419427cf6be4a8822c25c |
|
30-Oct-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added new thread flag THREAD_FLAGS_SINGLE_STEP, which is set to indicate that userland single-stepping is enabled for the thread. * x86_exit_user_debug_at_kernel_entry(): Always store DR6 and DR7 in the CPU structure, not only when breakpoints are installed. * x86_handle_debug_exception(): When encountering a syscall single-step, also set the THREAD_FLAGS_DEBUG_THREAD thread flag. Otherwise the B_THREAD_DEBUG_STOP would be ignored. * x86 interrupt handling, DISABLE_BREAKPOINTS(): - Renamed to STOP_USER_DEBUGGING(). - Now it also call x86_exit_user_debug_at_kernel_entry() when THREAD_FLAGS_SINGLE_STEP is set, so that the debug registers are saved. Fixes #6751. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39201 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7f0bff63d055816937b7ad651f879a8988ddc1c2 |
|
07-Apr-2010 |
Axel Dörfler <axeld@pinc-software.de> |
* Fixed typo. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36058 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2be99447d8b1394699cbcbdb36549d9f802aafab |
|
06-Apr-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added some comments to the thread flags. * Added new thread flag THREAD_FLAGS_ALWAYS_RESTART_SYSCALL. If set, it forces syscall restart even when a signal handler without SA_RESTART was invoked. * Fixed sigwait(): If one of requested signals wasn't already pending it would never wake up. Also, the syscall always needs to be restarted, if interrupted by another signal. * Renamed a bunch of the POSIX signal function implementations which did return an error code directly (instead via errno). Added correct POSIX functions where needed. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36054 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7778bccf93001545b6e9e7a839d41146fa000700 |
|
13-Mar-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
sigsuspend() would previously wake up correctly when a matching signal was received, but if the signal was in the thread's signal block mask, it would not be handled. Added thread::sig_temp_enabled, an additional mask of not blocked signals, which is set by sigsuspend() and evaluated and reset by handle_signals(). Fixes #5567. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35836 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5662ae45852e028a196015a0309d04a46ad657f3 |
|
20-Jan-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Changed the team shutdown process a bit: * The threads beside the main thread are killed earlier now (in the new team_shutdown_team()), before removing the team from the team hash and from its process group. This fixes #5296. * Use a condition variable instead of a semaphore to wait for the non-main threads to die. We notify the condition right after a thread has left the team. The semaphore was released by the undertaker. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35196 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3533b6597db4ad65493632da8a92c1f6ea3de149 |
|
10-Dec-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Reintroduced the SMP_MSG_RESCHEDULE_IF_IDLE ICI message. This time implemented by means of an additional member in cpu_ent. * Removed thread::keep_scheduled and the related functions. The feature wasn't used yet and wouldn't have worked as implemented anyway. * Resurrected an older, SMP aware version of our simple scheduler and made it the default instead of the affine scheduler. The latter is in no state to be used yet. It causes enormous latencies (I've seen up to 0.1s) even when six or seven CPUs were idle at the same time, totally killing parallelism. That's also the reason why a -j8 build was slower than a -j2. This is no longer the case. On my machine the -j2 build takes about 10% less time now and the -j8 build saves another 20%. The latter is not particularly impressive (compared with Linux), but that seems to be due to lock contention. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34615 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b0db552cd921ff16d61400ee5a5f855f392e8b87 |
|
01-Dec-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Renamed vm_address_space to VMAddressSpace. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34422 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
86a999adfb7b2ef2261c913a6f91880175c736ec |
|
26-Oct-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* delete_owned_ports() no longer scans the whole port array for ports belonging to the owning team. * Instead, the team now maintains a list containing the ports it owns. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33771 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ddbe12007a455315c7904deeea339dc8827c66ad |
|
22-Oct-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Semaphores are now put into the team struct in a doubly linked list. * This makes sem_delete_owned_sems() a lot more efficient; before it would need to scan the entire semaphore table. * This speeds up the test build of the kernel by another 2 seconds (with KDEBUG=2) on my laptop. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33743 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
68d9d8809bd7ed208ac27f2a747fc0b3b9b78539 |
|
22-Oct-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Just use the heap instead of cbuf for send_data(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33722 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
dc707c28aaf1f72bfc798e85dadaa62d6a9ff469 |
|
29-Mar-2009 |
Rene Gollent <anevilyak@gmail.com> |
Small cleanup, no functional change. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29784 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0296b82ae6a0f131f1fea3edfe21032bd2cf3f5c |
|
25-Mar-2009 |
Rene Gollent <anevilyak@gmail.com> |
Add several extra scheduler hook functions to allow the scheduler(s) to maintain private housekeeping data on the thread structs. These hooks are called on thread creation/destruction and when prepping a thread for use. Review welcome. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29721 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5ecc4b37752beba35afeb7ef446f07c3c6d01971 |
|
01-Mar-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Introduced ref-counting for the I/O contexts. * The I/O context related vfs_*() functions have io_context* instead of void* parameters/return values, now. * vfs_new_io_context(): Lock the parent I/O context before getting its table size. Otherwise the table size could change until we do. * vfs_resize_fd_table(): Fixed use of MutexLocker. We created only a temporary object, not one with function scope. * Renamed load_image_etc() to load_image_internal() and added a parameter for specifying the parent team of the one to create. * Introduced a kernel private load_image_etc() with a few more arguments than load_image(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29375 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2c1e463c7e1b9165731cfb86918d2c67b8496b6c |
|
05-Nov-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Removed B_{MIN|MAX}_PRIORITY from OS.h - they were never really intended as public defines. They are now called THREAD_{MIN|MAX}_SET_PRIORITY to better reflect what they are for. Minimum priority is now 1, ie. you no longer can set another thread to the idle priority. This fixes part of ticket #2959. * set_thread_priority() will no longer allow to change the priority of the idle thread to something else. This fixes the rest of ticket #2959. * Automatic whitespace cleanup in OS.h. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28521 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6503e5d9c6ab89ebb681b4819b07d3ff4890e5fb |
|
11-Oct-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added functions to pin a thread to the current CPU (i.e. it will only be scheduled on that CPU) and to avoid unscheduling it. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27974 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
23884ae0250a1731e1f880ec0d971c4f32c88eea |
|
19-Sep-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Introduced a callback field in the thread structure. It can be set in an interrupt handler and will be executed right before returning from the interrupt. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27648 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
232fd3bae39bbca5dbdda34e980c2853cff1de6a |
|
03-Sep-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Moved the wait type definitions to <thread_defs.h>. We're going to use them in userland, too. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27301 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3b3e3805f8e693bbb48ab203379efd47fb7e73dc |
|
30-Aug-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added thread::io_priority field and functions to get/set it. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27247 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6ae7f6879ff2131f94b47b14764f65115d9bfdbc |
|
16-Aug-2008 |
Salvatore Benedetto <salvatore.benedetto@gmail.com> |
* Reworked the way sem_undo requests are processed by following Ingo suggestions: instead of having one global sem_undo list, we now have two local list, one per semaphore set and one per team which is held in its xsi_sem_context structure, along with a mutex. A mutex has also been added to the semaphore set class in order to protect the local list, but also in order to (hopefully) improve concurrency. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26993 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
15374c5dbdb2c6b700bb2191887cadad7ef9eb73 |
|
02-Aug-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Renamed thread_spinlock and team_spinlock to gThreadSpinlock and gTeamSpinlock. * Renamed the static global variables in smp.c to match our style guide. * Minor other cleanup. * Removed superfluous white space. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26730 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
12c9f1761f8f6ea4c74c4cf4634b660df1a326d4 |
|
31-Jul-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added thread block type constant for rw_locks, so that they are listed correctly by the "thread" and "threads" debugger commands. * Added "rwlock" debugger command. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26703 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
47ca7595ca54e08dac7482950a35b045e6ad8801 |
|
28-Jul-2008 |
Axel Dörfler <axeld@pinc-software.de> |
First patch by Salvatore to implement XSI semaphores with a few changes by myself: * renamed xsi_do_undo() to xsi_sem_undo() (there is more to XSI than sems). * Fixed coding style issues in sys/sem.h and xsi_sem.cpp. * Added _kern_*() syscall prototypes to syscalls.h. * Added a TODO in xsi_sem.cpp and xsi_semaphore.h about moving union semun to a shared header. * Made the team::xsi_sem_undo_requests int32 - due to padding, it would have needed 4 bytes anyway; please always use specific types over int/short/long. * xsi_sem_undo() now checks if it needs to do anything - the calls in team.cpp no longer needs to do this. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26676 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
91015353227faf43c2493570b5d96a919ff63dd9 |
|
29-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added new kernel thread "undertaker" which gets rid of dead thread remains. This replaces the previous mechanism of switching the thread to a dedicated death stack. We might consider moving more cleanup work to the undertaker, but that seems a little more involved. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25704 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7da0a81c0e1ecc582c580ae0769e5cc8fce220bc |
|
21-May-2008 |
Axel Dörfler <axeld@pinc-software.de> |
Patch by Jan Klötzke (with additional TODO comments): * Add a "fault_callback" to the thread structure which is called when a unhandled page fault happens in user space. A SIGSEGV will only be sent if the callback returns "true". git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25609 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6b202f4e3da73d4c131355fcd82b792d153f84f6 |
|
13-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Introduced new header directory headers/private/system which is supposed to contain headers shared by kernel and userland (mainly libroot). * Moved quite a few private kernel headers to the new location. Split several kernel headers into a shared part and one that is still kernel private. Adjusted all affected Jamfiles and source in the standard x86 build accordingly. The build for other architectures and for test code may be broken. * Quite a bit of userland code still includes private kernel headers. Mostly those are <util/*> headers. The ones that aren't strictly kernel-only should be moved to some other place (maybe headers/private/shared/util). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25486 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d648afb8d7852cc7ca9819315356ec605e2e0ee7 |
|
11-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* For each userland team the kernel creates an area in the userland address space that is fully locked and marked B_KERNEL_AREA. It can thus be accessed by the kernel without additional checks. * For each userland thread we do create a user_thread structure in that area. The structure is accessible from userland via TLS, using the private get_user_thread() function. * Introduced private userland functions [un]defer_signals(). They can be used to cheaply disable/re-enable signal delivery. They use the user_thread::defer_signals/pending_signals fields which are checked/updated by the kernel. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25451 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5142c2ac86c0f020ffa3fc31cea9f1f2f1b6ef91 |
|
05-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added support for POSIX semaphores (the ones from the XSI extension Realtime option group). The implementation should be complete, but is totally untested yet. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25326 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0c615a01ae49634aaf59fbe35b3d55b3bb8890df |
|
01-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Removed old mutex implementation and renamed cutex to mutex. * Trivial adjustments of code using mutexes. Mostly removing the mutex_init() return value check. * Added mutex_lock_threads_locked(), which is called with the threads spinlock being held. The spinlock is released while waiting, of course. This function is useful in cases where the existence of the mutex object is ensured by holding the threads spinlock. * Changed the two instances in the VFS code where an IO context of another team needs to be locked to use mutex_lock_threads_locked(). Before it required a semaphore-based mutex implementation. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25283 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8562499f441ac23a80dd89310dbf2016b681fef9 |
|
30-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Introduced a new locking primitive I called "cutex" (sorry for the name, couldn't resist :-P). It's semantically equivalent to a mutex, but doesn't need a semaphore (it uses thread blocking and a simple queue instead). Initialization can't fail. In fact it is ready to use without initialization when living in the bss segment, also in the early boot process. It's as fast as a benaphore in cases of low lock contention, and faster otherwise. Only disadvantage is the higher immediate memory footprint of 16 bytes. * Changed how the "thread" and "threads" debugger commands list the objects they are waiting for. Cutexes are also included. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25276 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f842b6fa57859c5898273b5ae9c16499d06963cb |
|
22-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added THREAD_BLOCK_TYPE_OTHER. * Made the object pointer passed to thread_prepare_to_block() const, so that strings can be passed without casting. Passing a string could maybe be made a convention for THREAD_BLOCK_TYPE_OTHER. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25109 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6cef245eca821584f07f5a13558f51ec586852e8 |
|
22-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Detemplatized ConditionVariable{Entry}. Merged them with their respective Private* base class. * Changed sigwait() and sigsuspend() to use thread_block() instead of a condition variable. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25100 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b95f6d4710855a27bec41b6fae2b064347780173 |
|
22-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Introduced a set of functions (thread_prepare_to_block(), thread_block(), thread_unblock(),...) that allow a thread to wait for something without needing a semaphore or condition variable. It can simply block and another thread can unblock it. Supports timeouts and interrupting. Both semaphores and condition variables use this common mechanism, now. * Semaphores: - Some simplifications due to the thread blocking mechanism. - Changed locking order to sem -> thread. It was the other way around before and when introducing the wait_for_objects() support I had also introduced a situation where the locking was reverse, which could potentially cause a dead lock on SMP systems. - Instead of queueing thread structures, a semaphore queues queued_thread entries now, which are created on the stack. The thread::sem structure could thus be removed. - Added sem_entry::net_count, which is sem_entry::count plus the acquisition count of all waiting threads. This number is needed in remove_thread_from_sem() and instead of computing it there we maintain it. - Fixed remove_thread_from_sem(). It would not unblock threads, if the sem count was <= 0. - Made sem::last_acquirer unconditional. It is actually needed for sem_info::latest_holder. Fixed fill_sem_info() accordingly. - Added some optional tracing output, though only via ktrace_printf(). * Condition variables: - Could be simplified significantly through the use of the thread blocking mechanism. Removed a good deal of unnecessary code. - Moved the ConditionVariableEntry "flags" parameter from Wait() to Add(), and adjusted all places where condition variables are used accordingly. * snooze() uses thread_block_with_timeout() instead of a semaphore. * Simplified thread interrupting in the signal and user debugger code. Instead of separate functions for threads waiting on a semaphore or condititon variable, we only have a single thread_interrupt(), now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25099 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
66aac81e98b1cf8720817d87a7f1973dc976fb3e |
|
20-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
We use only a single condition variable (instead of thread different ones) for wait_for_child(), which is notified when any job control condition (child dead, stopped, continued) occurs. These events are relatively rare anyway, and it simplifies the code. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25079 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
75015ff525050d1d716f499732c566956c6078ad |
|
11-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Renamed THREAD_FLAGS_IOCTL_SYSCALL to THREAD_FLAGS_SYSCALL, syscall_restart_ioctl_is_restarted() to syscall_restart_is_restarted, IoctlSyscallFlagUnsetter to SyscallFlagUnsetter, and IoctlSyscallRestartWrapper to SyscallRestartWrapper, as they are no longer only used for ioctl(). * Removed unused syscall_restart_ioctl_handle_post(). * Made SyscallRestartWrapper a lot fancier. Instead of storing a reference to the result value, it stores the value itself, and it features all the interesting operators that make it appear like that value. This simplifies the use of the class quite a bit. * THREAD_FLAGS_SYSCALL is now set for all socket function and the read[v](), write[v]() syscalls. * Added is_syscall() function and net_stack hook to the net stack. * Removed "kernel" parameter from all net_stack_interface and net_socket module hooks. They aren't need any longer, since is_syscall() can be used instead. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24914 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
290946ce80e8bf8e7a8e8a8593ea88f3465f5a3f |
|
29-Mar-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Implemented some basics for supplementary groups support: - The kernel stores the group IDs in the team structure. They are correctly inherited on fork() and load_image_etc(). - Implemented getgroups() for real, i.e. it retrieves the groups associated with the process. - Implemented setgroups(), initgroups() and (the BSDish) getgrouplist(). The latter two read the group information from the "group database" /etc/group (if existing). - Change the BIND port config, since we do have getgrouplist() now. * The set-uid feature was broken when the path to the executable was relative, since we used stat(), which, in the kernel, uses the kernel IO context. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24669 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4eb3560949b15e7492c8055eb512e5dd68b2da32 |
|
11-Mar-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added real, effective and saved set- user and group IDs to the team structure. They are properly inherited and updated on fork(), load_image(), and exec(). * Implemented the get[e]{u,g}id(), set[[r]e]{u,g}id() family for real. * getgroups() also calls the kernel now, but only returns the effective group ID. Supplementary groups support is still missing. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24359 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4a7f236b07f4e59aef53a5427eebd01f50c99d00 |
|
09-Mar-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Process groups are now reference-counted. Processes in a group as well as the death entries of a deceased processes that were in this group and have not yet been reaped hold references to the group, so that it won't be deleted until the group is empty and all gone group members have been reaped. This fixes #1799 at last. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24335 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
562e2f204a2de3fd3ae59c846e371c08594e7a57 |
|
20-Feb-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Removed unused team::pending_signals. * Added team::flags. Currently only used for setting a flag when a team has exec()ed. * Some improvements of _user_setpgid(): - It failed incorrectly when the target process was a process group leader. According to the standard it shall fail when the process is a session leader. Moving a process group leader to another process group is fine, even if that leaves the group leaderless. - Fixed race conditions. We need to recheck the error conditions when we hold the team spinlock. Otherwise the situation could change while we allocated the new process group. This was one of the reasons for bug #1799 -- after the shell fork()'s both parent and child invoke setpgid() for the child. - Fixed behavior for pid == pgid. It doesn't necessarily mean that a new group has to be created. - Fixed update of target process group orphaned state. - Squashed TODO: setpgid() on a child is supposed to fail after the child has exec()ed. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24041 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4048494ce44a925d3d1e40e4ffb9abe670b4b827 |
|
17-Feb-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
axeld + bonefish: * Implemented automatic syscall restarts: - A syscall can indicate that it has been interrupted and can be restarted by setting a respective bit in thread::flags. It can store parameters it wants to be preserved for the restart in thread::syscall_restart::parameters. Another thread::flags bit indicates whether it has been restarted. - handle_signals() clears the restart flag, if the handled signal has a handler function installed and SA_RESTART is not set. Another thread flag (THREAD_FLAGS_DONT_RESTART_SYSCALL) can prevent syscalls from being restarted, even if they could be (not used yet, but we might want to use it in resume_thread(), so that we stay behaviorally compatible with BeOS). - The architecture specific syscall handler restarts the syscall, if the restart flag is set. Implemented for x86 only. - Added some support functions in the private <syscall_restart.h> to simplify the syscall restart code in the syscalls. - Adjusted all syscalls that can potentially be restarted accordingly. - _user_ioctl() sets new thread flag THREAD_FLAGS_IOCTL_SYSCALL while calling the underlying FS's/driver's hook, so that syscall restarts can also be supported there. * thread_at_kernel_exit() invokes handle_signals() in a loop now, as long as the latter indicates that the thread shall be suspended, so that after waking up signals received in the meantime will be handled before the thread returns to userland. Adjusted handle_signals() accordingly -- when encountering a suspending signal we don't check for further signals. * Fixed sigsuspend(): Suspending the thread and rescheduling doesn't result in the correct behavior. Instead we employ a temporary condition variable and interruptably wait on it. The POSIX test suite test passes, now. * Made the switch_sem[_etc]() behavior on interruption consistent. Depending on when the signal arrived (before the call or when already waiting) the first semaphore would or wouldn't be released. Now we consistently release it. * Refactored _user_{read,write}[v]() syscalls. Use a common function for either pair. The iovec version doesn't fail anymore, if anything could be read/written at all. It also checks whether a complete vector could be read/written, so that we won't skip data, if the underlying FS/driver couldn't read/write more ATM. * Some refactoring in the x86 syscall handler: The int 99 and sysenter handlers use a common subroutine to avoid code duplication. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23983 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
34b3b26b3b8c46ba46ddde037b10dd173f4936d6 |
|
10-Jan-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Merged branch haiku/branches/developer/bonefish/optimization revision 23139 into trunk, with roughly the following changes (for details svn log the branch): * The int 99 syscall handler is now fully in assembly. * Added a sysenter/sysexit handler and use it on Pentiums that support it (via commpage). * Got rid of i386_handle_trap(). A bit of functionality was moved into the assembly handler which now uses a jump table to call C functions handling the respective interrupt. * Some optimizations to get user debugger support code out of the interrupt handling path. * Introduced a thread::flags fields which allows to skip handling of rare events (signals, user debug enabling/disabling) on the common interrupt handling path. * Got rid of the explicit iframe stack. The iframes can still be retrieved by iterating through the stack frames. * Made the commpage an architecture independent feature. It's used for the real time data stuff (instead of creating a separate area). * The x86 CPU modules can now provide processor optimized versions for common functions (currently memcpy() only). They are used in the kernel and are provided to the userland via commpage entries. * Introduced build system feature allowing easy use of C structure member offsets in assembly code. Changes after merging: * Fixed merge conflict in src/system/kernel/arch/x86/arch_debug.cpp (caused by refactoring and introduction of "call" debugger command). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23370 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
92ab20b3a4994eca38234479d344e80519019652 |
|
27-Nov-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added a list of death_entry's to the teams structure. It stores the exit status of (non-main) threads of a team. Fixes bug #1644. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23009 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
636bfc08aeaaa7f1bab813c5aa2e8e666b40ec64 |
|
02-Oct-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Renamed fs/vfs_select.cpp to wait_for_objects.cpp and got rid of vfs_select.h, respectively moved most of it into the new kernel private header wait_for_objects.h. * Added new experimental API functions wait_for_objects[_etc](). They work pretty much like poll(), but also for semaphores, ports, and threads. * Removed the "ref" parameter from notify_select_events() and the select_sync_pool functions as well as from fd_ops::fd_[de]select(). It is no longer needed. The FS interface select() hook still has it, though -- the VFS will always pass 0. * de]select_fd() take a select_info* instead of a select_sync* + ref pair, now. Added respective functions for semaphores, ports, and threads. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22416 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
923efaa872b9fe4e9e9cae87effe2af5c338b98a |
|
05-Sep-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* We store the ID of the controlling terminal and the foreground process group ID with the session and let the terminal update them. * Added an "orphaned" flag to the process_group structure and code to maintain it. * Handle the death of a controlling process correctly: The foreground process group gets a SIGHUP and all newly-orphaned process groups containing at least one stopped processes are sent SIGHUP+SIGCONT. * The tty handles the O_NOCTTY flag correctly, now. * The tty handles reads/writes from processes from other sessions correctly, now. * Handle tcsetpgrp() from background processes correctly. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22187 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
24bcf55926212cfc26ffbed2cb71fe3ca2b99c68 |
|
27-Aug-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Introduced new job_control_entry structure which, among other things, is used instead of death_entry for team::dead_children. * Added team::{stopped,continued}_children, which, analoguously to dead_children, are used to track the state of stopped/continued children. * A team does have a job_control_entry, which is allocated at team creation time. It will be inserted into the parent's {stopped,continued}_children lists as the team's main thread is stopped/continued and removed when waitpid() retrieves the child state. When the team dies the entry is detached from the team and goes into the parent's dead_children list. * Removed the wait_for_any field from team_dead_children. It was solely used to avoid deletion of the contained entries in certain situations. wait_for_child() (the waitpid() backend) always deletes an entry now, regardless of whether other threads are waiting; that's in accordance with the waidpid() specification. wait_for_thread() removes the entry only, if the caller is the parent of the respective team. * Introduced team_set_job_control_state() which performes the job control entry transitions between the respective lists and wakes up threads waiting in wait_for_child(). It is invoked on team death and when the team's main thread receives job control signals. * Reorganized wait_for_child(). It handles WCONTINUED and WUNTRACED now, too. Removed a block that interpreted the supplied ID as thread ID. * Added missing parts in waitpid(). Job control starts to work, though it seems to have some glitches. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22088 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ff895459b795520dddd83f77c7460ba7810e3c87 |
|
27-Aug-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Replaced the team::dead_children::sem semaphore by a condition variable. Due to C code including the header I had to turn it from and aggregated member to a pointer. I'm very close to starting to convert all remaining .c to .cpp files. :-/ * Got rid of the "waiters" field. It was only written, never read. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22084 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ff308b0b491531f2f3b5d22244d7ac5904133e61 |
|
26-Aug-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Condition variables changes: * Removed left-over commented C implementation. * It is now possible for a thread to wait for more than one condition variable at a time. * Made waiting for condition variables optionally interruptable. * Renamed Notify() method to NotifyAll() and added a NotifyOne(), so that it is now possible to wake up only one of the waiting threads. Pretty much untested at the moment. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22081 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0b70ea5992e7913f4ce19c4bc2ab75273364ff06 |
|
16-Aug-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* Implemented sigaltstack() and set_signal_stack(), thus closing bug #1401. * On exec() the new function thread_reset_for_exec() is called which clears the signals and cancels an eventually set alarm. Both things weren't done before... * Some minor cleanups. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21989 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
279c6b76dc2a862f712eb2222381988f74b7b199 |
|
09-Aug-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Use condition variables when waiting for busy pages or busy caches. * Removed a few instances where the page state was set busy directly after allocating it. This is a no-op, since a page is always busy after allocation. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21875 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
eb117b4bfd8d52824a07804854c2412c9cef90cd |
|
05-Feb-2007 |
Axel Dörfler <axeld@pinc-software.de> |
Reworked the way thread_yield() works: just setting the thread to B_LOWEST_ACTIVE_PRIORITY for one quantum wasn't really a good idea, as this could get quite expensive for the thread (depending on the system load, it might have taken a long time until the thread was scheduled again, no matter what priority it was). Also, calling thread_yield() in a loop would have taken 100% CPU time. Now, we sort the thread into the queue as with any other thread, but we'll ignore it once. This now guarantees an actual context switch, as well as a much fairer rescheduling policy for threads calling that function. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20077 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2e27874523689cd77d4476d85e7be0c57c6c05eb |
|
29-Jan-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* wait_for_child() now behaves correctly when waiting for children of a specific process group. This fixes bug #996. * As a result, the process group stuff and wait_for_child() got much simpler; get_death_entry() and update_wait_for_any() could go away completely. * If a team goes away, all of its children are now "reparented" to the kernel team, instead of the team's parent - this follows common implementations (and POSIX if I understand it correctly), but not BeOS anymore. The OpenGroup Base says this about this topic: "If a parent process terminates without waiting for all of its child processes to terminate, the remaining child processes shall be assigned a new parent process ID corresponding to an implementation-defined system process." * We wait too long in wait_test_4 which at least puts us on par with Linux; see comment in _user_setpgid(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20010 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6961cdf6f2a3f128c2a89160b1ab1534ca5819e9 |
|
24-Aug-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Process groups are no longer searched via their team/session, but by using a separate hash. This also allows them to stay valid after the group leader died when there are other teams left in it. This closes bug #1. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18622 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2b6a36881183ef2d0aee8598ee6ab1666f9ff747 |
|
20-Aug-2006 |
Axel Dörfler <axeld@pinc-software.de> |
wait_for_child() could eventually hang until another team exited (or forever if it waited for a specific child), as B_RELEASE_ALL opened up a race condition between looking for an existing death entry, and waiting for the dead children semaphore. Now we're counting all waiting threads for teams and groups separately. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18543 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c8882988b7f4e5de279d3d659f8a5b394a23360c |
|
29-May-2006 |
Axel Dörfler <axeld@pinc-software.de> |
The kernel's struct team now has a field to remember where the arguments of a running team to be able to fill in the team_info::args field. Currently, only the path is stored, there, though. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17646 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2bbc6df8dc74508eee5a9a04d1b1fa56e6640bc6 |
|
05-May-2006 |
Axel Dörfler <axeld@pinc-software.de> |
* The kernel now remembers the signal that killed a thread (if it was killed). * As suggested by Korli, the signal is now encoded in the "reason" field of wait_for_child(). * waitpid() now sets the status passed in so that the signal can be read out (but it still doesn't do it's full job). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17338 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
17fee3eab70c8e6445c61421d9635b249f80410e |
|
29-Apr-2006 |
Michael Lotz <mmlr@mlotz.ch> |
Removed the extra info struct in the cpu_ent union and made said union a struct instead. Same as r1137 in NewOS. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17273 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2a03240eb11841854880b11dc5e522823f2ecef2 |
|
29-Apr-2006 |
Michael Lotz <mmlr@mlotz.ch> |
Reverted my last change as it turned out that the lazy FPU state handling was not SMP safe afterall and the performance gain is questionable. Maybe it'll be implemented correctly in the future. Sorry for any inconvenience this may have cost. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17272 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7eee76e65a81333e46c8f319d39ccb7f95be53be |
|
27-Apr-2006 |
Michael Lotz <mmlr@mlotz.ch> |
Implemented lazy FPU state save/restore. In the end mostly ported from NewOS. SMP safe. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17251 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d14af9fde63d4a76b347b5d7d92f8379a57941fe |
|
30-Jan-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Introduced a next_priority field to struct thread that will be used when enqueueing a thread to the run queue. This mechanism is now used for the thread priority boost on semaphore release. Also, those threads are no longer made real time threads, they now get a temporary priority of B_FIRST_REAL_TIME_PRIORITY - 1. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16165 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
35cf51550c32869deb2225442bb75f9fef4d262e |
|
20-Dec-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Replaced arch/thread_struct.h with arch/thread_types.h, and renamed arch/*/thread_struct.h to arch_thread_types.h, so that it can directly be included without having to specify the architecure. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15616 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
96e01a27bffd323883c58cf6c2f0f93275a0234e |
|
20-Dec-2005 |
Axel Dörfler <axeld@pinc-software.de> |
* Merged vm_virtual_map with vm_address_space - there was no reason to have them apart (this even saves a pointer from vm_virtual_map to its address space) * aspace -> address_space * vm_create_address_space() did not check if creating the semaphore succeeded * Removed team::kaspace - was not really needed (introduced a new vm_kernel_address_space() function that doesn't grab a reference to the address space) * Removed vm_address_space::name - it was just a copy of the team name, anyway, and there is always only one address space per team * Removed aspace_id - the address space is now using the team_id * Some cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15609 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
99c566f6c9a2482245e93353eb99afa0ee5cc300 |
|
02-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Added a team watching mechanism in the kernel, not yet tested (but at least doesn't cause any harm yet :-)). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13888 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0dd3a50bb343b9df3a9716d1c07f7079eed546af |
|
12-Mar-2005 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
_user_load_image() has a flags parameter now. Added a new structure team_loading_info, which is referenced by the team structure while the team is being loaded.. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@11695 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3c75dcf98220b1070b15fe444abaf8d9831f0c4d |
|
10-Mar-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Removed team::user_env_base; it's no longer needed. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@11673 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
90bce836e00440cce2de427c851ae003bb3b6813 |
|
10-Feb-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Changed the way user/kernel time is tracked for threads. Now, thread_at_kernel_entry() and thread_at_kernel_exit() are always called for userland threads at the appropriate situation (note, I've renamed those from *_atkernel_*). The timing should be more accurate this way, and the thread::last_time_type field is no longer needed: all interrupts are now added to the kernel time (where the time is actually spent). git-svn-id: file:///srv/svn/repos/haiku/trunk/current@11331 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
032fea39cb8f21caa15a109017a5e951aa999cab |
|
09-Feb-2005 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added userland debugging support structures to thread and team structures. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@11315 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
97dda329edce2caf11004390ff9dce1a5b1a86d1 |
|
13-Dec-2004 |
Axel Dörfler <axeld@pinc-software.de> |
Some header work to reduce dependencies. Also fixes the debug build. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10434 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2080a7c04fcd2a8abe43d0e33f1e63bb53d7f30f |
|
26-Nov-2004 |
Axel Dörfler <axeld@pinc-software.de> |
Added fields to be able to track the time spent in children and threads that are already gone. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10250 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a3a80c27cc58d0b6d1689c0dbee40a4bf03f0178 |
|
20-Nov-2004 |
shatty <shatty@nowhere.fake> |
change vm_address_space to struct vm_address_space git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10063 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
148a8e0c57d94d6564a35f1255aedea6de720e0d |
|
08-Nov-2004 |
Axel Dörfler <axeld@pinc-software.de> |
Renamed *_stack_region_id with *_stack_area, also replaced region_id with area_id. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9853 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c2452435f2c7ec8cf92ca7f012cab7c0aeecf8f2 |
|
14-Oct-2004 |
Axel Dörfler <axeld@pinc-software.de> |
The group must also know how many wait_for_child() are on it. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9353 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
07265ad7c544af88a7b9ca34e822d252645b04fb |
|
14-Oct-2004 |
Axel Dörfler <axeld@pinc-software.de> |
Added new process_session/process_group structures, and added all fields to the team structure to support these concepts. Moved the dead_children stuff into a sub-structure. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9346 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7533ce05e9f0af0e0af5c2484e908b6026a03f16 |
|
13-Oct-2004 |
Axel Dörfler <axeld@pinc-software.de> |
Moved the thread::sem fields into their own sub-structure for clarity. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9327 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2500c27b9234d09fbfea501ac835d26970205923 |
|
13-Oct-2004 |
Axel Dörfler <axeld@pinc-software.de> |
Began work for waitpid() functionality. Changed the way a dying thread propagates its exit status and reason: we no longer abuse the semaphore mechanism to carry an extra status value, instead, wait_for_thread() registers a death_entry with the thread that will be filled upon exit. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9322 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1a705b91b7d92c80827403194f45b28e8659e24b |
|
07-Oct-2004 |
Axel Dörfler <axeld@pinc-software.de> |
Removed team::_aspace_id since it already has a direct pointer to it. Changed the way a vm_address_space is deleted: instead of having to explicitly call vm_delete_aspace(), the last vm_put_aspace() will remove it. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9254 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2130a091c39f05bdda63f11413b3f6d9f0ac3998 |
|
04-Oct-2004 |
Axel Dörfler <axeld@pinc-software.de> |
Added field for the size of the userland stack; a userland stack is allowed to have any stack size, it's not a fixed value (well, at least that's what will happen :)). git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9189 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9ade9e873d4dd0b32b0f623a6e89a5dc7c04dbb2 |
|
28-Sep-2004 |
Axel Dörfler <axeld@pinc-software.de> |
Added fields for process group and session IDs. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9095 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
655c4f0c9952ce697cd80bdc89c7041d02d1a616 |
|
01-Sep-2004 |
Axel Dörfler <axeld@pinc-software.de> |
Resolved the argument type change of _user- vs. _kern_spawn_thread() - introduced a new thread_entry_func typedef in the kernel only. Unlike thread_func, it accepts two arguments - that functionality is not exported to the user, though. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8777 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
31bedae9eabce07aa4eb81483e05d9c498027d8c |
|
22-Feb-2004 |
Axel Dörfler <axeld@pinc-software.de> |
Replaced SYS_MAX_OS_NAME_LEN with B_OS_NAME_LENGTH. Replaced "addr" with "addr_t". And while I was at it, I also added the additional team parent/child members as found in NewOS change 1930 (not applying the whole change yet). git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6686 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c7a03dadeaf42e5341b34ebd53e798d7053461e1 |
|
08-Sep-2003 |
Axel Dörfler <axeld@pinc-software.de> |
list.h is now in util/. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4594 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
564cba312ebe49860fbb8416737c4de3e6ccd5f2 |
|
03-May-2003 |
Axel Dörfler <axeld@pinc-software.de> |
Some header work: removed unnecessary dependencies to stage2.h, fixed some broken C++ export definitions, added missing licenses etc. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@3152 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a02a5888af17e257161fa59ac3b8ca663b5a2673 |
|
18-Apr-2003 |
Axel Dörfler <axeld@pinc-software.de> |
Added another argument parameter for the thread creation code. Helps implementing a more efficient on_exit_thread(). git-svn-id: file:///srv/svn/repos/haiku/trunk/current@3073 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f3eabb6abdcd0fee264274f5df1bfa6d9dfca9e0 |
|
29-Jan-2003 |
Philippe Houdoin <philippe.houdoin@gmail.com> |
Backport time tracking fix from NewOS: thread code now properly traces time spent in user vs kernel mode. The code was just plain broken before http://www.newos.org/cgi-bin/perfbrowse.perl?@describe+1704 git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2599 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a9731b41c119ec606f9585d2370c0d5d5539eb53 |
|
26-Jan-2003 |
Axel Dörfler <axeld@pinc-software.de> |
Housekeeping changes and small bug-fixes: Added new syscall for set_thread_priority(). Replaced the userland syscall snooze_until() with snooze_etc() (the latter has to be exported to userland and realize snooze() and snooze_until()). Cleaned the sources - scheduler functions now have the scheduler_ prefix. Moved signal related stuff into ksignal.h (out of thread.h). Replaced public kernel API with direct exports (i.e. resume_thread() instead of thread_resume_thread()). Removed the thread_create_XXX_thread*() calls, and replaced them with a BeOS compatible set. Made some fields of struct thread a bit prettier. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2569 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
04d145c94dfb20eabbede267aad6886a9dae04bc |
|
26-Jan-2003 |
Axel Dörfler <axeld@pinc-software.de> |
The team's image API is now using "list" instead of "kqueue". git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2564 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c6794920344634961ce8c7d4d70e0b63b05cb30a |
|
12-Jan-2003 |
Axel Dörfler <axeld@pinc-software.de> |
Added a queue to the team structure for the registered images. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2423 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1f6480576de2ba95269b4731f5fa1d7f4f060771 |
|
07-Jan-2003 |
Axel Dörfler <axeld@pinc-software.de> |
Added new fields for the local storage of "errno" in the kernel and user- level TLS. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2378 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
420a6221ec4741bd7783d859c0e62f4ec8f27663 |
|
03-Dec-2002 |
Axel Dörfler <axeld@pinc-software.de> |
Moved thread_types.h to this place. Changed fd.h inlines because team->ioctx is now team->io_context. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2140 a95241bf-73f2-0310-859d-f6bbb57e9c96
|