[PATCH 1/8] score: Update _Thread_Heir only if necessary
Sebastian Huber
sebastian.huber at embedded-brains.de
Wed Mar 4 18:55:26 UTC 2015
On 04/03/15 16:44, Gedare Bloom wrote:
> On Wed, Mar 4, 2015 at 10:42 AM, Joel Sherrill
> <joel.sherrill at oarcorp.com> wrote:
>>
>> On 3/4/2015 9:07 AM, Sebastian Huber wrote:
>>> Previously, the _Thread_Heir was updated unconditionally in case a new
>>> heir was determined. The _Thread_Dispatch_necessary was only updated in
>>> case the executing thread was preemptible or an internal thread was
>>> unblocked. Change this to update the _Thread_Heir and
>>> _Thread_Dispatch_necessary only in case the currently selected heir
>>> thread is preemptible or a dispatch is forced. Move the schedule
>>> decision into the change priority operation and use the schedule
>>> operation only in rtems_task_mode() in case preemption is enabled or an
>>> ASR dispatch is necessary. This is a behaviour change. Previously, the
>>> RTEMS_NO_PREEMPT also prevented signal delivery in certain cases (not
>>> always). Now, signal delivery is no longer influenced by
>>> RTEMS_NO_PREEMPT. Since the currently selected heir thread is used to
>>> determine if a new heir is chosen, non-preemptible heir threads
>>> currently not executing now prevent a new heir. This may have an
>>> application impact, see change test tm04. Document this change in sp04.
>>>
>>> Update #2273.
>> ...
>>> diff --git a/cpukit/score/src/schedulercbsunblock.c b/cpukit/score/src/schedulercbsunblock.c
>>> index 688253c..bd27aff 100644
>>> --- a/cpukit/score/src/schedulercbsunblock.c
>>> +++ b/cpukit/score/src/schedulercbsunblock.c
>>> @@ -79,10 +79,10 @@ Scheduler_Void_or_thread _Scheduler_CBS_Unblock(
>>> _Thread_Heir->current_priority
>>> )
>>> ) {
>>> - _Thread_Heir = the_thread;
>>> - if ( _Thread_Executing->is_preemptible ||
>>> - the_thread->current_priority == 0 )
>>> - _Thread_Dispatch_necessary = true;
>>> + _Scheduler_Update_heir(
>>> + the_thread,
>>> + the_thread->current_priority == 0
>>> + );
>> The use of an expression without parentheses seems inconsistent
>> style-wise. I don't think this type of code is used often but could
>> you please put parentheses around this?
>>
> This conflicts with our coding conventions to avoid excess parens.
Yes, can we please avoid parentheses in case, since the comma operator
has the weakest precedence.
>
>> This same pattern is in other places so please do it globally across
>> this patch.
>> I think I spotted a total of four places.
>>
>> Also since this indicates that the thread is at the pseudo-interrupt
>> priority,
>> maybe a macro/static inline with a meaningful name would be even
>> better.
>>
> Yes a macro might be good for this test.
Since we started this discussion. It seems that the MPCI thread is the
only thread with a priority of 0. Should this be #ifdef
RTEMS_MULTIPROCESSING? Looks otherwise like dead code. It is possible to
gain a priority of 0 via the priority ceiling protocol. Is this a bug?
--
Sebastian Huber, embedded brains GmbH
Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail : sebastian.huber at embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
More information about the devel
mailing list