annotate packages/kernel/current/include/mlqueue.hxx @ 2348:73a01c1a35ba

* src/sched/mlqueue.cxx (add_thread, yield): * src/sched/sched.cxx (unlock_inner, thread_entry): * include/mlqueue.hxx (class Cyg_SchedThread_Implementation): * include/kapidata.h (CYG_SCHEDTHREAD_TIMESLICE_MEMBER): * include/bitmap.hxx (class Cyg_SchedThread_Implementation): Reimplement timeslicing code. There is now a timeslice_count field in each thread which is moved to and from the per-CPU counter during thread dispatch. This approach has been taken to minimize the changes needed to SMP code. Scheduler specific thread functions handle counter save, restore and reset. These functions are defined (as empty inlines) even when timeslicing is disabled, or in non-timeslicing schedulers, to avoid adding ifdefs to the code (this change actually removes some). * tests/timeslice2.c: * cdl/kernel.cdl: Added timeslice2 test to test behaviour of timeslicing while being preempted.
author nickg
date Mon, 08 Jan 2007 16:20:13 +0000
parents d2c90368aeef
children 74dbf4c3f2e1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1 #ifndef CYGONCE_KERNEL_MLQUEUE_HXX
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2 #define CYGONCE_KERNEL_MLQUEUE_HXX
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4 //==========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
6 // mlqueue.hxx
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
7 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
8 // Multi-Level Queue scheduler class declarations
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
9 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
10 //==========================================================================
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
11 //####ECOSGPLCOPYRIGHTBEGIN####
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
12 // -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
13 // This file is part of eCos, the Embedded Configurable Operating System.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
14 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
15 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
16 // eCos is free software; you can redistribute it and/or modify it under
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
17 // the terms of the GNU General Public License as published by the Free
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
18 // Software Foundation; either version 2 or (at your option) any later version.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
19 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
20 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
21 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
22 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
23 // for more details.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
24 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
25 // You should have received a copy of the GNU General Public License along
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
26 // with eCos; if not, write to the Free Software Foundation, Inc.,
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
27 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
28 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
29 // As a special exception, if other files instantiate templates or use macros
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
30 // or inline functions from this file, or you compile this file and link it
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
31 // with other works to produce a work based on this file, this file does not
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
32 // by itself cause the resulting work to be covered by the GNU General Public
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
33 // License. However the source code for this file must still be made available
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
34 // in accordance with section (3) of the GNU General Public License.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
35 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
36 // This exception does not invalidate any other reasons why a work based on
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
37 // this file might be covered by the GNU General Public License.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
38 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
39 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
210
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
40 // at http://sources.redhat.com/ecos/ecos-license/
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
41 // -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 177
diff changeset
42 //####ECOSGPLCOPYRIGHTEND####
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
43 //==========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
44 //#####DESCRIPTIONBEGIN####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
45 //
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
46 // Author(s): nickg
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
47 // Contributors: jlarmour
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
48 // Date: 1997-09-10
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
49 // Purpose: Define multilevel queue scheduler implementation
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
50 // Description: The classes defined here are used as base classes
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
51 // by the common classes that define schedulers and thread
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
52 // things. The MLQ scheduler in various configurations
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
53 // provides standard FIFO, round-robin and single priority
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
54 // schedulers.
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
55 // Usage: Included according to configuration by
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
56 // <cyg/kernel/sched.hxx>
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
57 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
58 //####DESCRIPTIONEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
59 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
60 //==========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
61
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
62 #include <cyg/kernel/ktypes.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
63
148
8f2f7615e727 Merge from eCos master repository on 2001-01-12-06:43:03-GMT
jlarmour
parents: 132
diff changeset
64 #include <cyg/infra/clist.hxx> // List implementation
8f2f7615e727 Merge from eCos master repository on 2001-01-12-06:43:03-GMT
jlarmour
parents: 132
diff changeset
65
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
66 // -------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
67 // The macro CYGNUM_KERNEL_SCHED_PRIORITIES contains the number of priorities
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
68 // supported by the scheduler.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
69
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
70 #ifndef CYGNUM_KERNEL_SCHED_PRIORITIES
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
71 #define CYGNUM_KERNEL_SCHED_PRIORITIES 32 // define a default
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
72 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
73
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
74 // set bitmap size
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
75 #define CYGNUM_KERNEL_SCHED_BITMAP_SIZE CYGNUM_KERNEL_SCHED_PRIORITIES
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
76
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
77 // -------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
78 // The macro CYGNUM_KERNEL_SCHED_BITMAP_SIZE contains the number of bits that the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
79 // scheduler bitmap should contain. It is derived from the number of prioirity
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
80 // levels defined by the configuration.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
81
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
82 #if CYGNUM_KERNEL_SCHED_BITMAP_SIZE <= 8
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
83 typedef cyg_ucount8 cyg_sched_bitmap;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
84 #elif CYGNUM_KERNEL_SCHED_BITMAP_SIZE <= 16
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
85 typedef cyg_ucount16 cyg_sched_bitmap;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
86 #elif CYGNUM_KERNEL_SCHED_BITMAP_SIZE <= 32
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
87 typedef cyg_ucount32 cyg_sched_bitmap;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
88 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
89 #error Bitmaps greater than 32 bits not currently allowed
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
90 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
91
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
92 // -------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
93 // Customize the scheduler
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
94
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
95 #define CYGIMP_THREAD_PRIORITY 1 // Threads have changable priorities
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
96
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
97 #define CYG_THREAD_MIN_PRIORITY (CYGNUM_KERNEL_SCHED_PRIORITIES-1)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
98 #define CYG_THREAD_MAX_PRIORITY 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
99
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
100 // set default scheduling info value for thread constructors.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
101 #define CYG_SCHED_DEFAULT_INFO CYG_THREAD_MAX_PRIORITY
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
102
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
103 // -------------------------------------------------------------------------
177
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
104 // scheduler Run queue object
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
105
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
106 typedef Cyg_CList_T<Cyg_Thread> Cyg_RunQueue;
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
107
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
108 // -------------------------------------------------------------------------
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
109 // Thread queue implementation.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
110 // This class provides the (scheduler specific) implementation of the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
111 // thread queue class.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
112
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
113 class Cyg_ThreadQueue_Implementation
148
8f2f7615e727 Merge from eCos master repository on 2001-01-12-06:43:03-GMT
jlarmour
parents: 132
diff changeset
114 : public Cyg_CList_T<Cyg_Thread>
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
115 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
116 friend class Cyg_Scheduler_Implementation;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
117 friend class Cyg_SchedThread_Implementation;
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
118
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
119 void set_thread_queue(Cyg_Thread *thread,
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
120 Cyg_ThreadQueue *tq );
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
121
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
122 protected:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
123
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
124 // API used by Cyg_ThreadQueue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
125
148
8f2f7615e727 Merge from eCos master repository on 2001-01-12-06:43:03-GMT
jlarmour
parents: 132
diff changeset
126 Cyg_ThreadQueue_Implementation() {}; // Constructor
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
127
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
128 // Add thread to queue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
129 void enqueue(Cyg_Thread *thread);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
130
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
131 // return first thread on queue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
132 Cyg_Thread *highpri();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
133
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
134 // remove first thread on queue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
135 Cyg_Thread *dequeue();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
136
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 148
diff changeset
137 // Remove thread from queue
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 148
diff changeset
138 void remove(Cyg_Thread *thread);
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 148
diff changeset
139
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
140 };
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
141
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
142 // -------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
143 // This class contains the implementation details of the scheduler, and
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
144 // provides a standard API for accessing it.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
145
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
146 class Cyg_Scheduler_Implementation
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
147 : public Cyg_Scheduler_Base
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
148 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
149 friend class Cyg_ThreadQueue_Implementation;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
150 friend class Cyg_SchedThread_Implementation;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
151 friend class Cyg_HardwareThread;
177
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
152 friend void cyg_scheduler_set_need_reschedule();
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
153
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
154 // Mask of which run queues have ready threads
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
155 cyg_sched_bitmap queue_map;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
156
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
157 // Each run queue is a double linked circular list of threads.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
158 // These pointers point to the head element of each list.
177
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
159 Cyg_RunQueue run_queue[CYGNUM_KERNEL_SCHED_PRIORITIES];
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
160
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
161 #ifdef CYGPKG_KERNEL_SMP_SUPPORT
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
162
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
163 // In SMP systems we additionally keep a counter for each priority
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
164 // of the number of pending but not running threads in each queue.
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
165
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
166 cyg_uint32 pending[CYGNUM_KERNEL_SCHED_PRIORITIES];
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
167
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
168 cyg_sched_bitmap pending_map;
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
169
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
170 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
171
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
172 protected:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
173
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
174 #ifdef CYGSEM_KERNEL_SCHED_TIMESLICE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
175
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
176 // Timeslice counter. This is decremented on each
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
177 // clock tick, and a timeslice is performed each
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
178 // time it zeroes.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
179
177
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
180 static cyg_ucount32 timeslice_count[CYGNUM_KERNEL_CPU_MAX]
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
181 CYGBLD_ANNOTATE_VARIABLE_SCHED;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
182
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
183 #endif
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
184
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
185 Cyg_Scheduler_Implementation(); // Constructor
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
186
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
187 // The following functions provide the scheduler implementation
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
188 // interface to the Cyg_Scheduler class. These are protected
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
189 // so that only the scheduler can call them.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
190
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
191 // choose a new thread
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
192 Cyg_Thread *schedule();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
193
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
194 // make thread schedulable
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
195 void add_thread(Cyg_Thread *thread);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
196
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
197 // make thread un-schedulable
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
198 void rem_thread(Cyg_Thread *thread);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
199
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
200 // register thread with scheduler
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
201 void register_thread(Cyg_Thread *thread);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
202
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
203 // deregister thread
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
204 void deregister_thread(Cyg_Thread *thread);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
205
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
206 // Test the given priority for uniqueness
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
207 cyg_bool unique( cyg_priority priority);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
208
177
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
209 // Set need_reschedule if the supplied thread is of lower
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
210 // priority than any that are currently running.
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
211 static void set_need_reschedule( Cyg_Thread *thread );
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
212 static void set_need_reschedule();
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
213
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
214 public:
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
215 void set_idle_thread( Cyg_Thread *thread, HAL_SMP_CPU_TYPE cpu );
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
216
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
217 #ifdef CYGSEM_KERNEL_SCHED_TIMESLICE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
218
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
219 // If timeslicing is enbled, define a scheduler
177
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
220 // entry points to do timeslicing. This will be
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
221 // called from the RTC DSR.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
222 public:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
223 void timeslice();
177
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
224 void timeslice_cpu();
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
225
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
226 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
227
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
228 };
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
229
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
230 // -------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
231 // Cyg_Scheduler_Implementation inlines
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
232
177
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
233 inline void Cyg_Scheduler_Implementation::set_need_reschedule()
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
234 {
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
235 need_reschedule[CYG_KERNEL_CPU_THIS()] = true;
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
236 }
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
237
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
238
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
239 // -------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
240 // Scheduler thread implementation.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
241 // This class provides the implementation of the scheduler specific parts
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
242 // of each thread.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
243
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
244 class Cyg_SchedThread_Implementation
148
8f2f7615e727 Merge from eCos master repository on 2001-01-12-06:43:03-GMT
jlarmour
parents: 132
diff changeset
245 : public Cyg_DNode_T<Cyg_Thread>
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
246 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
247 friend class Cyg_Scheduler_Implementation;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
248 friend class Cyg_ThreadQueue_Implementation;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
249
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
250 protected:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
251
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
252 cyg_priority priority; // current thread priority
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
253
177
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
254 #ifdef CYGPKG_KERNEL_SMP_SUPPORT
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
255 HAL_SMP_CPU_TYPE cpu; // CPU id of cpu currently running
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
256 // this thread, or CYG_KERNEL_CPU_NONE
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
257 // if not running.
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
258 #endif
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 151
diff changeset
259
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
260 Cyg_SchedThread_Implementation(CYG_ADDRWORD sched_info);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
261
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
262 void yield(); // Yield CPU to next thread
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
263
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
264 static void rotate_queue( cyg_priority pri );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
265 // Rotate that run queue
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
266
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
267 void to_queue_head( void ); // Move this thread to the head
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
268 // of its queue (not necessarily
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
269 // a scheduler queue)
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
270
2348
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
271 #ifdef CYGSEM_KERNEL_SCHED_TIMESLICE
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
272
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
273 cyg_ucount32 timeslice_count;
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
274
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
275 void timeslice_save();
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
276
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
277 void timeslice_restore();
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
278
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
279 void timeslice_reset();
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
280
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
281 #ifdef CYGSEM_KERNEL_SCHED_TIMESLICE_ENABLE
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
282
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
283 // This defines whether this thread is subject to timeslicing.
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
284 // If false, timeslice expiry has no effect on the thread.
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
285
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
286 cyg_bool timeslice_enabled;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
287
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
288 public:
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
289
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
290 void timeslice_enable();
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
291
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
292 void timeslice_disable();
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
293
2348
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
294 #endif
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
295
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
296 #else
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
297
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
298 inline void timeslice_save() {};
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
299 inline void timeslice_restore() {};
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
300 inline void timeslice_reset() {};
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
301
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
302 #endif
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
303
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
304 };
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
305
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
306 // -------------------------------------------------------------------------
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
307 // Cyg_SchedThread_Implementation inlines.
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
308
2348
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
309 #ifdef CYGSEM_KERNEL_SCHED_TIMESLICE
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
310
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
311 inline void Cyg_SchedThread_Implementation::timeslice_save()
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
312 {
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
313 timeslice_count = Cyg_Scheduler_Implementation::timeslice_count[CYG_KERNEL_CPU_THIS()];
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
314 }
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
315
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
316 inline void Cyg_SchedThread_Implementation::timeslice_restore()
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
317 {
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
318 Cyg_Scheduler_Implementation::timeslice_count[CYG_KERNEL_CPU_THIS()] = timeslice_count;
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
319 }
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
320
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
321 inline void Cyg_SchedThread_Implementation::timeslice_reset()
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
322 {
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
323 timeslice_count = CYGNUM_KERNEL_SCHED_TIMESLICE_TICKS;
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
324 }
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
325
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
326 #ifdef CYGSEM_KERNEL_SCHED_TIMESLICE_ENABLE
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
327
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
328 inline void Cyg_SchedThread_Implementation::timeslice_enable()
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
329 {
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
330 timeslice_enabled = true;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
331 }
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
332
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
333 inline void Cyg_SchedThread_Implementation::timeslice_disable()
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
334 {
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
335 timeslice_enabled = false;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
336 }
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
337
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
338 #endif
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
339
2348
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
340 #endif
73a01c1a35ba * src/sched/mlqueue.cxx (add_thread, yield):
nickg
parents: 210
diff changeset
341
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
342
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
343 // -------------------------------------------------------------------------
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
344 #endif // ifndef CYGONCE_KERNEL_MLQUEUE_HXX
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
345 // EOF mlqueue.hxx