comparison ProcrContext.h @ 135:0b49fd35afc1

distributed free working -app sends a VMSSemReqst to his Master which send a request to a different Master -Master send the request directly -The request structure is freed by the sender, when the request was handled There are still problems on shutdown. The shutdownVPs are all allocated by one Master which is likly to be terminated
author Merten Sach <msach@mailbox.tu-berlin.de>
date Fri, 16 Sep 2011 20:08:28 +0200
parents dbfc8382d546
children 99343ffe1918
comparison
equal deleted inserted replaced
2:dccbc2cc1c3e 3:900bb862f58e
7 */ 7 */
8 #ifndef _ProcrContext_H 8 #ifndef _ProcrContext_H
9 #define _ProcrContext_H 9 #define _ProcrContext_H
10 #define _GNU_SOURCE 10 #define _GNU_SOURCE
11 11
12 #include "VMS.h" 12 typedef struct _VirtProcr VirtProcr;
13 typedef struct _VMSReqst VMSReqst;
14 typedef void (*VirtProcrFnPtr) ( void *, VirtProcr * ); //initData, animPr
13 15
14 typedef struct _SchedSlot SchedSlot; 16
15 typedef struct _VirtProcr VirtProcr; 17 #include "VMS_primitive_data_types.h"
18 #include "scheduling.h"
16 19
17 /*WARNING: re-arranging this data structure could cause VP switching 20 /*WARNING: re-arranging this data structure could cause VP switching
18 * assembly code to fail -- hard-codes offsets of fields 21 * assembly code to fail -- hard-codes offsets of fields
19 */ 22 */
20 struct _VirtProcr 23 struct _VirtProcr
50 53
51 float64 createPtInSecs; //have space but don't use on some configs 54 float64 createPtInSecs; //have space but don't use on some configs
52 }; 55 };
53 //VirtProcr 56 //VirtProcr
54 57
55 struct _SchedSlot
56 {
57 int workIsDone;
58 int needsProcrAssigned;
59 VirtProcr *procrAssignedToSlot;
60 };
61
62 void saveCoreLoopReturnAddr(void **returnAddress); 58 void saveCoreLoopReturnAddr(void **returnAddress);
63 59
64 void switchToVP(VirtProcr *nextProcr); 60 void switchToVP(VirtProcr *nextProcr);
65 61
66 void switchToCoreLoop(VirtProcr *nextProcr); 62 void switchToCoreLoop(VirtProcr *nextProcr);
70 void startVirtProcrFn(); 66 void startVirtProcrFn();
71 67
72 void *asmTerminateCoreLoop(VirtProcr *currPr); 68 void *asmTerminateCoreLoop(VirtProcr *currPr);
73 69
74 #define flushRegisters() \ 70 #define flushRegisters() \
75 asm volatile ("":::"%rbx", "%r12", "%r13","%r14","%r15") 71 asm volatile ("":::"%rbx", "%r12", "%r13","%r14","%r15");
76 72
77 inline VirtProcr * 73 inline VirtProcr *
78 create_procr_helper( VirtProcr *newPr, VirtProcrFnPtr fnPtr, 74 create_procr_helper( VirtProcr *newPr, VirtProcrFnPtr fnPtr,
79 void *initialData, void *stackLocs ); 75 void *initialData, void *stackLocs );
80 76