source: rtems/cpukit/score/Makefile.am @ 701dd96f

4.115
Last change on this file since 701dd96f was 701dd96f, checked in by Sebastian Huber <sebastian.huber@…>, on 06/12/14 at 12:37:57

score: PR2181: Add _Thread_Yield()

The _Scheduler_Yield() was called by the executing thread with thread
dispatching disabled and interrupts enabled. The rtems_task_suspend()
is explicitly allowed in ISRs:

http://rtems.org/onlinedocs/doc-current/share/rtems/html/c_user/Interrupt-Manager-Directives-Allowed-from-an-ISR.html#Interrupt-Manager-Directives-Allowed-from-an-ISR

Unlike the other scheduler operations the locking was performed inside
the operation. This lead to the following race condition. Suppose a
ISR suspends the executing thread right before the yield scheduler
operation. Now the executing thread is not longer in the set of ready
threads. The typical scheduler operations did not check the thread
state and will now extract the thread again and enqueue it. This
corrupted data structures.

Add _Thread_Yield() and do the scheduler yield operation with interrupts
disabled. This has a negligible effect on the interrupt latency.

  • Property mode set to 100644
File size: 14.8 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
290libscore_a_SOURCES += src/threadyield.c
291
292if HAS_SMP
293libscore_a_SOURCES += src/smpbarrierwait.c
294libscore_a_SOURCES += src/threaddispatchdisablelevel.c
295endif
296
297## THREADQ_C_FILES
298libscore_a_SOURCES += src/threadq.c src/threadqdequeue.c \
299    src/threadqdequeuefifo.c src/threadqdequeuepriority.c \
300    src/threadqenqueue.c src/threadqenqueuefifo.c \
301    src/threadqenqueuepriority.c src/threadqextract.c \
302    src/threadqextractfifo.c src/threadqextractpriority.c \
303    src/threadqextractwithproxy.c src/threadqfirst.c src/threadqfirstfifo.c \
304    src/threadqfirstpriority.c src/threadqflush.c \
305    src/threadqprocesstimeout.c src/threadqtimeout.c
306
307## TIMESPEC_C_FILES
308libscore_a_SOURCES += src/timespecaddto.c src/timespecfromticks.c \
309    src/timespecisvalid.c src/timespeclessthan.c \
310    src/timespecsubtract.c src/timespectoticks.c src/timespecdivide.c \
311    src/timespecdividebyinteger.c src/timespecgetasnanoseconds.c
312
313## TIMESTAMP_INT64_C_FILES
314libscore_a_SOURCES += src/ts64addto.c src/ts64dividebyinteger.c \
315    src/ts64divide.c src/ts64equalto.c \
316    src/ts64getnanoseconds.c src/ts64getseconds.c \
317    src/ts64lessthan.c \
318    src/ts64set.c src/ts64settozero.c src/ts64subtract.c \
319    src/ts64toticks.c src/ts64totimespec.c src/ts64totimeval.c
320
321## TOD_C_FILES
322libscore_a_SOURCES += src/coretod.c src/coretodset.c src/coretodget.c \
323    src/coretodgetuptimetimespec.c src/coretodtickle.c \
324    src/coretodsecondssinceepoch.c \
325    src/coretodtickspersec.c
326
327## WATCHDOG_C_FILES
328libscore_a_SOURCES += src/watchdog.c src/watchdogadjust.c \
329    src/watchdogadjusttochain.c src/watchdoginsert.c src/watchdogremove.c \
330    src/watchdogtickle.c
331
332## USEREXT_C_FILES
333libscore_a_SOURCES += src/userextaddset.c \
334    src/userext.c src/userextremoveset.c src/userextiterate.c
335
336## STD_C_FILES
337libscore_a_SOURCES += src/apiext.c src/chain.c src/chainappend.c \
338    src/chainextract.c src/chainget.c src/chaininsert.c \
339    src/chainappendempty.c src/chainprependempty.c src/chaingetempty.c \
340    src/chainnodecount.c \
341    src/debugisthreaddispatchingallowed.c \
342    src/interr.c src/isr.c src/wkspace.c src/wkstringduplicate.c
343libscore_a_SOURCES += src/debugisownerofallocator.c
344libscore_a_SOURCES += src/profilingisrentryexit.c
345libscore_a_SOURCES += src/once.c
346libscore_a_SOURCES += src/resourceiterate.c
347
348EXTRA_DIST = src/Unlimited.txt
349
350DISTCLEANFILES = include/rtems/score/cpuopts.h
351
352include $(srcdir)/preinstall.am
353include $(top_srcdir)/automake/subdirs.am
354include $(top_srcdir)/automake/local.am
Note: See TracBrowser for help on using the repository browser.