# HG changeset patch # User Some Random Person # Date 1331814547 25200 # Node ID ea70fa57776e364438315dbd7ef86914b2a52627 # Parent 309559064073b7bc90df2a30b2ab9716867d9211 fixed last bug that shows up in sequential mode -- still a race of some kind diff -r 309559064073 -r ea70fa57776e Defines/VMS_defs__turn_on_and_off.h --- a/Defines/VMS_defs__turn_on_and_off.h Thu Mar 15 04:11:55 2012 -0700 +++ b/Defines/VMS_defs__turn_on_and_off.h Thu Mar 15 05:29:07 2012 -0700 @@ -21,7 +21,7 @@ /*turns on the probe-instrumentation in the application -- when not * defined, the calls to the probe functions turn into comments */ -#define DEBUG__TURN_ON_DEBUG_MSGS +//#define DEBUG__TURN_ON_DEBUG_MSGS //#define DEBUG__TURN_ON_ERROR_MSGS /*These defines turn types of bug messages on and off diff -r 309559064073 -r ea70fa57776e Hardware_Dependent/VMS__primitives_asm.s --- a/Hardware_Dependent/VMS__primitives_asm.s Thu Mar 15 04:11:55 2012 -0700 +++ b/Hardware_Dependent/VMS__primitives_asm.s Thu Mar 15 05:29:07 2012 -0700 @@ -31,8 +31,8 @@ * 0x38 coreCtlrStackPtr * * _VMSMasterEnv offsets: - * 0x48 coreCtlrReturnPt - * 0x54 masterLock + * 0x0 coreCtlrReturnPt + * 0x8 masterLock */ .globl switchToSlv switchToSlv: @@ -56,8 +56,8 @@ * 0x38 coreCtlrStackPtr * * _VMSMasterEnv offsets: - * 0x48 coreCtlrReturnPt - * 0x54 masterLock + * 0x0 coreCtlrReturnPt + * 0x8 masterLock */ .globl switchToCoreCtlr switchToCoreCtlr: @@ -68,8 +68,8 @@ movq 0x38(%rdi), %rsp #restore stack pointer movq 0x30(%rdi), %rbp #restore frame pointer movq $_VMSMasterEnv, %rcx - movq (%rcx) , %rcx - movq 0x48(%rcx), %rax #get CoreCtlrStartPt + movq (%rcx), %rcx #_VMSMasterEnv is pointer to struct + movq 0x00(%rcx), %rax #get CoreCtlrStartPt jmp *%rax #jmp to CoreCtlr SlvReturn: ret @@ -86,8 +86,8 @@ * 0x38 coreCtlrStackPtr * * _VMSMasterEnv offsets: - * 0x48 coreCtlrReturnPt - * 0x54 masterLock + * 0x0 coreCtlrReturnPt + * 0x8 masterLock */ .globl masterSwitchToCoreCtlr masterSwitchToCoreCtlr: @@ -98,9 +98,9 @@ movq 0x38(%rdi), %rsp #restore stack pointer movq 0x30(%rdi), %rbp #restore frame pointer movq $_VMSMasterEnv, %rcx - movq (%rcx) , %rcx - movq 0x48(%rcx), %rax #get CoreCtlr return pt - movl $0x0 , 0x54(%rcx) #release lock + movq (%rcx), %rcx #_VMSMasterEnv is pointer to struct + movq 0x00(%rcx), %rax #get CoreCtlr return pt + movl $0x0 , 0x08(%rcx) #release lock jmp *%rax #jmp to CoreCtlr MasterReturn: ret @@ -120,8 +120,8 @@ * 0x38 coreCtlrStackPtr * * _VMSMasterEnv offsets: - * 0x48 coreCtlrReturnPt - * 0x58 masterLock + * 0x0 coreCtlrReturnPt + * 0x8 masterLock */ .globl asmTerminateCoreCtlr asmTerminateCoreCtlr: diff -r 309559064073 -r ea70fa57776e VMS.h --- a/VMS.h Thu Mar 15 04:11:55 2012 -0700 +++ b/VMS.h Thu Mar 15 05:29:07 2012 -0700 @@ -140,7 +140,11 @@ * (because -O3 messes with things otherwise) */ typedef struct - { + { //The offset of these fields is hard-coded into assembly + void *coreCtlrReturnPt; //offset of field used in asm + int32 masterLock __align_to_cacheline__; //used in asm + + //below this, no asm uses the field offsets SlaveAssigner slaveAssigner; RequestHandler requestHandler; @@ -152,10 +156,7 @@ MallocArrays *freeLists; int32 amtOfOutstandingMem; //total currently allocated - void *coreCtlrReturnPt;//addr to jump to to re-enter coreCtlr - int32 setupComplete; - int32 masterLock __align_to_cacheline__; GateStruc *workStealingGates[ NUM_CORES ]; //concurrent work-steal int32 workStealingLock; diff -r 309559064073 -r ea70fa57776e VMS__startup_and_shutdown.c --- a/VMS__startup_and_shutdown.c Thu Mar 15 04:11:55 2012 -0700 +++ b/VMS__startup_and_shutdown.c Thu Mar 15 05:29:07 2012 -0700 @@ -302,7 +302,7 @@ _VMSMasterEnv->masterLock = UNLOCKED; _VMSMasterEnv->allSchedSlots = allSchedSlots; _VMSMasterEnv->workStealingLock = UNLOCKED; - + _VMSMasterEnv->measHistsInfo = NULL; //============================= MEASUREMENT STUFF ======================== @@ -521,9 +521,11 @@ VMS_SS__cleanup_at_end_of_shutdown() { //Before getting rid of everything, print out any measurements made - forAllInDynArrayDo( _VMSMasterEnv->measHistsInfo, (DynArrayFnPtr)&printHist ); - forAllInDynArrayDo( _VMSMasterEnv->measHistsInfo, (DynArrayFnPtr)&saveHistToFile); - forAllInDynArrayDo( _VMSMasterEnv->measHistsInfo, (DynArrayFnPtr)&freeHist ); + if( _VMSMasterEnv->measHistsInfo != NULL ) + { forAllInDynArrayDo( _VMSMasterEnv->measHistsInfo, (DynArrayFnPtr)&printHist ); + forAllInDynArrayDo( _VMSMasterEnv->measHistsInfo, (DynArrayFnPtr)&saveHistToFile); + forAllInDynArrayDo( _VMSMasterEnv->measHistsInfo, (DynArrayFnPtr)&freeHist ); + } MEAS__Print_Hists_for_Susp_Meas; MEAS__Print_Hists_for_Master_Meas;