| rev |
line source |
|
seanhalle@208
|
1 /*
|
|
seanhalle@208
|
2 * Copyright 2009 OpenSourceStewardshipFoundation.org
|
|
seanhalle@208
|
3 * Licensed under GNU General Public License version 2
|
|
seanhalle@208
|
4 *
|
|
seanhalle@208
|
5 * Author: seanhalle@yahoo.com
|
|
seanhalle@208
|
6 *
|
|
seanhalle@208
|
7 */
|
|
seanhalle@208
|
8
|
|
seanhalle@208
|
9 #ifndef _VMS_H
|
|
seanhalle@208
|
10 #define _VMS_H
|
|
nengel@263
|
11
|
|
nengel@263
|
12 #ifndef _GNU_SOURCE
|
|
seanhalle@208
|
13 #define _GNU_SOURCE
|
|
nengel@263
|
14 #endif
|
|
seanhalle@208
|
15
|
|
seanhalle@215
|
16 #include "DynArray/DynArray.h"
|
|
seanhalle@215
|
17 #include "Hash_impl/PrivateHash.h"
|
|
seanhalle@215
|
18 #include "Histogram/Histogram.h"
|
|
seanhalle@215
|
19 #include "Queue_impl/PrivateQueue.h"
|
|
seanhalle@243
|
20
|
|
seanhalle@243
|
21 #include "VMS_primitive_data_types.h"
|
|
seanhalle@223
|
22 #include "Services_Offered_by_VMS/Memory_Handling/vmalloc.h"
|
|
seanhalle@208
|
23
|
|
seanhalle@208
|
24 #include <pthread.h>
|
|
seanhalle@208
|
25 #include <sys/time.h>
|
|
seanhalle@208
|
26
|
|
seanhalle@208
|
27 //================= Defines: included from separate files =================
|
|
seanhalle@208
|
28 //
|
|
seanhalle@208
|
29 // Note: ALL defines are in other files, none are in here
|
|
seanhalle@208
|
30 //
|
|
seanhalle@223
|
31 #include "Defines/VMS_defs.h"
|
|
seanhalle@208
|
32
|
|
seanhalle@208
|
33
|
|
seanhalle@208
|
34 //================================ Typedefs =================================
|
|
seanhalle@208
|
35 //
|
|
seanhalle@233
|
36 typedef unsigned long long TSCount;
|
|
seanhalle@208
|
37
|
|
seanhalle@235
|
38 typedef struct _AnimSlot AnimSlot;
|
|
seanhalle@208
|
39 typedef struct _VMSReqst VMSReqst;
|
|
seanhalle@208
|
40 typedef struct _SlaveVP SlaveVP;
|
|
seanhalle@208
|
41 typedef struct _MasterVP MasterVP;
|
|
seanhalle@208
|
42 typedef struct _IntervalProbe IntervalProbe;
|
|
seanhalle@208
|
43
|
|
seanhalle@208
|
44
|
|
seanhalle@235
|
45 typedef SlaveVP *(*SlaveAssigner) ( void *, AnimSlot*); //semEnv, slot for HW info
|
|
seanhalle@223
|
46 typedef void (*RequestHandler) ( SlaveVP *, void * ); //prWReqst, semEnv
|
|
nengel@280
|
47 typedef void (*TopLevelFnPtr) ( void * ); //initData, animSlv
|
|
nengel@281
|
48 typedef void (*TopLevelFnWrapper)( TopLevelFnPtr, void*); //(*fn)(arg)
|
|
nengel@280
|
49 typedef void TopLevelFn ( void * ); //initData, animSlv
|
|
seanhalle@223
|
50 typedef void (*ResumeSlvFnPtr) ( SlaveVP *, void * );
|
|
nengel@228
|
51 //=========== MEASUREMENT STUFF ==========
|
|
nengel@228
|
52 MEAS__Insert_Counter_Handler
|
|
nengel@228
|
53 //========================================
|
|
seanhalle@209
|
54
|
|
seanhalle@209
|
55 //============================ HW Dependent Fns ================================
|
|
seanhalle@209
|
56
|
|
seanhalle@243
|
57 #include "HW_Dependent_Primitives/VMS__HW_measurement.h"
|
|
seanhalle@243
|
58 #include "HW_Dependent_Primitives/VMS__primitives.h"
|
|
seanhalle@208
|
59
|
|
seanhalle@208
|
60
|
|
seanhalle@208
|
61 //============= Request Related ===========
|
|
seanhalle@208
|
62 //
|
|
seanhalle@208
|
63
|
|
seanhalle@208
|
64 enum VMSReqstType //avoid starting enums at 0, for debug reasons
|
|
seanhalle@208
|
65 {
|
|
seanhalle@208
|
66 semantic = 1,
|
|
seanhalle@208
|
67 createReq,
|
|
seanhalle@208
|
68 dissipate,
|
|
seanhalle@208
|
69 VMSSemantic //goes with VMSSemReqst below
|
|
seanhalle@208
|
70 };
|
|
seanhalle@208
|
71
|
|
seanhalle@208
|
72 struct _VMSReqst
|
|
seanhalle@208
|
73 {
|
|
seanhalle@208
|
74 enum VMSReqstType reqType;//used for dissipate and in future for IO requests
|
|
seanhalle@208
|
75 void *semReqData;
|
|
seanhalle@208
|
76
|
|
seanhalle@208
|
77 VMSReqst *nextReqst;
|
|
seanhalle@208
|
78 };
|
|
seanhalle@208
|
79 //VMSReqst
|
|
seanhalle@208
|
80
|
|
seanhalle@208
|
81 enum VMSSemReqstType //These are equivalent to semantic requests, but for
|
|
seanhalle@208
|
82 { // VMS's services available directly to app, like OS
|
|
seanhalle@245
|
83 make_probe = 1, // and probe services -- like a VMS-wide built-in lang
|
|
seanhalle@245
|
84 throw_excp,
|
|
seanhalle@208
|
85 openFile,
|
|
seanhalle@208
|
86 otherIO
|
|
seanhalle@208
|
87 };
|
|
seanhalle@208
|
88
|
|
seanhalle@208
|
89 typedef struct
|
|
seanhalle@208
|
90 { enum VMSSemReqstType reqType;
|
|
seanhalle@245
|
91 SlaveVP *requestingSlv;
|
|
seanhalle@208
|
92 char *nameStr; //for create probe
|
|
seanhalle@245
|
93 char *msgStr; //for exception
|
|
seanhalle@245
|
94 void *exceptionData;
|
|
seanhalle@208
|
95 }
|
|
seanhalle@208
|
96 VMSSemReq;
|
|
seanhalle@208
|
97
|
|
seanhalle@208
|
98
|
|
seanhalle@208
|
99 //==================== Core data structures ===================
|
|
seanhalle@208
|
100
|
|
seanhalle@231
|
101 typedef struct
|
|
seanhalle@231
|
102 {
|
|
seanhalle@231
|
103 //for future expansion
|
|
seanhalle@231
|
104 }
|
|
seanhalle@231
|
105 SlotPerfInfo;
|
|
seanhalle@231
|
106
|
|
seanhalle@235
|
107 struct _AnimSlot
|
|
seanhalle@208
|
108 {
|
|
seanhalle@230
|
109 int workIsDone;
|
|
seanhalle@230
|
110 int needsSlaveAssigned;
|
|
seanhalle@230
|
111 SlaveVP *slaveAssignedToSlot;
|
|
seanhalle@230
|
112
|
|
seanhalle@230
|
113 int slotIdx; //needed by Holistic Model's data gathering
|
|
seanhalle@237
|
114 int coreSlotIsOn;
|
|
seanhalle@230
|
115 SlotPerfInfo *perfInfo; //used by assigner to pick best slave for core
|
|
seanhalle@208
|
116 };
|
|
seanhalle@235
|
117 //AnimSlot
|
|
seanhalle@208
|
118
|
|
nengel@228
|
119 enum VPtype {
|
|
nengel@228
|
120 Slave = 1, //default
|
|
nengel@228
|
121 Master,
|
|
nengel@239
|
122 Shutdown,
|
|
nengel@239
|
123 Idle
|
|
nengel@228
|
124 };
|
|
nengel@228
|
125
|
|
seanhalle@233
|
126 /*This structure embodies the state of a slaveVP. It is reused for masterVP
|
|
seanhalle@233
|
127 * and shutdownVPs.
|
|
seanhalle@208
|
128 */
|
|
seanhalle@208
|
129 struct _SlaveVP
|
|
seanhalle@233
|
130 { //The offsets of these fields are hard-coded into assembly
|
|
seanhalle@233
|
131 void *stackPtr; //save the core's stack ptr when suspend
|
|
seanhalle@233
|
132 void *framePtr; //save core's frame ptr when suspend
|
|
seanhalle@233
|
133 void *resumeInstrPtr; //save core's program-counter when suspend
|
|
seanhalle@216
|
134 void *coreCtlrFramePtr; //restore before jmp back to core controller
|
|
seanhalle@216
|
135 void *coreCtlrStackPtr; //restore before jmp back to core controller
|
|
seanhalle@233
|
136
|
|
seanhalle@233
|
137 //============ below this, no fields are used in asm =============
|
|
seanhalle@235
|
138
|
|
seanhalle@235
|
139 int slaveID; //each slave given a globally unique ID
|
|
seanhalle@235
|
140 int coreAnimatedBy;
|
|
seanhalle@233
|
141 void *startOfStack; //used to free, and to point slave to Fn
|
|
seanhalle@235
|
142 enum VPtype typeOfVP; //Slave vs Master vs Shutdown..
|
|
seanhalle@235
|
143 int assignCount; //Each assign is for one work-unit, so IDs it
|
|
seanhalle@235
|
144 //note, a scheduling decision is uniquely identified by the triple:
|
|
seanhalle@235
|
145 // <slaveID, coreAnimatedBy, assignCount> -- used in record & replay
|
|
seanhalle@233
|
146
|
|
seanhalle@233
|
147 //for comm -- between master and coreCtlr & btwn wrapper lib and plugin
|
|
seanhalle@235
|
148 AnimSlot *animSlotAssignedTo;
|
|
seanhalle@233
|
149 VMSReqst *requests; //wrapper lib puts in requests, plugin takes out
|
|
seanhalle@233
|
150 void *dataRetFromReq;//Return vals from plugin to Wrapper Lib
|
|
seanhalle@208
|
151
|
|
seanhalle@235
|
152 //For using Slave as carrier for data
|
|
seanhalle@233
|
153 void *semanticData; //Lang saves lang-specific things in slave here
|
|
seanhalle@208
|
154
|
|
seanhalle@235
|
155 //=========== MEASUREMENT STUFF ==========
|
|
seanhalle@235
|
156 MEAS__Insert_Meas_Fields_into_Slave;
|
|
seanhalle@235
|
157 float64 createPtInSecs; //time VP created, in seconds
|
|
seanhalle@235
|
158 //========================================
|
|
seanhalle@208
|
159 };
|
|
seanhalle@208
|
160 //SlaveVP
|
|
seanhalle@208
|
161
|
|
seanhalle@233
|
162
|
|
seanhalle@233
|
163 /* The one and only global variable, holds many odds and ends
|
|
seanhalle@208
|
164 */
|
|
seanhalle@208
|
165 typedef struct
|
|
seanhalle@230
|
166 { //The offsets of these fields are hard-coded into assembly
|
|
seanhalle@243
|
167 void *coreCtlrReturnPt; //offset to this field used in asm
|
|
seanhalle@235
|
168 int8 falseSharePad1[256 - sizeof(void*)];
|
|
seanhalle@243
|
169 int32 masterLock; //offset to this field used in asm
|
|
seanhalle@235
|
170 int8 falseSharePad2[256 - sizeof(int32)];
|
|
seanhalle@233
|
171 //============ below this, no fields are used in asm =============
|
|
seanhalle@230
|
172
|
|
seanhalle@230
|
173 //Basic VMS infrastructure
|
|
seanhalle@230
|
174 SlaveVP **masterVPs;
|
|
seanhalle@235
|
175 AnimSlot ***allAnimSlots;
|
|
seanhalle@230
|
176
|
|
seanhalle@230
|
177 //plugin related
|
|
seanhalle@225
|
178 SlaveAssigner slaveAssigner;
|
|
seanhalle@208
|
179 RequestHandler requestHandler;
|
|
seanhalle@230
|
180 void *semanticEnv;
|
|
seanhalle@208
|
181
|
|
seanhalle@230
|
182 //Slave creation
|
|
seanhalle@230
|
183 int32 numSlavesCreated; //gives ordering to processor creation
|
|
seanhalle@230
|
184 int32 numSlavesAlive; //used to detect fail-safe shutdown
|
|
nengel@271
|
185 int32 numAnimatedSlaves;
|
|
seanhalle@208
|
186
|
|
seanhalle@230
|
187 //Initialization related
|
|
seanhalle@230
|
188 int32 setupComplete; //use while starting up coreCtlr
|
|
nengel@277
|
189 int32 shutdownInitiated;
|
|
seanhalle@230
|
190
|
|
seanhalle@230
|
191 //Memory management related
|
|
seanhalle@223
|
192 MallocArrays *freeLists;
|
|
seanhalle@230
|
193 int32 amtOfOutstandingMem;//total currently allocated
|
|
seanhalle@245
|
194
|
|
seanhalle@245
|
195 //Random number seeds -- random nums used in various places
|
|
seanhalle@245
|
196 uint32_t seed1;
|
|
seanhalle@245
|
197 uint32_t seed2;
|
|
seanhalle@245
|
198
|
|
seanhalle@208
|
199 //=========== MEASUREMENT STUFF =============
|
|
seanhalle@208
|
200 IntervalProbe **intervalProbes;
|
|
seanhalle@208
|
201 PrivDynArrayInfo *dynIntervalProbesInfo;
|
|
seanhalle@208
|
202 HashTable *probeNameHashTbl;
|
|
seanhalle@208
|
203 int32 masterCreateProbeID;
|
|
seanhalle@230
|
204 float64 createPtInSecs; //real-clock time VMS initialized
|
|
seanhalle@208
|
205 Histogram **measHists;
|
|
seanhalle@208
|
206 PrivDynArrayInfo *measHistsInfo;
|
|
seanhalle@209
|
207 MEAS__Insert_Susp_Meas_Fields_into_MasterEnv;
|
|
seanhalle@209
|
208 MEAS__Insert_Master_Meas_Fields_into_MasterEnv;
|
|
seanhalle@209
|
209 MEAS__Insert_Master_Lock_Meas_Fields_into_MasterEnv;
|
|
seanhalle@209
|
210 MEAS__Insert_Malloc_Meas_Fields_into_MasterEnv;
|
|
seanhalle@209
|
211 MEAS__Insert_Plugin_Meas_Fields_into_MasterEnv;
|
|
seanhalle@209
|
212 MEAS__Insert_System_Meas_Fields_into_MasterEnv;
|
|
nengel@228
|
213 MEAS__Insert_Counter_Meas_Fields_into_MasterEnv;
|
|
seanhalle@208
|
214 //==========================================
|
|
seanhalle@208
|
215 }
|
|
seanhalle@208
|
216 MasterEnv;
|
|
seanhalle@208
|
217
|
|
seanhalle@208
|
218 //========================= Extra Stuff Data Strucs =======================
|
|
seanhalle@208
|
219 typedef struct
|
|
seanhalle@208
|
220 {
|
|
seanhalle@208
|
221
|
|
seanhalle@208
|
222 }
|
|
seanhalle@208
|
223 VMSExcp;
|
|
seanhalle@208
|
224
|
|
seanhalle@208
|
225 //======================= OS Thread related ===============================
|
|
seanhalle@208
|
226
|
|
seanhalle@216
|
227 void * coreController( void *paramsIn ); //standard PThreads fn prototype
|
|
seanhalle@216
|
228 void * coreCtlr_Seq( void *paramsIn ); //standard PThreads fn prototype
|
|
seanhalle@230
|
229 void animationMaster( void *initData, SlaveVP *masterVP );
|
|
seanhalle@208
|
230
|
|
seanhalle@208
|
231
|
|
seanhalle@208
|
232 typedef struct
|
|
seanhalle@208
|
233 {
|
|
seanhalle@208
|
234 void *endThdPt;
|
|
seanhalle@208
|
235 unsigned int coreNum;
|
|
seanhalle@208
|
236 }
|
|
seanhalle@208
|
237 ThdParams;
|
|
seanhalle@208
|
238
|
|
seanhalle@209
|
239 //============================= Global Vars ================================
|
|
seanhalle@209
|
240
|
|
seanhalle@215
|
241 volatile MasterEnv *_VMSMasterEnv __align_to_cacheline__;
|
|
nengel@280
|
242 extern __thread SlaveVP* currVP;
|
|
seanhalle@215
|
243
|
|
seanhalle@233
|
244 //these are global, but only used for startup and shutdown
|
|
seanhalle@222
|
245 pthread_t coreCtlrThdHandles[ NUM_CORES ]; //pthread's virt-procr state
|
|
seanhalle@216
|
246 ThdParams *coreCtlrThdParams [ NUM_CORES ];
|
|
seanhalle@222
|
247
|
|
seanhalle@222
|
248 pthread_mutex_t suspendLock;
|
|
seanhalle@222
|
249 pthread_cond_t suspendCond;
|
|
seanhalle@208
|
250
|
|
seanhalle@208
|
251 //========================= Function Prototypes ===========================
|
|
seanhalle@233
|
252 /* MEANING OF WL PI SS int VMSOS
|
|
seanhalle@209
|
253 * These indicate which places the function is safe to use. They stand for:
|
|
seanhalle@233
|
254 *
|
|
seanhalle@233
|
255 * WL Wrapper Library -- wrapper lib code should only use these
|
|
seanhalle@233
|
256 * PI Plugin -- plugin code should only use these
|
|
seanhalle@233
|
257 * SS Startup and Shutdown -- designates these relate to startup & shutdown
|
|
seanhalle@233
|
258 * int internal to VMS -- should not be used in wrapper lib or plugin
|
|
seanhalle@233
|
259 * VMSOS means "OS functions for applications to use"
|
|
seanhalle@233
|
260 *
|
|
seanhalle@233
|
261 * VMS_int__ functions touch internal VMS data structs and are only safe
|
|
seanhalle@233
|
262 * to be used inside the master lock. However, occasionally, they appear
|
|
seanhalle@233
|
263 * in wrapper-lib or plugin code. In those cases, very careful analysis
|
|
seanhalle@233
|
264 * has been done to be sure no concurrency issues could arise.
|
|
seanhalle@233
|
265 *
|
|
seanhalle@233
|
266 * VMS_WL__ functions are all safe for use outside the master lock.
|
|
seanhalle@233
|
267 *
|
|
seanhalle@233
|
268 * VMSOS are only safe for applications to use -- they're like a second
|
|
seanhalle@233
|
269 * language mixed in -- but they can't be used inside plugin code, and
|
|
seanhalle@233
|
270 * aren't meant for use in wrapper libraries, because they are themselves
|
|
seanhalle@233
|
271 * wrapper-library calls!
|
|
seanhalle@209
|
272 */
|
|
seanhalle@233
|
273 //========== Startup and shutdown ==========
|
|
seanhalle@208
|
274 void
|
|
seanhalle@209
|
275 VMS_SS__init();
|
|
seanhalle@208
|
276
|
|
seanhalle@208
|
277 void
|
|
seanhalle@209
|
278 VMS_SS__start_the_work_then_wait_until_done();
|
|
seanhalle@208
|
279
|
|
nengel@228
|
280 SlaveVP*
|
|
nengel@228
|
281 VMS_SS__create_shutdown_slave();
|
|
nengel@228
|
282
|
|
seanhalle@208
|
283 void
|
|
seanhalle@209
|
284 VMS_SS__shutdown();
|
|
seanhalle@208
|
285
|
|
seanhalle@208
|
286 void
|
|
seanhalle@209
|
287 VMS_SS__cleanup_at_end_of_shutdown();
|
|
seanhalle@208
|
288
|
|
seanhalle@208
|
289
|
|
seanhalle@208
|
290 //============== ===============
|
|
seanhalle@208
|
291
|
|
nengel@257
|
292 SlaveVP *
|
|
seanhalle@209
|
293 VMS_int__create_slaveVP( TopLevelFnPtr fnPtr, void *dataParam );
|
|
seanhalle@209
|
294 #define VMS_PI__create_slaveVP VMS_int__create_slaveVP
|
|
seanhalle@209
|
295 #define VMS_WL__create_slaveVP VMS_int__create_slaveVP
|
|
seanhalle@208
|
296
|
|
nengel@281
|
297 SlaveVP *
|
|
nengel@281
|
298 VMS_int__create_slaveVP_with_wrapper( TopLevelFnWrapper fnWrapper, TopLevelFnPtr fnPtr, void *dataParam );
|
|
nengel@281
|
299
|
|
seanhalle@210
|
300 //Use this to create processor inside entry point & other places outside
|
|
seanhalle@210
|
301 // the VMS system boundary (IE, don't animate with a SlaveVP or MasterVP)
|
|
seanhalle@210
|
302 SlaveVP *
|
|
seanhalle@210
|
303 VMS_ext__create_slaveVP( TopLevelFnPtr fnPtr, void *dataParam );
|
|
seanhalle@210
|
304
|
|
nengel@257
|
305 SlaveVP *
|
|
seanhalle@210
|
306 VMS_int__create_slaveVP_helper( SlaveVP *newSlv, TopLevelFnPtr fnPtr,
|
|
seanhalle@210
|
307 void *dataParam, void *stackLocs );
|
|
seanhalle@210
|
308
|
|
nengel@281
|
309 SlaveVP *
|
|
nengel@281
|
310 VMS_int__create_slaveVP_helper_with_wrapper( SlaveVP *newSlv, TopLevelFnWrapper fnWrapper, TopLevelFnPtr fnPtr,
|
|
nengel@281
|
311 void *dataParam, void *stackLocs );
|
|
nengel@281
|
312
|
|
nengel@257
|
313 void
|
|
seanhalle@243
|
314 VMS_int__reset_slaveVP_to_TopLvlFn( SlaveVP *slaveVP, TopLevelFnPtr fnPtr,
|
|
seanhalle@219
|
315 void *dataParam);
|
|
seanhalle@208
|
316
|
|
nengel@257
|
317 void
|
|
seanhalle@243
|
318 VMS_int__point_slaveVP_to_OneParamFn( SlaveVP *slaveVP, void *fnPtr,
|
|
seanhalle@243
|
319 void *param);
|
|
seanhalle@243
|
320
|
|
nengel@257
|
321 void
|
|
seanhalle@243
|
322 VMS_int__point_slaveVP_to_TwoParamFn( SlaveVP *slaveVP, void *fnPtr,
|
|
seanhalle@243
|
323 void *param1, void *param2);
|
|
seanhalle@243
|
324
|
|
seanhalle@208
|
325 void
|
|
nengel@281
|
326 VMS_int__reset_slaveVP_to_TopLvlFnWrapper( SlaveVP *slaveVP, TopLevelFnWrapper fnWrapper, TopLevelFnPtr fnPtr,
|
|
nengel@281
|
327 void *dataParam);
|
|
nengel@281
|
328
|
|
nengel@281
|
329 void
|
|
seanhalle@210
|
330 VMS_int__dissipate_slaveVP( SlaveVP *slaveToDissipate );
|
|
seanhalle@210
|
331 #define VMS_PI__dissipate_slaveVP VMS_int__dissipate_slaveVP
|
|
seanhalle@210
|
332 //WL: dissipate a SlaveVP by sending a request
|
|
seanhalle@208
|
333
|
|
seanhalle@208
|
334 void
|
|
seanhalle@209
|
335 VMS_ext__dissipate_slaveVP( SlaveVP *slaveToDissipate );
|
|
seanhalle@208
|
336
|
|
seanhalle@208
|
337 void
|
|
seanhalle@209
|
338 VMS_int__throw_exception( char *msgStr, SlaveVP *reqstSlv, VMSExcp *excpData );
|
|
seanhalle@245
|
339 #define VMS_PI__throw_exception VMS_int__throw_exception
|
|
seanhalle@245
|
340 void
|
|
seanhalle@245
|
341 VMS_WL__throw_exception( char *msgStr, SlaveVP *reqstSlv, VMSExcp *excpData );
|
|
seanhalle@245
|
342 #define VMS_App__throw_exception VMS_WL__throw_exception
|
|
seanhalle@208
|
343
|
|
seanhalle@208
|
344 void *
|
|
seanhalle@209
|
345 VMS_int__give_sem_env_for( SlaveVP *animSlv );
|
|
seanhalle@209
|
346 #define VMS_PI__give_sem_env_for VMS_int__give_sem_env_for
|
|
seanhalle@209
|
347 #define VMS_SS__give_sem_env_for VMS_int__give_sem_env_for
|
|
seanhalle@209
|
348 //No WL version -- not safe! if use in WL, be sure data rd & wr is stable
|
|
seanhalle@208
|
349
|
|
seanhalle@245
|
350
|
|
nengel@257
|
351 void
|
|
seanhalle@245
|
352 VMS_int__get_master_lock();
|
|
seanhalle@245
|
353
|
|
seanhalle@245
|
354 #define VMS_int__release_master_lock() _VMSMasterEnv->masterLock = UNLOCKED
|
|
seanhalle@245
|
355
|
|
nengel@257
|
356 uint32_t
|
|
seanhalle@245
|
357 VMS_int__randomNumber();
|
|
seanhalle@245
|
358
|
|
seanhalle@208
|
359 //============== Request Related ===============
|
|
seanhalle@208
|
360
|
|
seanhalle@208
|
361 void
|
|
seanhalle@209
|
362 VMS_int__suspend_slaveVP_and_send_req( SlaveVP *callingSlv );
|
|
seanhalle@208
|
363
|
|
nengel@257
|
364 void
|
|
seanhalle@209
|
365 VMS_WL__add_sem_request_in_mallocd_VMSReqst( void *semReqData, SlaveVP *callingSlv );
|
|
seanhalle@208
|
366
|
|
nengel@257
|
367 void
|
|
seanhalle@209
|
368 VMS_WL__send_sem_request( void *semReqData, SlaveVP *callingSlv );
|
|
seanhalle@208
|
369
|
|
seanhalle@208
|
370 void
|
|
seanhalle@209
|
371 VMS_WL__send_create_slaveVP_req( void *semReqData, SlaveVP *reqstingSlv );
|
|
seanhalle@208
|
372
|
|
nengel@257
|
373 void
|
|
seanhalle@208
|
374 VMS_WL__send_dissipate_req( SlaveVP *prToDissipate );
|
|
seanhalle@208
|
375
|
|
nengel@257
|
376 void
|
|
seanhalle@209
|
377 VMS_WL__send_VMSSem_request( void *semReqData, SlaveVP *callingSlv );
|
|
seanhalle@208
|
378
|
|
seanhalle@208
|
379 VMSReqst *
|
|
seanhalle@209
|
380 VMS_PI__take_next_request_out_of( SlaveVP *slaveWithReq );
|
|
seanhalle@246
|
381 //#define VMS_PI__take_next_request_out_of( slave ) slave->requests
|
|
seanhalle@208
|
382
|
|
nengel@257
|
383 //void *
|
|
seanhalle@246
|
384 //VMS_PI__take_sem_reqst_from( VMSReqst *req );
|
|
seanhalle@246
|
385 #define VMS_PI__take_sem_reqst_from( req ) req->semReqData
|
|
seanhalle@208
|
386
|
|
nengel@257
|
387 void
|
|
seanhalle@209
|
388 VMS_PI__handle_VMSSemReq( VMSReqst *req, SlaveVP *requestingSlv, void *semEnv,
|
|
seanhalle@209
|
389 ResumeSlvFnPtr resumeSlvFnPtr );
|
|
seanhalle@208
|
390
|
|
seanhalle@208
|
391 //======================== MEASUREMENT ======================
|
|
seanhalle@208
|
392 uint64
|
|
seanhalle@208
|
393 VMS_WL__give_num_plugin_cycles();
|
|
seanhalle@208
|
394 uint32
|
|
seanhalle@208
|
395 VMS_WL__give_num_plugin_animations();
|
|
seanhalle@208
|
396
|
|
seanhalle@208
|
397
|
|
seanhalle@210
|
398 //========================= Utilities =======================
|
|
nengel@257
|
399 char *
|
|
seanhalle@210
|
400 VMS_int__strDup( char *str );
|
|
seanhalle@208
|
401
|
|
seanhalle@210
|
402
|
|
seanhalle@210
|
403 //========================= Probes =======================
|
|
seanhalle@223
|
404 #include "Services_Offered_by_VMS/Measurement_and_Stats/probes.h"
|
|
seanhalle@210
|
405
|
|
seanhalle@210
|
406 //================================================
|
|
seanhalle@208
|
407 #endif /* _VMS_H */
|
|
seanhalle@208
|
408
|