score: PR2174: Add workaround

Add _Scheduler_FIXME_thread_priority_queues_are_broken to prevent thread
priority queues in case an EDF scheduler is used.
This commit is contained in:
Sebastian Huber
2014-03-24 08:51:37 +01:00
parent 9b44339c14
commit 1fac361fb9
3 changed files with 17 additions and 0 deletions

View File

@@ -781,6 +781,12 @@ const rtems_libio_helper rtems_fs_init_helper =
NULL, /* Scheduler Specific Data Pointer */
CONFIGURE_SCHEDULER_ENTRY_POINTS /* Scheduler Operations */
};
#if defined(CONFIGURE_SCHEDULER_EDF)
const bool _Scheduler_FIXME_thread_priority_queues_are_broken = true;
#else
const bool _Scheduler_FIXME_thread_priority_queues_are_broken = false;
#endif
#endif
/*

View File

@@ -184,6 +184,12 @@ void _Scheduler_default_Start_idle(
Per_CPU_Control *processor
);
/*
* See also PR2174: Memory corruption with EDF scheduler and thread priority
* queues.
*/
extern const bool _Scheduler_FIXME_thread_priority_queues_are_broken;
/**@}*/
#ifdef __cplusplus

View File

@@ -20,6 +20,7 @@
#include <rtems/score/threadqimpl.h>
#include <rtems/score/chainimpl.h>
#include <rtems/score/scheduler.h>
void _Thread_queue_Initialize(
Thread_queue_Control *the_thread_queue,
@@ -28,6 +29,10 @@ void _Thread_queue_Initialize(
uint32_t timeout_status
)
{
if ( _Scheduler_FIXME_thread_priority_queues_are_broken ) {
the_discipline = THREAD_QUEUE_DISCIPLINE_FIFO;
}
the_thread_queue->state = state;
the_thread_queue->discipline = the_discipline;
the_thread_queue->timeout_status = timeout_status;