summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems (follow)
Commit message (Collapse)AuthorAgeFilesLines
* rtems: Add external functionsSebastian Huber2021-11-182-0/+108
| | | | | | These external functions rtems_scheduler_get_processor() and rtems_scheduler_get_processor_maximum() which may be used by bindings for languages other than C/C++.
* rtems: Use RTEMS_WHO_AM_I for rtems_task_ident()Sebastian Huber2021-11-181-1/+2
|
* rtems: Simplify rtems_semaphore_set_priority()Sebastian Huber2021-11-151-25/+22
| | | | | Do not write to the object referenced by old_priority in error paths. This is in line with other directives.
* score: Fix _CORE_ceiling_mutex_Set_priority()Sebastian Huber2021-11-151-2/+1
| | | | | | | We have to use a second thread queue context to acquire and release the thread wait lock. Close #4356.
* score: Introduce CPU budget operationsSebastian Huber2021-11-153-18/+18
| | | | | | | | | | | | | | This patch set replaces the CPU budget algorithm enumeration with a set of CPU budget operations which implement a particular CPU budget algorithm. This helps to hide the CPU budget algorithm implementation details from the general thread handling. The CPU budget callouts are turned into CPU budget operations. This slightly reduces the size of the thread control block. All schedulers used the default scheduler tick implementation. The tick scheduler operation is removed and the CPU budget operations are directly used in _Watchdog_Tick() if the executing thread uses a CPU budget algorithm. This is performance improvement for all threads which do not use a CPU budget algorithm (default behaviour).
* rtems: Fix rate monotonic statisticsSebastian Huber2021-10-252-35/+14
| | | | | | | | | | | | | | | The rate monotonic period statistics were affected by rtems_cpu_usage_reset(). The logic to detect and work around a CPU usage reset was broken. The Thread_Contol::cpu_time_used is changed to contain the processor time used throughout the entire lifetime of the thread. The new member Thread_Contol::cpu_time_used_at_last_reset is added to contain the processor time used at the time of the last reset through rtems_cpu_usage_reset(). This decouples the resets of the CPU usage and the rate monotonic period statistics. Update #4528.
* rtems: Set postponed jobs in rate-monotonic cancelSebastian Huber2021-10-062-1/+2
| | | | | | | | Set the postponed jobs count to zero in rtems_rate_monotonic_cancel() so that rtems_rate_monotonic_get_status() returns a consistent status for inactive periods. Update #4511.
* rtems: Adjust parameter namesSebastian Huber2021-09-302-13/+13
| | | | | | | Adjust parameter names to match with the declaration. This avoid using a name reserved by the C standard: "time". Close #4035.
* rtems: Justify integer conversionsSebastian Huber2021-09-301-3/+8
| | | | Close #2548.
* rtems: Initialize count of postponed jobsSebastian Huber2021-09-091-0/+1
| | | | | | | | | The rtems_rate_monotonic_get_status() directive returns an arbitrary number for the count of postponed jobs if it is called for a newly created period object. Set the count of postponed jobs to zero during object creation. Close #4511.
* score: Change TOD_LATEST_YEAR to 2099Sebastian Huber2021-09-063-39/+18
| | | | | | | | This simplifies the implementation a bit. Declare _TOD_Days_to_date[] in <rtems/score/todimpl.h>. Make _TOD_Days_per_month[] and _TOD_Days_since_last_leap_year[] static. Update #4338.
* score: Simplify _TOD_Validate()Sebastian Huber2021-09-061-9/+25
| | | | Split up the multi line if statement into smaller parts.
* rtems: Fix partitions with RTEMS_MULIPROCESSINGSebastian Huber2021-08-311-1/+1
| | | | Replace call to removed _Partition_Free() with a call to _Objects_Free().
* score: Replace priority prepend it with an enumSebastian Huber2021-08-121-1/+1
| | | | | | | | Use the new Priority_Group_order enum instead of a boolean to indicated if a priority should be inserted as the first or last node into its priority group. This makes the code more expressive. It is also a bit more efficient since a branch in _Scheduler_Node_set_priority() is avoided and a simple bitwise or operation can be used.
* rtems: Fix rtems_partition_return_buffer()Sebastian Huber2021-08-122-9/+16
| | | | | | | | The rtems_partition_return_buffer() wrongly accepted which were exactly at the buffer area end. Use the buffer area limit address for the range checking. Close #4490.
* score: Simplify calling _Thread_Exit()Sebastian Huber2021-05-262-25/+2
| | | | | Move common code into _Thread_Exit(). This enables a tail call optimization in most cases.
* rtems: Return RTEMS_CALLED_FROM_ISRSebastian Huber2021-05-261-5/+15
| | | | | | | If rtems_task_delete() is called from within interrupt context, then return RTEMS_CALLED_FROM_ISR. This makes the behaviour predictable. Update #4414.
* rtems: Fix task restart within interrupt contextSebastian Huber2021-05-141-7/+1
| | | | | | | | | | | rtems_task_restart() may be called from within interrupt context. So checking only that the thread to restart is equal to the executing thread is insufficient to determine a self restart. We have to also check that no ISR is in progress. Merge _Thread_Restart_other() and _Thread_Restart_self() into one _Thread_Restart() since they share a lot of common code. Close #4412.
* score: Return status in _Thread_Restart_other()Sebastian Huber2021-05-141-3/+4
| | | | This simplifies rtems_task_restart().
* rtems: Check entry point in rtems_task_start()Sebastian Huber2021-05-141-0/+4
| | | | Close #4410.
* rtems: Add TOD_Ticks_validationSebastian Huber2021-05-141-3/+5
| | | | | | Replace defines with an enum. Update #4406.
* rtems: Constify rtems_task_wake_when()Sebastian Huber2021-05-124-10/+7
| | | | | | | | | | | | | | | | Add a parameter to _TOD_Validate() to disable the validation of the ticks member. There are two reasons for this change. Firstly, in rtems_task_wake_when() was a double check for time_buffer == NULL (one in rtems_task_wake_when() and one in _TOD_Validate()). Secondly, the ticks member is ignored by rtems_task_wake_when(). This was done with a write of zero to the ticks member and thus a modification of the user-provided structure. Now the structure is no longer modified. Using a mask parameter is quite efficient. You just have to load an immediate value and there are no additional branches in _TOD_Validate(). Close #4406.
* rtems: Use rtems_clock_get_ticks_per_second()Sebastian Huber2021-05-121-2/+2
| | | | This avoids an integer division at runtime.
* _TOD_Validate(): Fix incorrect return codeFrank Kühndel2021-05-124-33/+44
| | | | | | | | | | | | | | | This patch fixes bug #4403. Directives * rtems_timer_fire_when() * rtems_timer_server_fire_when() * rtems_task_wake_when() are documented to return RTEMS_INVALID_ADDRESS when their time-of-day argument is NULL. But actually they return RTEMS_INVALID_CLOCK. To fix the issue this patch changes _TOD_Validate() to return a status code instead of just true/false. Close #4403
* rtems: Use _Objects_Free_nothing() for msg queuesSebastian Huber2021-05-111-1/+6
| | | | | | | | Use _Objects_Free_nothing() for rtems_message_queue_construct() to avoid unreachable code in _CORE_message_queue_Close() in case only user-provided message buffers are used. Update #4007.
* score: Rename _Stack_Free_nothing()Sebastian Huber2021-05-111-1/+1
| | | | | | | Rename _Stack_Free_nothing() in _Objects_Free_nothing() to make it reusable for the message queue buffers. Update #4007.
* rtems: rtems_scheduler_get_processor_set() statusSebastian Huber2021-05-061-1/+1
| | | | | | | | | In case the processor set is not large enough to contain the processor set owned by the scheduler return RTEMS_INVALID_SIZE instead of RTEMS_INVALID_NUMBER. This is more in line with other directives since the issue is related to the size of an object. Close #4401.
* rtems: rtems_scheduler_ident_by_processor_set()Sebastian Huber2021-05-061-0/+4
| | | | Check for a NULL processor set pointer.
* rtems: Use allocator mutex for timer serverSebastian Huber2021-05-041-4/+2
| | | | | | | The allocator mutex is recursive and already used for the task creation in rtems_timer_initiate_server(). Just use this mutex instead of the once mutex to serialize the initialization. This avoids a dependency on condition variables which are not used here.
* score: Add _Thread_Dispatch_direct_no_return()Sebastian Huber2021-05-021-1/+1
| | | | | | | | | | The __builtin_unreachable() cannot be used with current GCC versions to tell the compiler that a function does not return to the caller, see: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99151 Add a no return variant of _Thread_Dispatch_direct() to avoid generation of dead code.
* Use alias for rtems_task_self() and pthread_self()Sebastian Huber2021-04-301-28/+0
| | | | This may reduce the code size a bit.
* Return status code for _Thread_Start()Sebastian Huber2021-04-271-3/+4
| | | | | This avoids having conditional statements to get the API-specific status code.
* Return status code for _Scheduler_Set_affinity()Sebastian Huber2021-04-271-3/+4
| | | | | This avoids having conditional statements to get the API-specific status code.
* Simplify get affinitiy directivesSebastian Huber2021-04-271-3/+0
| | | | | There is no need to disable thread dispatching to get the affinity of a task.
* Return status code for _Scheduler_Get_affinity()Sebastian Huber2021-04-271-3/+4
| | | | | This avoids having conditional statements to get the API-specific status code.
* rtems: Constify timer fire when directivesSebastian Huber2021-04-272-2/+2
| | | | Close #4392.
* rtems: Check for NULL config in task constructSebastian Huber2021-04-231-0/+4
| | | | | | | Since there are already excessive NULL pointer checks in the Classic API, do this also in rtems_task_construct(). Update #3959.
* rtems: Check for NULL config in msgq constructSebastian Huber2021-04-231-0/+4
| | | | | | | Since there are already excessive NULL pointer checks in the Classic API, do this also in rtems_message_queue_construct(). Update #4007.
* clock:_TOD_To_seconds(): Fix year 2514 overflowFrank Kühndel2021-04-212-1/+2
| | | | | | | | | | | | | | | | | | | | | | | This patch fixes issue #4338 by changing _TOD_Validate() to only accept years till 2105. This requires another patch to change the documentation of rtems_clock_set() and other affected API functions (indicating the end date is 2105 not 2514). I tried to support till year 2514 but it turned out that this needs changing the Timer Manager too. That in turn would mean to change _TOD_Seconds_since_epoch( void ) from 32 to 64 bit. Sebastian pointed out that a naive extension leads to trouble with 32 bit processors. He deemed a safe re-implementation too costly performance wise considering that year 2106 is far away and current binaries using RTEMS Classic API are unlikely to be in use by 2106. The constant TOD_SECONDS_AT_2100_03_01_00_00 in cpukit/rtems/src/clocktodtoseconds.c happens to be wrong by 1 hour. When setting the date 2100-Feb-28 23:59:59 and then reading the date again you will find yourself in 2100-Feb-27. Update #4338
* score: Replace Objects_Name_or_id_lookup_errorsSebastian Huber2021-04-074-36/+9
| | | | | Replace Objects_Name_or_id_lookup_errors with new Status_Control codes. Get rid of the _Status_Object_name_errors_to_status lookup table.
* score: Fix internal error status numberSebastian Huber2021-04-071-0/+22
| | | | | | The value of STATUS_CLASSIC_INTERNAL_ERROR must be equal to RTEMS_INTERNAL_ERROR. Add static assertions to ensure that the status codes match.
* rtems: Relax mode checks in rtems_signal_catch()Sebastian Huber2021-03-191-2/+8
| | | | | | | | Check only for invalid modes if a valid handler is presented to rtems_signal_catch(). When NULL is used for the handler, ASR processing is disabled and the mode is not used. Update #4244.
* rtems: Fix rtems_task_mode()Sebastian Huber2021-03-181-16/+22
| | | | | | Do the ASR and preemption mode change only if requested by the mode mask. The bug was introduced by 508f868237225a75e566d9fd304206363cfe441d.
* rtems: Improve semaphore create error checksSebastian Huber2021-03-161-6/+4
| | | | | | Do not mix checks for different error indicators (RTEMS_NOT_DEFINED and RTEMS_INVALID_NUMBER). This simplifies the specification of rtems_semaphore_create().
* rtems: Require RTEMS_PRIORITY for MrsP semaphoresSebastian Huber2021-03-161-2/+2
| | | | | | | | | MrsP semaphores are a generalization of the priority ceiling semaphores for SMP configurations. Priority ceiling semaphores are required to use the priority task wait queue discipline. Require this discipline also for MrsP semaphores. Close #4347.
* rtems: Simplify rtems_signal_catch()Sebastian Huber2021-03-021-1/+19
| | | | | In uniprocessor configurations, we can simplify rtems_signal_catch(). Add a validation test for the SMP special case.
* rtems: Simplify _Signal_Action_handler()Sebastian Huber2021-03-021-8/+3
| | | | | Use the invariant that an ASR is only processed if ASR processing is enabled.
* score: Fix thread initializationSebastian Huber2021-02-261-16/+7
| | | | | | | | Close the thread object if a thread create extension fails. Also call the delete extension to avoid resource leaks in early extensions if a late extension fails. Close #4270.
* score: Simplify core barrierSebastian Huber2021-02-241-14/+15
| | | | | | Use the number of threads which must arrive at the barrier to trip the automatic release also to indicate if the barrier is a manual release barrier.
* score: Remove _Objects_Open()Sebastian Huber2021-02-249-35/+16
| | | | | Use the type safe _Objects_Open_u32() instead. Return the object identifier to enforce a common usage pattern.