source: rtems/cpukit/score/Makefile.am @ 238629f

4.115
Last change on this file since 238629f was 238629f, checked in by Joel Sherrill <joel.sherrill@…>, on 05/19/14 at 20:26:55

Add SMP Priority Scheduler with Affinity

This scheduler attempts to account for needed thread migrations caused
as a side-effect of a thread state, affinity, or priority change operation.

This scheduler has its own allocate_processor handler named
_Scheduler_SMP_Allocate_processor_exact() because
_Scheduler_SMP_Allocate_processor() attempts to prevent an executing
thread from moving off its current CPU without considering affinity.
Without this, the scheduler makes all the right decisions and then
they are discarded at the end.

==Side Effects of Adding This Scheduler==

Added Thread_Control * parameter to Scheduler_SMP_Get_highest_ready type
so methods looking for the highest ready thread can filter by the processor
on which the thread blocking resides. This allows affinity to be considered.
Simple Priority SMP and Priority SMP ignore this parameter.

+ Added get_lowest_scheduled argument to _Scheduler_SMP_Enqueue_ordered().

+ Added allocate_processor argument to the following methods:

  • _Scheduler_SMP_Block()
  • _Scheduler_SMP_Enqueue_scheduled_ordered()
  • _Scheduler_SMP_Enqueue_scheduled_ordered()

+ schedulerprioritysmpimpl.h is a new file with prototypes for methods

which were formerly static in schedulerprioritysmp.c but now need to
be public to be shared with this scheduler.

NOTE:

_Scheduler_SMP_Get_lowest_ready() appears to have a path which would
allow it to return a NULL. Previously, _Scheduler_SMP_Enqueue_ordered()
would have asserted on it. If it cannot return a NULL,
_Scheduler_SMP_Get_lowest_ready() should have an assertions.

  • Property mode set to 100644
