summaryrefslogtreecommitdiffstats
path: root/cpukit (follow)
Commit message (Collapse)AuthorAgeFilesLines
* arm: Use local label in _CPU_Context_restore()Sebastian Huber2014-07-011-2/+2
|
* score: Add PER_CPU_OFFSET_EXECUTINGSebastian Huber2014-07-012-17/+31
| | | | | Add PER_CPU_OFFSET_HEIR. Move Per_CPU_Control::executing and Per_CPU_Control::heir for easy offset calculation.
* termios: Make tty list staticSebastian Huber2014-06-302-4/+3
|
* rtems: Delete unused <rtems/rtems/atomic.h>Sebastian Huber2014-06-303-43/+0
|
* score: Workaround for GCC 4.9 for atomic opsSebastian Huber2014-06-302-784/+346
| | | | | | | | | The GCC 4.9 ships its own <stdatomic.h> which is not C++ compatible. The suggested solution was to include <atomic> in case C++ is used. This works at least with GCC 4.9. See also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60932 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60940
* score: Fix _Thread_Start_multitasking() on SMPSebastian Huber2014-06-241-0/+13
| | | | | | | | | | The _CPU_Context_Restart_self() implementations usually assume that self context is executing. FIXME: We have a race condition in _Thread_Start_multitasking() in case another thread already performed scheduler operations and moved the heir thread to another processor. The time frame for this is likely too small to be practically relevant.
* score: Fix thread deletion on SMPSebastian Huber2014-06-231-5/+5
| | | | | | Close the thread object in _Thread_Make_zombie() so that all blocking operations that use _Thread_Get() in the corresponding release directive can find a terminating thread and can complete the operation.
* score: Decouple thread and scheduler nodes on SMPSebastian Huber2014-06-2310-279/+394
| | | | | | | Add a chain node to the scheduler node to decouple the thread and scheduler nodes. It is now possible to enqueue a thread in a thread wait queue and use its scheduler node at the same for other threads, e.g. a resouce owner.
* score: Use chain nodes for ready queue supportSebastian Huber2014-06-235-35/+36
| | | | | This reduces the API to the minimum data structures to maximize the re-usability.
* score: Collect scheduler related fields in TCBSebastian Huber2014-06-236-35/+45
| | | | | Add Thread_Scheduler_control to collect scheduler related fields of the TCB.
* score: Remove scheduler parameter from most opsSebastian Huber2014-06-2311-84/+60
| | | | | | | | | | | | | Remove the scheduler parameter from most high level scheduler operations like - _Scheduler_Block(), - _Scheduler_Unblock(), - _Scheduler_Change_priority(), - _Scheduler_Update_priority(), - _Scheduler_Release_job(), and - _Scheduler_Yield(). This simplifies the scheduler operations usage.
* score: Use default get/set affinity operationSebastian Huber2014-06-207-16/+15
| | | | Add and use SCHEDULER_OPERATION_DEFAULT_GET_SET_AFFINITY.
* score: Fix statement with no effectSebastian Huber2014-06-201-1/+1
|
* score: Fix _Thread_Delay_ended() on SMPSebastian Huber2014-06-205-33/+25
| | | | | | | | | | | | | | | | Suppose we have two tasks A and B and two processors. Task A is about to delete task B. Now task B calls rtems_task_wake_after(1) on the other processor. Task B will block on the Giant lock. Task A progresses with the task B deletion until it has to wait for termination. Now task B obtains the Giant lock, sets its state to STATES_DELAYING, initializes its watchdog timer and waits. Eventually _Thread_Delay_ended() is called, but now _Thread_Get() returned NULL since the thread is already marked as deleted. Thus task B remained forever in the STATES_DELAYING state. Instead of passing the thread identifier use the thread control block directly via the watchdog user argument. This makes _Thread_Delay_ended() also a bit more efficient.
* JFFS2: Add device identifier for the flash deviceSebastian Huber2014-06-132-3/+15
| | | | | It is used in combination with the inode number to uniquely identify a file system node in the system.
* score: Delete _Thread_Set_transient()Sebastian Huber2014-06-131-16/+0
|
* score: _Scheduler_priority_Get_scheduler_info()Sebastian Huber2014-06-131-6/+0
| | | | Delete _Scheduler_priority_Get_scheduler_info().
* score: PR2181: Add _Thread_Yield()Sebastian Huber2014-06-1213-57/+98
| | | | | | | | | | | | | | | | | | | The _Scheduler_Yield() was called by the executing thread with thread dispatching disabled and interrupts enabled. The rtems_task_suspend() is explicitly allowed in ISRs: http://rtems.org/onlinedocs/doc-current/share/rtems/html/c_user/Interrupt-Manager-Directives-Allowed-from-an-ISR.html#Interrupt-Manager-Directives-Allowed-from-an-ISR Unlike the other scheduler operations the locking was performed inside the operation. This lead to the following race condition. Suppose a ISR suspends the executing thread right before the yield scheduler operation. Now the executing thread is not longer in the set of ready threads. The typical scheduler operations did not check the thread state and will now extract the thread again and enqueue it. This corrupted data structures. Add _Thread_Yield() and do the scheduler yield operation with interrupts disabled. This has a negligible effect on the interrupt latency.
* score: Make functions inlineSebastian Huber2014-06-122-155/+114
| | | | | | These functions are used only via the function pointers in the generic SMP scheduler implementation. Provide them as static inline so that the compiler can optimize more easily.
* score: Move NULL pointer check to order functionSebastian Huber2014-06-122-17/+30
| | | | This helps to avoid untestable code for the normal SMP schedulers.
* score: Fix warningsSebastian Huber2014-06-121-2/+1
|
* score: FormatSebastian Huber2014-06-121-43/+43
|
* score: Add missing inlineSebastian Huber2014-06-121-2/+2
|
* score: Fix scheduler context initializerSebastian Huber2014-06-121-3/+3
|
* Add SMP Priority Scheduler with AffinityJoel Sherrill2014-06-118-77/+745
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This scheduler attempts to account for needed thread migrations caused as a side-effect of a thread state, affinity, or priority change operation. This scheduler has its own allocate_processor handler named _Scheduler_SMP_Allocate_processor_exact() because _Scheduler_SMP_Allocate_processor() attempts to prevent an executing thread from moving off its current CPU without considering affinity. Without this, the scheduler makes all the right decisions and then they are discarded at the end. ==Side Effects of Adding This Scheduler== Added Thread_Control * parameter to Scheduler_SMP_Get_highest_ready type so methods looking for the highest ready thread can filter by the processor on which the thread blocking resides. This allows affinity to be considered. Simple Priority SMP and Priority SMP ignore this parameter. + Added get_lowest_scheduled argument to _Scheduler_SMP_Enqueue_ordered(). + Added allocate_processor argument to the following methods: - _Scheduler_SMP_Block() - _Scheduler_SMP_Enqueue_scheduled_ordered() - _Scheduler_SMP_Enqueue_scheduled_ordered() + schedulerprioritysmpimpl.h is a new file with prototypes for methods which were formerly static in schedulerprioritysmp.c but now need to be public to be shared with this scheduler. NOTE: _Scheduler_SMP_Get_lowest_ready() appears to have a path which would allow it to return a NULL. Previously, _Scheduler_SMP_Enqueue_ordered() would have asserted on it. If it cannot return a NULL, _Scheduler_SMP_Get_lowest_ready() should have an assertions.
* score: Fix MrsP root node updateSebastian Huber2014-06-101-1/+1
| | | | Set the new root after the resource tree update.
* score: _Per_CPU_State_wait_for_non_initial_state()Sebastian Huber2014-06-053-24/+72
| | | | | Replace _Per_CPU_State_wait_for_ready_to_start_multitasking() with _Per_CPU_State_wait_for_non_initial_state(). Implement this function.
* score: Avoid NULL pointer accessSebastian Huber2014-06-051-2/+3
| | | | | | Check that the executing thread is not NULL in _Scheduler_Tick(). It may be NULL in case the processor has an optional scheduler assigned and the system was not able to start the processor.
* score: Delete SMP_FATAL_SHUTDOWN_EARLYSebastian Huber2014-06-051-4/+3
| | | | Sort enum lexicographically.
* remove not updated NEWS fileDaniel Hellstrom2014-06-051-7/+0
|
* shell: Add rtems_shell_dup_current_env to get a default env.Chris Johns2014-06-044-20/+40
| | | | | | | | Remove rtems_current_shell_env as this is dangerous because the env can be NULL if used outside of a valid shell with the POSIX key to an env set up. Clean up the usage of rtems_current_shell_env.
* score: Rename _Scheduler_Update()Sebastian Huber2014-06-0415-43/+68
| | | | | | Rename _Scheduler_Update() to _Scheduler_Update_priority(). Add parameter for the new thread priority to avoid direct usage of Thread_Control::current_priority in the scheduler operation.
* score: Replace _Scheduler_Allocate/Free()Sebastian Huber2014-06-0419-92/+99
| | | | | | | | Replace _Scheduler_Allocate() with _Scheduler_Node_initialize(). Remove the return status and thus the node initialization must be always successful. Rename _Scheduler_Free() to _Scheduler_Node_destroy().
* score/sparc: Add support for paravirtualizationChristian Mauderer2014-06-033-18/+45
| | | | | | | Guest systems in paravirtualization environments run usually in user mode. Thus it is not possible to directly access the PSR and TBR registers. Use functions instead of inline assembler to access these registers if RTEMS_PARAVIRT is defined.
* libblock: Avoid recursive mutexSebastian Huber2014-06-031-9/+10
|
* score: Use Resource Handler for MrsP semaphoresSebastian Huber2014-06-032-35/+112
| | | | | This enables proper resource dependency tracking and as a side-effect deadlock detection.
* score: Add resource node to thread control blockSebastian Huber2014-06-033-0/+20
|
* score: Add and use _Thread_Owns_resources()Sebastian Huber2014-06-035-5/+22
|
* score: Add Resource HandlerSebastian Huber2014-06-035-0/+491
| | | | | | | | | | A resource is something that has at most one owner at a time and may have multiple rivals in case an owner is present. The owner and rivals are impersonated via resource nodes. A resource is represented via the resource control structure. The resource controls and nodes are organized as trees. It is possible to detect deadlocks via such a resource tree. The _Resource_Iterate() function can be used to iterate through such a resource tree starting at a top node.
* libblock: Add RTEMS_BDBUF_USE_PTHREADRalf Kirchner2014-06-023-72/+230
| | | | | | Use the PTHREAD mutexes and condition variables if available. This helps on SMP configurations to avoid the home grown condition variables via disabled preemption.
* rtems: Avoid copy and paste in confdefs.hRalf Kirchner2014-06-021-32/+48
| | | | | Add and use CONFIGURE_POSIX_MUTEXES. Add and use CONFIGURE_POSIX_CONDITION_VARIABLES.
* arm: Add ARM_MULTILIB_HAS_BARRIER_INSTRUCTIONSSebastian Huber2014-06-022-0/+7
|
* libblock: Use pthread_once() for initializationRalf Kirchner2014-06-021-29/+25
| | | | | | Enabling and disabling preemption as done for single core will not work for SMP. In the bdbuf initialization preemption handling can be avoided in general by using pthread_once().
* score: _Scheduler_Set_affinity()Sebastian Huber2014-06-023-44/+29
| | | | | Do not change the scheduler with this function. Documentation. Coding style.
* score: _Scheduler_Get_affinity()Sebastian Huber2014-06-024-29/+24
| | | | Drop scheduler parameter. Coding style.
* rtems: Coding styleSebastian Huber2014-06-021-19/+15
|
* cpusetimpl.h: Add _CPU_set_Set() and improve DoxygenJoel Sherrill2014-05-301-25/+69
|
* Minor conditionals to enable building Scheduler Simulator on GNU/LinuxJoel Sherrill2014-05-302-5/+25
| | | | | | | | | | | - rtems/score/assert.h: Scheduler Simulator uses glibc assert.h on GNU/Linux. This will likely need to be adjusted more for other host compilers and C libraries. Also disable _Assert_Not_reached() because some of these paths do actually return to the called on the Scheduler Simulator. - basedefs.h: Do not use noreturn attribute when on Scheduler Simulator. Paths which context switch can return to the command interpreter on the Scheduler Simulator.
* rtems/score/thread*.h: Really correct spelling errorJoel Sherrill2014-05-282-3/+3
|
* rtems/score/thread*.h: TERMINTING to TERMINATINGJoel Sherrill2014-05-282-3/+3
|