source: rtems/cpukit/score/src/threadqrequeue.c @ 96d0b64

4.104.114.84.95
Last change on this file since 96d0b64 was 96d0b64, checked in by Joel Sherrill <joel.sherrill@…>, on 03/05/07 at 21:01:40

2007-03-05 Joel Sherrill <joel@…>

PR 1222/cpukit

  • score/Makefile.am, score/include/rtems/score/coremutex.h, score/include/rtems/score/threadq.h, score/inline/rtems/score/coremutex.inl, score/src/coremsgsubmit.c, score/src/coremutexsurrender.c, score/src/threadchangepriority.c, score/src/threadclearstate.c, score/src/threadhandler.c, score/src/threadinitialize.c, score/src/threadqdequeuefifo.c, score/src/threadqdequeuepriority.c, score/src/threadqenqueue.c, score/src/threadqenqueuefifo.c, score/src/threadqenqueuepriority.c, score/src/threadqextractfifo.c, score/src/threadqextractpriority.c, score/src/threadsetstate.c: Enhance so that when the prioirity of a thread that is blocked on a priority based thread queue is changed, that its placement in the queue is reevaluated based upon the new priority. This enhancement includes modifications to the SuperCore? as well as new test cases.
  • score/src/threadqrequeue.c: New file.
  • Property mode set to 100644
File size: 1.5 KB
Line 
1/*
2 *  Thread Queue Handler
3 *
4 *
5 *  COPYRIGHT (c) 1989-2006.
6 *  On-Line Applications Research Corporation (OAR).
7 *
8 *  The license and distribution terms for this file may be
9 *  found in the file LICENSE in this distribution or at
10 *  http://www.OARcorp.com/rtems/license.html.
11 *
12 *  $Id$
13 */
14
15#include <rtems/system.h>
16#include <rtems/score/chain.h>
17#include <rtems/score/isr.h>
18#include <rtems/score/object.h>
19#include <rtems/score/states.h>
20#include <rtems/score/thread.h>
21#include <rtems/score/threadq.h>
22#include <rtems/score/tqdata.h>
23
24/*PAGE
25 *
26 *  _Thread_queue_Requeue
27 *
28 *  This routine is invoked when a thread changes priority and should be
29 *  moved to a different position on the thread queue.
30 *
31 *  Input parameters:
32 *    the_thread_queue - pointer to a threadq header
33 *    the_thread       - pointer to a thread control block
34 *
35 *  Output parameters: NONE
36 *
37 *  INTERRUPT LATENCY: NONE
38 */
39
40void _Thread_queue_Requeue(
41  Thread_queue_Control *the_thread_queue,
42  Thread_Control       *the_thread
43)
44{
45  /* just in case the thread really wasn't blocked here */
46  if ( !the_thread_queue )
47    return;
48
49  switch ( the_thread_queue->discipline ) {
50    case THREAD_QUEUE_DISCIPLINE_FIFO:
51      /* queueing by FIFO -- nothing to do */
52      break;
53    case THREAD_QUEUE_DISCIPLINE_PRIORITY: {
54      Thread_queue_Control *tq = the_thread_queue;
55
56      _Thread_queue_Enter_critical_section( tq );
57        _Thread_queue_Extract_priority_helper( tq, the_thread, TRUE );
58        _Thread_queue_Enqueue_priority( tq, the_thread );
59      }
60      break;
61   }
62}
63
Note: See TracBrowser for help on using the repository browser.