File size: 14.7 KB
Line 
1include $(top_srcdir)/automake/multilib.am
2include $(top_srcdir)/automake/compile.am
3
4SUBDIRS = cpu
5
6## include
7
8include_rtemsdir = $(includedir)/rtems
9
10include_rtems_HEADERS = include/rtems/debug.h
11include_rtems_HEADERS += include/rtems/system.h
12include_rtems_HEADERS += include/rtems/seterr.h
13
14include_rtems_scoredir = $(includedir)/rtems/score
15
16include_rtems_score_HEADERS = include/rtems/score/address.h
17include_rtems_score_HEADERS += include/rtems/score/apiext.h
18include_rtems_score_HEADERS += include/rtems/score/apimutex.h
19include_rtems_score_HEADERS += include/rtems/score/assert.h
20include_rtems_score_HEADERS += include/rtems/score/chain.h
21include_rtems_score_HEADERS += include/rtems/score/chainimpl.h
22include_rtems_score_HEADERS += include/rtems/score/context.h
23include_rtems_score_HEADERS += include/rtems/score/copyrt.h
24include_rtems_score_HEADERS += include/rtems/score/corebarrier.h
25include_rtems_score_HEADERS += include/rtems/score/corebarrierimpl.h
26include_rtems_score_HEADERS += include/rtems/score/coremsg.h
27include_rtems_score_HEADERS += include/rtems/score/coremsgimpl.h
28include_rtems_score_HEADERS += include/rtems/score/coremutex.h
29include_rtems_score_HEADERS += include/rtems/score/coremuteximpl.h
30include_rtems_score_HEADERS += include/rtems/score/coresem.h
31include_rtems_score_HEADERS += include/rtems/score/coresemimpl.h
32include_rtems_score_HEADERS += include/rtems/score/cpuset.h
33include_rtems_score_HEADERS += include/rtems/score/cpusetimpl.h
34include_rtems_score_HEADERS += include/rtems/score/heap.h
35include_rtems_score_HEADERS += include/rtems/score/heapimpl.h
36include_rtems_score_HEADERS += include/rtems/score/protectedheap.h
37include_rtems_score_HEADERS += include/rtems/score/interr.h
38include_rtems_score_HEADERS += include/rtems/score/isr.h
39include_rtems_score_HEADERS += include/rtems/score/isrlevel.h
40include_rtems_score_HEADERS += include/rtems/score/isrlock.h
41include_rtems_score_HEADERS += include/rtems/score/freechain.h
42include_rtems_score_HEADERS += include/rtems/score/mrsp.h
43include_rtems_score_HEADERS += include/rtems/score/mrspimpl.h
44include_rtems_score_HEADERS += include/rtems/score/object.h
45include_rtems_score_HEADERS += include/rtems/score/objectimpl.h
46include_rtems_score_HEADERS += include/rtems/score/onceimpl.h
47include_rtems_score_HEADERS += include/rtems/score/percpu.h
48include_rtems_score_HEADERS += include/rtems/score/priority.h
49include_rtems_score_HEADERS += include/rtems/score/prioritybitmap.h
50include_rtems_score_HEADERS += include/rtems/score/prioritybitmapimpl.h
51include_rtems_score_HEADERS += include/rtems/score/profiling.h
52include_rtems_score_HEADERS += include/rtems/score/rbtree.h
53include_rtems_score_HEADERS += include/rtems/score/rbtreeimpl.h
54include_rtems_score_HEADERS += include/rtems/score/resource.h
55include_rtems_score_HEADERS += include/rtems/score/resourceimpl.h
56include_rtems_score_HEADERS += include/rtems/score/scheduler.h
57include_rtems_score_HEADERS += include/rtems/score/schedulerimpl.h
58include_rtems_score_HEADERS += include/rtems/score/schedulercbs.h
59include_rtems_score_HEADERS += include/rtems/score/schedulercbsimpl.h
60include_rtems_score_HEADERS += include/rtems/score/scheduleredf.h
61include_rtems_score_HEADERS += include/rtems/score/scheduleredfimpl.h
62include_rtems_score_HEADERS += include/rtems/score/schedulerpriority.h
63include_rtems_score_HEADERS += include/rtems/score/schedulerpriorityimpl.h
64include_rtems_score_HEADERS += include/rtems/score/schedulerprioritysmp.h
65include_rtems_score_HEADERS += include/rtems/score/schedulersimple.h
66include_rtems_score_HEADERS += include/rtems/score/schedulersimpleimpl.h
67include_rtems_score_HEADERS += include/rtems/score/schedulersmp.h
68include_rtems_score_HEADERS += include/rtems/score/schedulersmpimpl.h
69include_rtems_score_HEADERS += include/rtems/score/smp.h
70include_rtems_score_HEADERS += include/rtems/score/smpbarrier.h
71include_rtems_score_HEADERS += include/rtems/score/smplock.h
72include_rtems_score_HEADERS += include/rtems/score/smpimpl.h
73include_rtems_score_HEADERS += include/rtems/score/stack.h
74include_rtems_score_HEADERS += include/rtems/score/stackimpl.h
75include_rtems_score_HEADERS += include/rtems/score/states.h
76include_rtems_score_HEADERS += include/rtems/score/statesimpl.h
77include_rtems_score_HEADERS += include/rtems/score/sysstate.h
78include_rtems_score_HEADERS += include/rtems/score/thread.h
79include_rtems_score_HEADERS += include/rtems/score/threadimpl.h
80include_rtems_score_HEADERS += include/rtems/score/threaddispatch.h
81include_rtems_score_HEADERS += include/rtems/score/threadq.h
82include_rtems_score_HEADERS += include/rtems/score/threadqimpl.h
83include_rtems_score_HEADERS += include/rtems/score/threadsync.h
84include_rtems_score_HEADERS += include/rtems/score/timespec.h
85include_rtems_score_HEADERS += include/rtems/score/timestamp.h
86include_rtems_score_HEADERS += include/rtems/score/timestamp64.h
87include_rtems_score_HEADERS += include/rtems/score/tls.h
88include_rtems_score_HEADERS += include/rtems/score/tod.h
89include_rtems_score_HEADERS += include/rtems/score/todimpl.h
90include_rtems_score_HEADERS += include/rtems/score/userext.h
91include_rtems_score_HEADERS += include/rtems/score/userextimpl.h
92include_rtems_score_HEADERS += include/rtems/score/watchdog.h
93include_rtems_score_HEADERS += include/rtems/score/watchdogimpl.h
94include_rtems_score_HEADERS += include/rtems/score/wkspace.h
95include_rtems_score_HEADERS += include/rtems/score/cpuopts.h
96include_rtems_score_HEADERS += include/rtems/score/basedefs.h
97
98if HAS_PTHREADS
99include_rtems_score_HEADERS += include/rtems/score/corespinlock.h
100include_rtems_score_HEADERS += include/rtems/score/corespinlockimpl.h
101include_rtems_score_HEADERS += include/rtems/score/corerwlock.h
102include_rtems_score_HEADERS += include/rtems/score/corerwlockimpl.h
103endif
104
105if HAS_MP
106# We only build multiprocessing related files if HAS_MP was defined
107include_rtems_score_HEADERS += include/rtems/score/mpci.h
108include_rtems_score_HEADERS += include/rtems/score/mpciimpl.h
109include_rtems_score_HEADERS += include/rtems/score/mppkt.h
110include_rtems_score_HEADERS += include/rtems/score/objectmp.h
111include_rtems_score_HEADERS += include/rtems/score/threadmp.h
112endif
113
114if HAS_SMP
115include_rtems_score_HEADERS += include/rtems/score/atomic.h
116include_rtems_score_HEADERS += include/rtems/score/cpustdatomic.h
117include_rtems_score_HEADERS += include/rtems/score/schedulerprioritysmpimpl.h
118include_rtems_score_HEADERS += include/rtems/score/schedulerpriorityaffinitysmp.h
119include_rtems_score_HEADERS += include/rtems/score/schedulersimplesmp.h
120endif
121
122## src
123
124noinst_LIBRARIES = libscore.a
125libscore_a_SOURCES =
126libscore_a_CPPFLAGS = $(AM_CPPFLAGS)
127
128# We only build multiprocessing related files if HAS_MP was defined
129if HAS_MP
130libscore_a_SOURCES += src/mpci.c src/objectmp.c src/threadmp.c
131endif
132
133if HAS_SMP
134libscore_a_SOURCES += src/percpustatewait.c
135libscore_a_SOURCES += src/profilingsmplock.c
136libscore_a_SOURCES += src/schedulersmpvalidstatechanges.c
137libscore_a_SOURCES += src/schedulerpriorityaffinitysmp.c
138libscore_a_SOURCES += src/schedulerprioritysmp.c
139libscore_a_SOURCES += src/schedulersimplesmp.c
140libscore_a_SOURCES += src/smp.c
141libscore_a_SOURCES += src/cpuset.c
142libscore_a_SOURCES += src/cpusetprintsupport.c
143libscore_a_SOURCES += src/schedulerdefaultgetaffinity.c
144libscore_a_SOURCES += src/schedulerdefaultsetaffinity.c
145libscore_a_SOURCES += src/schedulersmpstartidle.c
146endif
147
148## CORE_APIMUTEX_C_FILES
149libscore_a_SOURCES += src/apimutex.c \
150    src/apimutexlock.c src/apimutexunlock.c
151
152## CORE_BARRIER_C_FILES
153libscore_a_SOURCES += src/corebarrier.c src/corebarrierrelease.c \
154    src/corebarrierwait.c
155
156## CORE_MESSAGE_QUEUE_C_FILES
157libscore_a_SOURCES += src/coremsg.c src/coremsgbroadcast.c \
158    src/coremsgclose.c src/coremsgflush.c src/coremsgflushwait.c \
159    src/coremsginsert.c src/coremsgflushsupp.c src/coremsgseize.c \
160    src/coremsgsubmit.c
161
162## CORE_MUTEX_C_FILES
163libscore_a_SOURCES += src/coremutex.c src/coremutexflush.c \
164    src/coremutexseize.c src/coremutexsurrender.c \
165    src/coremutexseizeintr.c
166
167## CORE_PERCPU_C_FILES
168libscore_a_SOURCES += src/percpu.c
169libscore_a_SOURCES += src/percpuasm.c
170
171## CORE_RWLOCK_C_FILES
172if HAS_PTHREADS
173libscore_a_SOURCES += src/corerwlock.c src/corerwlockobtainread.c \
174    src/corerwlockobtainwrite.c src/corerwlockrelease.c src/corerwlocktimeout.c
175endif
176
177## CORE_SEMAPHORE_C_FILES
178libscore_a_SOURCES += src/coresem.c src/coresemflush.c src/coresemseize.c \
179    src/coresemsurrender.c
180
181## CORE_SPINLOCK_C_FILES
182if HAS_PTHREADS
183libscore_a_SOURCES += src/corespinlock.c src/corespinlockrelease.c \
184    src/corespinlockwait.c
185endif
186
187## HEAP_C_FILES
188libscore_a_SOURCES += src/heap.c src/heapallocate.c src/heapextend.c \
189    src/heapfree.c src/heapsizeofuserarea.c src/heapwalk.c src/heapgetinfo.c \
190    src/heapgetfreeinfo.c src/heapresizeblock.c src/heapiterate.c \
191    src/heapgreedy.c src/heapnoextend.c
192
193## OBJECT_C_FILES
194libscore_a_SOURCES += src/objectallocate.c src/objectclose.c \
195    src/objectextendinformation.c src/objectfree.c src/objectget.c \
196    src/objectgetisr.c src/objectgetnext.c src/objectinitializeinformation.c \
197    src/objectnametoid.c src/objectnametoidstring.c \
198    src/objectshrinkinformation.c src/objectgetnoprotection.c \
199    src/objectidtoname.c src/objectgetnameasstring.c src/objectsetname.c \
200    src/objectgetinfo.c src/objectgetinfoid.c src/objectapimaximumclass.c \
201    src/objectnamespaceremove.c \
202    src/objectactivecount.c
203
204## SCHEDULER_C_FILES
205libscore_a_SOURCES += src/log2table.c
206libscore_a_SOURCES += src/scheduler.c
207libscore_a_SOURCES += src/schedulergetaffinity.c
208libscore_a_SOURCES += src/schedulersetaffinity.c
209libscore_a_SOURCES += src/schedulerdefaultnodedestroy.c
210libscore_a_SOURCES += src/schedulerdefaultnodeinit.c
211libscore_a_SOURCES += src/schedulerdefaultreleasejob.c
212libscore_a_SOURCES += src/schedulerdefaultschedule.c
213libscore_a_SOURCES += src/schedulerdefaultstartidle.c
214libscore_a_SOURCES += src/schedulerdefaulttick.c
215libscore_a_SOURCES += src/schedulerdefaultupdate.c
216
217## SCHEDULERPRIORITY_C_FILES
218libscore_a_SOURCES += src/schedulerpriority.c \
219    src/schedulerpriorityblock.c \
220    src/schedulerprioritychangepriority.c \
221    src/schedulerpriorityprioritycompare.c \
222    src/schedulerpriorityschedule.c \
223    src/schedulerpriorityunblock.c \
224    src/schedulerpriorityupdate.c \
225    src/schedulerpriorityyield.c
226
227## SCHEDULERSIMPLE_C_FILES
228libscore_a_SOURCES += src/schedulersimple.c \
229    src/schedulersimpleblock.c \
230    src/schedulersimplechangepriority.c \
231    src/schedulersimpleschedule.c \
232    src/schedulersimpleunblock.c \
233    src/schedulersimpleyield.c
234
235## SCHEDULEREDF_C_FILES
236libscore_a_SOURCES += src/scheduleredf.c \
237    src/scheduleredfnodeinit.c \
238    src/scheduleredfblock.c \
239    src/scheduleredfchangepriority.c \
240    src/scheduleredfprioritycompare.c \
241    src/scheduleredfreleasejob.c \
242    src/scheduleredfschedule.c \
243    src/scheduleredfunblock.c \
244    src/scheduleredfupdate.c \
245    src/scheduleredfyield.c
246
247## SCHEDULERCBS_C_FILES
248libscore_a_SOURCES += src/schedulercbs.c \
249    src/schedulercbsnodeinit.c \
250    src/schedulercbsattachthread.c \
251    src/schedulercbscleanup.c \
252    src/schedulercbscreateserver.c \
253    src/schedulercbsdestroyserver.c \
254    src/schedulercbsdetachthread.c \
255    src/schedulercbsgetapprovedbudget.c \
256    src/schedulercbsgetexecutiontime.c \
257    src/schedulercbsgetparameters.c \
258    src/schedulercbsgetremainingbudget.c \
259    src/schedulercbsgetserverid.c \
260    src/schedulercbssetparameters.c \
261    src/schedulercbsreleasejob.c \
262    src/schedulercbsunblock.c
263
264## PROTECTED_HEAP_C_FILES
265libscore_a_SOURCES += src/pheapallocate.c \
266    src/pheapextend.c src/pheapfree.c src/pheapgetsize.c \
267    src/pheapgetblocksize.c src/pheapgetfreeinfo.c src/pheapgetinfo.c \
268    src/pheapinit.c src/pheapresizeblock.c src/pheapwalk.c src/pheapiterate.c
269
270## FREECHAIN_C_FILES
271libscore_a_SOURCES += src/freechain.c
272
273## RBTREE_C_FILES
274libscore_a_SOURCES += src/rbtree.c \
275    src/rbtreeextract.c src/rbtreefind.c \
276    src/rbtreeinsert.c src/rbtreeiterate.c src/rbtreenext.c
277
278## THREAD_C_FILES
279libscore_a_SOURCES += src/thread.c src/threadchangepriority.c \
280    src/threadclearstate.c src/threadcreateidle.c \
281    src/threaddelayended.c src/threaddispatch.c \
282    src/threadenabledispatch.c src/threaddisabledispatch.c \
283    src/threadget.c src/threadhandler.c src/threadinitialize.c \
284    src/threadloadenv.c src/threadready.c \
285    src/threadrestart.c src/threadsetpriority.c \
286    src/threadsetstate.c \
287    src/threadstackallocate.c src/threadstackfree.c src/threadstart.c \
288    src/threadstartmultitasking.c src/iterateoverthreads.c \
289    src/threadblockingoperationcancel.c
290
291if HAS_SMP
292libscore_a_SOURCES += src/smpbarrierwait.c
293libscore_a_SOURCES += src/threaddispatchdisablelevel.c
294endif
295
296## THREADQ_C_FILES
297libscore_a_SOURCES += src/threadq.c src/threadqdequeue.c \
298    src/threadqdequeuefifo.c src/threadqdequeuepriority.c \
299    src/threadqenqueue.c src/threadqenqueuefifo.c \
300    src/threadqenqueuepriority.c src/threadqextract.c \
301    src/threadqextractfifo.c src/threadqextractpriority.c \
302    src/threadqextractwithproxy.c src/threadqfirst.c src/threadqfirstfifo.c \
303    src/threadqfirstpriority.c src/threadqflush.c \
304    src/threadqprocesstimeout.c src/threadqtimeout.c
305
306## TIMESPEC_C_FILES
307libscore_a_SOURCES += src/timespecaddto.c src/timespecfromticks.c \
308    src/timespecisvalid.c src/timespeclessthan.c \
309    src/timespecsubtract.c src/timespectoticks.c src/timespecdivide.c \
310    src/timespecdividebyinteger.c src/timespecgetasnanoseconds.c
311
312## TIMESTAMP_INT64_C_FILES
313libscore_a_SOURCES += src/ts64addto.c src/ts64dividebyinteger.c \
314    src/ts64divide.c src/ts64equalto.c \
315    src/ts64getnanoseconds.c src/ts64getseconds.c \
316    src/ts64lessthan.c \
317    src/ts64set.c src/ts64settozero.c src/ts64subtract.c \
318    src/ts64toticks.c src/ts64totimespec.c src/ts64totimeval.c
319
320## TOD_C_FILES
321libscore_a_SOURCES += src/coretod.c src/coretodset.c src/coretodget.c \
322    src/coretodgetuptimetimespec.c src/coretodtickle.c \
323    src/coretodsecondssinceepoch.c \
324    src/coretodtickspersec.c
325
326## WATCHDOG_C_FILES
327libscore_a_SOURCES += src/watchdog.c src/watchdogadjust.c \
328    src/watchdogadjusttochain.c src/watchdoginsert.c src/watchdogremove.c \
329    src/watchdogtickle.c
330
331## USEREXT_C_FILES
332libscore_a_SOURCES += src/userextaddset.c \
333    src/userext.c src/userextremoveset.c src/userextiterate.c
334
335## STD_C_FILES
336libscore_a_SOURCES += src/apiext.c src/chain.c src/chainappend.c \
337    src/chainextract.c src/chainget.c src/chaininsert.c \
338    src/chainappendempty.c src/chainprependempty.c src/chaingetempty.c \
339    src/chainnodecount.c \
340    src/debugisthreaddispatchingallowed.c \
341    src/interr.c src/isr.c src/wkspace.c src/wkstringduplicate.c
342libscore_a_SOURCES += src/debugisownerofallocator.c
343libscore_a_SOURCES += src/profilingisrentryexit.c
344libscore_a_SOURCES += src/once.c
345libscore_a_SOURCES += src/resourceiterate.c
346
347EXTRA_DIST = src/Unlimited.txt
348
349DISTCLEANFILES = include/rtems/score/cpuopts.h
350
351include $(srcdir)/preinstall.am
352include $(top_srcdir)/automake/subdirs.am
353include $(top_srcdir)/automake/local.am
Note: See TracBrowser for help on using the repository browser.