TITLE 'IEAVELK-LOCK MANAGER ROUTINES' 00010002 * /* START OF SPECIFICATIONS **** 00016002 * 00022002 *01* MODULE-NAME = IEAVELK 00030002 * 00040002 *02* CSECT-NAME = IEAVELK 00050002 * 00060002 *01* DESCRIPTIVE-NAME = SETLOCK SERVICE ROUTINE 00070002 * 00080002 *01* COPYRIGHT = NONE 00090002 * 00100002 *01* STATUS = VERSION 1 00110002 * 00120002 *01* FUNCTION = PROVIDES A MEANS OF SYNCHRONIZING AND CONTROLLING 00130002 * ACCESS TO THE SYSTEMS SERIALLY REUSABLE RESOURCES. 00140002 * 00150002 *02* OPERATION = A LOCK IS OBTAINED BY INSERTING IN THE LOCKWORD 00160002 * THE LOGICAL CPU ID OF THE REQUESTOR CPU (OR THE ADDRESS SPACE 00162002 * ID FOR THE CMS LOCK), USING THE COMPARE AND 00162402 * SWAP INSTRUCTION TO MAKE SURE THAT THE LOCKWORD CURRENTLY 00164002 * CONTAINS A FULLWORD OF ZEROES. THE LOCK IS RELEASED BY 00166002 * REPLACING THE CURRENT ID WHICH IS IN THE LOCK BY A FULLWORD OF 00176002 * ZEROES, USING AN ORDINARY STORE INSTRUCTION. WHEN A LOCK IS 00186002 * OBTAINED OR RELEASED, A BIT IS TURNED ON OR OFF IN A BIT 00196002 * STRING ASSOCIATED WITH THE REQUESTING CPU. THIS STRING 00206002 * CONTAINS ONE BIT PER TYPE OF LOCK IN A PREDEFINED HIERARCHICAL 00216002 * ORDER. AT OBTAIN TIME THIS STRING IS USED TO MAKE SURE THAT 00226002 * THE REQSTR DOES NOT VIOLTE THE HIERCHY & AT RELEASE @Z40FPXJ 00236040 * TIME IT IS USED TO DETERMINE WHETHER THE REQUESTOR MUST BE 00246002 * RETURNED CONTROL ENABLED OR DISABLED. FOR THOSE LEVELS WHERE 00256002 * THERE IS MORE THAN ONE LOCK (E.G.: IOSUCB,TPNCB,...) A CPU 00266002 * LOCKS HELD TABLE, CONTAINING ONE WORD PER LEVEL IN THE 00276002 * HIERARCHY, IS USED TO KEEP TRACK OF WHICH LOCK IS HELD AT THIS 00286002 * LEVEL. THERE ARE TWO TYPES OF LOCKS, SPIN AND SUSPEND. IF AN 00296002 * UNCONDITIONAL REQUEST IS ISSUED FOR AN UNAVALIABLE SPIN LOCK, 00306002 * THE LOCK ROUTINE WILL ENTER A SPIN LOOP UNTIL THE LOCK BECOMES 00316002 * AVALIABLE. THIS LOOP OPENS A WINDOW FOR EMERGENCY SIGNALS AND 00326002 * MALFUNCTION ALERTS. IF AN UNCONDITIONAL REQUEST IS ISSUED FOR 00336002 * AN UNAVALIABLE SUSPEND LOCK, THE CALLER WILL BE SUSPENDED 00346002 * (STATUS SAVED) AND CONTROL WILL RETURN TO THE DISPATCHER TO 00348002 * SELECT ANOTHER AVALIABLE READY UNIT OF WORK. SPECIFIC RETURN 00348402 * CODES AND REQUIREMENTS ARE DESCRIBED IN THE ENTRY POINT 00348802 * DESCRIPTION. 00349202 * 00349602 *01* NOTES = REFERENCE ENTRY POINTS. 00350002 * 00360002 *02* DEPENDENCIES = LISTED ARE THE FOLLOWING DEPENDENCIES - 00370002 * 1. SYSGEN - THE FOLLOWING AREAS MUST BE INITIALIZED IN EACH CPUS 00380002 * PSA BEFORE ANY SETLOCK REQUESTS CAN BE ISSUED. 00390002 * 1.1 - THE 13 FULLWORD CPU LOCKS HELD TABLE, PSACLHT, MUST BE 00400002 * INITIALIZED TO ZEROS. 00410002 * 1.2 - THE 1 FULLWORD CPU LOCKS HELD STRING, PSAHLHI, 00420002 * MUST BE INITIALIZED TO X''00000000''. 00430002 * 1.3 - THE 16 FULLWORD SETLOCK REGISTER SAVE AREA MUST BE 00440002 * INITIALIZED TO ZEROS. 00450002 * 1.4 - A MODEL PSW, PSAMPSW, MUST BE INITIALIZED TO 00460002 * X''000C000000000000''. 00470002 * 1.5 - THE ADDRESS OF SETLOCKS LOCK INTERFACE TABLE, PSALITA, 00480002 * MUST BE INITIALIZED TO THE ADDRESS OF IEAVELIT. 00490002 * 1.6 - A QUICKCELL POOL FOR SETLOCK/PGM CHECK FLIH TO GET 00500002 * SUSPENSION SRBS MUST BE INITIALIZED. 00510002 * 1.7 - ANY PRE-ASSEMBLED ASCBS MUST HAVE FIELDS INITIALIZED 00520002 * AS DESCRIBED IN MEMORY CREATE, 3. 00530002 * 00540002 * 2. NIP - NIP MUST INITIALIZE THE PSACPULA AS FOLLOWS - 00550002 * 2.1 - THE LOGICAL CPU ADDRESS, PSACPULA, MUST BE INITIALIZED 00560002 * TO THE PHYSICAL CPU ADDRESS AND ORD WITH A X''0040''. 00570002 * 00580002 * 3. MEMORY CREATE - THE 3 FULLWORDS IN THE ASCB USED AS @Z40FPXJ 00590040 * THE LOCAL LOCK, THE LOCAL SRB SUSPEND QUEUE, AND THE CMS @Z40FPXJ 00596040 * FOWARD POINTER/MUST BE INITIALIZED TO ZERO. @Z40FPXJ 00602040 * 00620002 * 4. VARY CPU ONLINE - SAME AS NIP. 00630002 * 00640002 * 5. IOS - MUST INITIALIZE ITS IOS LOCKS TO ZERO PRIOR TO ANY 00650002 * SETLOCK REQUESTS AGAINST THEM. 00660002 * 00670002 * 6. ASM - MUST INITIALIZE ITS LOCK TO ZERO PRIOR TO ANY SETLOCK 00680002 * REQUESTS AGAINST IT. 00690002 * 00700002 * 7. ATCAM - MUST INITIALIZE ITS TP LOCKS TO ZERO PRIOR TO ANY 00710002 * SETLOCK REQUESTS AGAINST THEM. 00720002 * 00730002 * 8. DISPATCHER - MUST PROVIDE THE FOLLOWING. 00740002 * 8.1 - AN SRB ACTIVE INDICATOR IN THE LCCA, 00750002 * (LCCADSF2/LCCASRMB). THE CPU AFFINITY, LCCASAFN, AND PURGE 00760002 * ASID/TCB ADDRESS, LCCAPGTA, ARE STORED IN THE CPUS LCCA WHEN 00770002 * EVER A SRB IS DISPATCHED. 00780002 * 8.2 - THE ASCB ADDRESS OF THE CURRENTLY ACTIVE MEMORY IN THE 00790002 * PSA, PSAAOLD. 00800002 * 8.3 - THE SRB SCHEDULING FUNCTION. THIS INCLUDES THE 00810002 * FREEING OF THE SUSPENDED SRB WHEN IT IS DISPATCHED. 00820002 * 8.4 - A DISPATCHER ENTRY POINT THAT CAN BE BRANCHED TO BY 00830002 * THE SETLOCK SERVICE ROUTINE FOR THE FOLLOWING CASES. 00840002 * 8.4.1 - SUSPENSION OF A LOCAL LOCK REQUEST BY A TCB 00850002 * CONTROLLED PROGRAM DISPATCHER MUST SAVE - FPRS, 00860002 * JOB STEP TIMING INFORMATION. DISPATCHER ENTRY POINT = 00870002 * IEA0DS. 00880002 * 8.4.2 - SUSPENSION OF A LOCAL LOCK REQUEST BY AN SRB 00890002 * OCNTROLLED PROGRAM. 00900002 * DISPATCHER ENTRY POINT 00910002 * = IEAPDS2. 00920002 * 8.4.3 - SUSPENSION OF A CMS LOCK REQUEST BY A TCB 00930002 * CONTROLLED PROGRAM. 00940002 * DISPATCHER ENTRY POINT = IEAPDS2. 00970002 * 8.4.4 - SUSPENSION OF A CMS LOCK REQUEST BY AN SRB 00980002 * CONTROLLED PROGRAM. SAME AS 8.4.2. 00990002 * 8.5 - THE DISPATCHER HAS SUPPLIED A COMMON SAVE STATUS 01000002 * ROUTINE(IEAVSPCR) WHOSE CODE IS CONTAINED HEREIN FOR 01010002 * SUSPENDED SRBS AND LOCALLY LOCKED TCBS. DOCUMENTSTION OF THE 01020002 * INTERFACE CAN BE FOUND IN THE DISPATCHER SPECIFICATIONS AND 01030002 * AT THE ENTRY POINT BELOW 01032002 * 01040002 * 9. ACR MUST PROVIDE THE FOLLOWING- 01050002 * 9.1 - A ''THIS CPU IS IN ACR MODE'' INDICATOR. 01060002 * 9.2 - THE LOGICAL CPU ADDRESS OF THE CPU THAT ACR IS 01070002 * RECOVERING. 01080002 * 9.3 - AN ENTRY POINT FOR SETLOCK TO BRANCH TO ACR FOR THE 01090002 * CASE WHERE THE CPU OWNING A LOCK OR A HIGHER LOCK THAN 01100002 * THE ONE SETLOCK IS ATTEMPTING TO ACQUIRE FAILS. 01110002 * 9.4 - SAVE ALL OF SETLOCKS SERIAL RESOURCES (REGISTER SAVE 01120002 * ARE, PSALKSA, PSACLHT,PSAHLHI) FOR THE CASE WHERE 01130002 * SETLOCK DOES ENTER ACR AND ACR IS GOING TO GIVE CONTROL TO 01140002 * FRRS WHICH WILL THEMSELVES ISSUE SETLOCK REQUESTS. 01150002 * 01160002 * 10. - QUICKCELL - MUST PROVIDE A BRANCH ENTRY INTERFACE AND MUST 01170002 * BE ABLE TO PERFORM ITS PROCESSING WITHOUT ISSUING A 01180002 * SETLOCK REQUEST. 01190002 * 01200002 * 11. - EXTERNAL FIRST LEVEL INTERRUPT HANDLER - MUST TEST THE 01210002 * SETLOCK ''WINDOW SPIN'' INDICATOR WHEN ENTERED AND IF ON 01220002 * MUST RETURN CONTROL TO THE POINT OF INTERRUPTION UPON COMPLETION 01230002 * OF ITS INTERRUPT PROCESSING. 01240002 * 01250002 * 12. - SETLOCK IS RESTRICTED TO EC MODE CALLERS. 01260002 * 01270002 * 13. - MEMORY TERMINATION MUST GIVE SETLOCKS RESOURCE MANAGER 01280002 * CLEANUP ROUTINE CONTROL TO REMOVE THE MEMORYS ASCB 01290002 * IF IT IS ON THE CMS LOCKS SUSPEND QUEUE. THE RESOURCE MANAGER 01300002 * CLEANUP ROUTINE MUST ALSO REMOVE FROM THE CMS AND 01310002 * LOCAL LOCK SUSPEND QUEUES ANY SUSPENDED SRBS SCHEDULED TO THE 01320002 * TERMINATING MEMORY. 01330002 * 01340002 * 14. - PURGEDQ MUST GIVE SETLOCKS RESOURCE MANAGER RMTR CONTROL TO 01350002 * FREE UP ANY SUSPENDED SRBS THAT HAVE BEEN SCHEDULED 01360002 * BUT NOT YET DISPATCHED. 01370002 * 01380002 *03* CHARACTER-CODE-DEPENDENCIES = NONE. 01390002 * 01400002 *02* RESTRICTIONS = NONE 01410002 * 01420002 *02* REGISTER-CONVENTIONS = REFERENCE EQUATE SECTION 01430002 * 01440002 *02* PATCH-LABEL = NONE, THIS IS A RESIDENT NUCLEUS MODULE. 01450002 * 01460002 *01* MODULE-TYPE = PROCEDURE 01470002 * 01480002 *02* PROCESSOR = ASSEMBLER 01490002 * 01500002 *02* MODULE-SIZE = 4000 BYTES 01510002 * 01520002 *02* ATTRIBUTES = NUCLEUS,ZERO PROTECT KEY,DISABLED,REFRESHABLE, 01530002 * SUPERVISOR MODE,ADDRSPC=FIXED 01540002 * 01550002 *01* ENTRY-POINT = GSLMCOBT 01560002 * 01570002 *02* PURPOSE = CONDITIONAL OBTAIN FOR GLOBAL SPIN TYPE LOCKS WHEN 01580002 * THERE ARE SEVERAL LOCKS AT SAME LEVEL, OR USER PROVIDES LOCK 01582002 * ADDRESS. 01584002 * 01590002 *02* LINKAGE = SETLOCK MACRO CONDITION REQUEST FOR SPIN LOCK. 01600002 * 01610002 *02* INPUT = SUPERVISOR STATE, ZERO PROTECT KEY. INPUT REGISTERS - 01620002 * R0-R10 = CALLERS REGISTERS, R11 = LOCK ADDRESS, R12 = LOCK 01630002 * ENTRY OFFSET IN CPU LOCKS HELD TABLE, R13 = GSLMCOBT ENTRY 01640002 * POINT ADDRESS, R14 = CALLERS RETURN, R15=CALLERS REGISTER. 01650002 * 01660002 *02* OUTPUT = NONE. 01670002 * 01680002 *01* EXIT-NORMAL = GSLMCOBT 01690002 * 01700002 *02* CONDITIONS = BRANCH REGISTER 14 FOR SUCCESSFUL OBTAIN OF LOCK, 01710002 * LPSW FOR UNSUCCESSFUL OBTAIN OF LOCK. 01720002 * 01730002 *02* OUTPUT = SUCCESSFUL OBTAIN - LOCK ACQUIRED, CPU DISABLED, 01740002 * UNSUCCESSFUL OBTAIN - SAME AS INPUT ENVIRONMENT 01750002 * REGISTERS R0-R10 = CALLERS REGISTERS, R11-R12 = UNPREDICTABLE, 01760002 * R13 = RETURN CODE, R14 = RETURN ADDRESS, R15 = CALLERS 01770002 * REGISTER. 01780002 * 01790002 *02* RETURN-CODES = 0 - LOCK SUCCESSFULLY OBTAINED, 4 - LOCK 01800002 * ALREADY HELD BY CALLER., 8 - UNSUCCESSFUL, LOCK OWNED BY 01810002 * ANOTHER CPU. 01820002 * 01830002 *01* EXIT-ERROR = GSLMCOBT 01840002 * 01850002 *02* CONDITIONS = SVC 13 TO ABEND ANY CALLER REQUESTING A DIFFERENT 01860002 * LOCK OF THE SAME TYPE AS ONE HELD. 01870002 * 01880002 *02* OUTPUT = SUPERVISOR STATE, ZERO PROTECT KEY, LOCKS MAY OR MAY 01890002 * NOT BE HELD. ABEND CALLER WITH 073 SYSTEM ABEND. 01900002 * 01910002 *02* RETURN-CODES = NONE. 01920002 * 01930002 *01* ENTRY-POINT = GSLSCOBT 01932002 * 01934002 *02* PURPOSE = CONDITIONAL OBTAIN FOR GLOBAL SPIN TYPE LOCKS WHEN 01936002 * THERE IS ONLY ONE LOCK AT THIS LEVEL, AND SYSTEM KNOWS LOCK 01938002 * ADDRESS. 01938402 * 01938802 *02* LINKAGE = SETLOCK MACRO CONDITION REQUEST FOR SPIN LOCK. 01939202 * 01939602 *02* INPUT = SUPERVISOR STATE, ZERO PROTECT KEY. INPUT REGISTERS - 01939702 * R0-R10 = CALLERS REGISTERS, R11 = LOCK ADDRESS, R12 = MASK TO 01939802 * UPDATE CPU LOCKS HELD STRING, R13 = GSLCOBT ENTRY 01939902 * POINT ADDRESS, R14 = CALLERS RETURN, R15=CALLERS REGISTER. 01943202 * 01945202 *02* OUTPUT = NONE. 01945602 * 01946002 *01* EXIT-NORMAL = GSLSCOBT 01946402 * 01946502 *02* CONDITIONS = BRANCH REGISTER 14 FOR SUCCESSFUL OBTAIN OF LOCK, 01946602 * LPSW FOR UNSUCCESSFUL OBTAIN OF LOCK. 01947702 * 01948102 *02* OUTPUT = SUCCESSFUL OBTAIN - LOCK ACQUIRED, CPU DISABLED, 01948502 * UNSUCCESSFUL OBTAIN - SAME AS INPUT ENVIRONMENT 01948602 * REGISTERS R0-R10 = CALLERS REGISTERS, R11-R12 = UNPREDICTABLE, 01948702 * R13 = RETURN CODE, R14 = RETURN ADDRESS, R15 = CALLERS 01948802 * REGISTER. 01951602 * 01953602 *02* RETURN-CODES = 0 - LOCK SUCCESSFULLY OBTAINED, 4 - LOCK 01954002 * ALREADY HELD BY CALLER., 8 - UNSUCCESSFUL, LOCK OWNED BY 01954102 * ANOTHER CPU. 01954202 * 01954302 *01* EXIT-ERROR = GSLSCOBT 01955202 * 01955602 *02* CONDITIONS = SVC 13 TO ABEND ANY CALLER REQUESTING A DIFFERENT 01956002 * LOCK OF THE SAME TYPE AS ONE HELD. 01956102 * 01956202 *02* OUTPUT = SUPERVISOR STATE, ZERO PROTECT KEY, LOCKS MAY OR MAY 01957102 * NOT BE HELD. ABEND CALLER WITH 073 SYSTEM ABEND. 01957502 * 01957902 *02* RETURN-CODES = NONE. 01958002 * 01958102 *01* ENTRY-POINT = GSLMUOBT(OR VIA GSLMUOBD FOR DISABLED ENTRY) 01958202 * 01959102 *02* PURPOSE = UNCONDITIONAL OBTAIN FOR GLOBAL SPIN TYPE LOCKS WHEN 01960002 * THERE ARE SEVERAL LOCKS AT SAME LEVEL, OR USER PROVIDES LOCK 01962002 * ADDRESS. 01964002 * 01970002 *02* LINKAGE = SETLOCK MACRO UNCONDITIONAL OBTAIN REQUEST FOR SPIN 01980002 * LOCK. 01990002 * 02000002 *02* INPUT = SUPERVISOR STATE, ZERO PROTECT KEY. INPUT REGISTERS - 02010002 * R0-R10 =CALLERS REGISTERS, R11 = LOCK ADDRESS, R12 = LOCK 02020002 * ENTRY OFFSET IN CPU LOCKS HELD TABLE, R13 = GSLMUOBT ENTRY 02030002 * POINT ADDRESS, R14 = RETURN ADDRESS, R15 = CALLERS REGISTERS. 02040002 * 02050002 *02* OUTPUT = NONE. 02060002 * 02070002 *01* EXIT-NORMAL = GSLMUOBT 02080002 * 02090002 *02* CONDITIONS = BRANCH REGISTER 14 FOR SUCCESSFUL OBTAIN OF LOCK, 02100002 * LPSW FOR UNSUCCESSFUL OBTAIN OF LOCK. 02110002 * 02120002 *02* OUTPUT = SUCCESSFUL OBTAIN - LOCK ACQUIRED, CPU DISABLED, 02130002 * UNSUCCESSFUL OBTAIN - SAME AS INPUT ENVIRONMENT. 02140002 * REGISTERS R0-R10 = CALLERS REGISTERS, R11-R12 = UNPREDICTABLE, 02150002 * R13 = RETURN CODE, R14 = RETURN ADDRESS, R15 = CALLERS 02160002 * REGISTER. 02170002 * 02180002 *02* RETURN-CODES = 0 - LOCK SUCCESSFULLY OBTAINED., 4 - LOCK 02190002 * ALREADY HELD BY CALLER., 8 - UNSUCCESSFUL, LOCK OWNED BY 02200002 * ANOTHER CPU. 02210002 * 02220002 *01* EXIT-ERROR = GSLMUOBT 02230002 * 02240002 *02* CONDITIONS = SVC 13 TO ABEND ANY CALLER REQUESTING A DIFFERENT 02250002 * LOCK OF THE SAME TYPE AS ONE HELD OR REQUESTING A LOCK LOWER 02260002 * IN THE HIERARCHY THAN A LOCK ALREADY HELD. 02270002 * 02280002 *02* OUTPUT = SUPERVISOR STATE, ZERO PROTECT KEY, LOCKS MAY OR MAY 02290002 * NOT BE HELD. ABEND CALLER WITH 073 SYSTEM ABEND. 02300002 * 02310002 *02* RETURN-CODES = NONE. 02320002 * 02330002 *01* ENTRY-POINT = GSLSUOBT(OR VIA GSLSUOBD FOR DISABLED ENTRY OR VIA 02332002 * GSLSDISP FOR DISPATCHER ENTRY ONLY) 02333002 * 02334002 *02* PURPOSE = UNCONDITIONAL OBTAIN FOR GLOBAL SPIN TYPE LOCKS WHEN 02336002 * THERE IS ONLY ONE LOCK AT THIS LEVEL, AND SYSTEM KNOWS LOCK 02338002 * ADDRESS. 02338402 * 02338802 *02* LINKAGE = SETLOCK MACRO UNCONDITIONAL OBTAIN REQUEST FOR SPIN 02339202 * LOCK. 02339602 * 02339702 *02* INPUT = SUPERVISOR STATE, ZERO PROTECT KEY. INPUT REGISTERS - 02339802 * R0-R10 =CALLERS REGISTERS, R11 = LOCK ADDRESS, R12 = MASK TO 02339902 * UPDATE CPU LOCKS HELD STRING, R13 = GSLSUOBT ENTRY 02341902 * POINT ADDRESS, R14 = RETURN ADDRESS, R15 = CALLERS REGISTERS. 02345202 * 02345602 *02* OUTPUT = NONE. 02346002 * 02346402 *01* EXIT-NORMAL = GSLSUOBT 02346502 * 02346602 *02* CONDITIONS = BRANCH REGISTER 14 FOR SUCCESSFUL OBTAIN OF LOCK, 02347702 * LPSW FOR UNSUCCESSFUL OBTAIN OF LOCK. 02348102 * 02348502 *02* OUTPUT = SUCCESSFUL OBTAIN - LOCK ACQUIRED, CPU DISABLED, 02348602 * UNSUCCESSFUL OBTAIN - SAME AS INPUT ENVIRONMENT. 02348702 * REGISTERS R0-R10 = CALLERS REGISTERS, R11-R12 = UNPREDICTABLE, 02348802 * R13 = RETURN CODE, R14 = RETURN ADDRESS, R15 = CALLERS 02351602 * REGISTER. 02353602 * 02354002 *02* RETURN-CODES = 0 - LOCK SUCCESSFULLY OBTAINED., 4 - LOCK 02354102 * ALREADY HELD BY CALLER., 8 - UNSUCCESSFUL, LOCK OWNED BY 02354202 * ANOTHER CPU. 02354302 * 02355202 *01* EXIT-ERROR = GSLSUOBT 02355602 * 02356002 *02* CONDITIONS = SVC 13 TO ABEND ANY CALLER REQUESTING A DIFFERENT 02356102 * LOCK OF THE SAME TYPE AS ONE HELD OR REQUESTING A LOCK LOWER 02356202 * IN THE HIERARCHY THAN A LOCK ALREADY HELD. 02357102 * 02357502 *02* OUTPUT = SUPERVISOR STATE, ZERO PROTECT KEY, LOCKS MAY OR MAY 02357902 * NOT BE HELD. ABEND CALLER WITH 073 SYSTEM ABEND. 02358002 * 02358102 *02* RETURN-CODES = NONE. 02360402 * 02362402 *01* ENTRY-POINT = GSLMREL 02363102 * 02365402 *02* PURPOSE = RELEASE FOR GLOBAL SPIN LOCKS WHEN THERE ARE SEVERAL 02367702 * LOCKS AT SAME LEVEL, OR USER PROVIDES LOCK ADDRESS. 02369702 * 02370002 *02* LINKAGE = SETLOCK MACRO RELEASE REQUEST FOR SPIN LOCK. 02380002 * 02390002 *02* INPUT = SUPERVISOR STATE, ZERO PROTECT KEY. INPUT REGISTERS - 02400002 * R0-R10 = CALLERS REGISTERS, R11 = LOCK ADDRESS, 02410002 * R12 = LOCK ENTRY OFFSET IN CPU LOCKS HELD TABLE, R13 = GSLMREL 02420002 * ENTRY POINT ADDRESS, R14 = CALLERS RETURN ADDRESS, R15 = 02430002 * CALLERS REGISTER. 02440002 * 02450002 *02* OUTPUT = NONE. 02460002 * 02470002 *01* EXIT-NORMAL = GSLMREL 02480002 * 02490002 *02* CONDITIONS = BRANCH REGISTER 14 FOR SUCCESSFUL RELEASE OF LOCK 02500002 * AND OTHER GLOBAL SPIN LOCKS HELD OR DISABLED SUPERVISOR 02510002 * INDICATOR ON. LPSW TO RETURN CONTROL ENABLE IF NO OTHER 02520002 * GLOBAL SPIN LOCKS ARE HELD AND NO SUPERVISOR INDICATORS ARE 02530002 * ON. LPSW TO RETURN CONTROL IS SAME STATE AS CALLED IF RELEASE 02540002 * IS UNSUCCESSFUL. 02550002 * 02560002 *02* OUTPUT = LOCK RELEASED IF PREVIOUSLY HELD, CPU DISABLED OR 02570002 * ENABLED DEPENDING ON CONDITIONS. REGISTERS R0-R10 = CALLERS 02580002 * REGISTERS, R11-R12 = UNPREDICTABLE, R13 = RETURN CODE, 02590002 * R14 = RETURN ADDRESS, R15 = CALLERS REGISTER. 02600002 * 02610002 *02* RETURN-CODES = 0 - LOCK SUCCESSFULLY RELEASED., 4 - LOCK WAS 02620002 * NOT OWNED BY ANYONE., 8 - LOCK WAS OWNED BY ANOTHER CPU. 02630002 * 02640002 *01* ENTRY-POINT = GSLSREL 02642002 * 02644002 *02* PURPOSE = RELEASE FOR GLOBAL SPIN LOCKS WHEN THERE IS ONLY ONE 02646002 * LOCK AT SAME LEVEL, AND SYSTEM KNOWS LOCK ADDRESS. 02648002 * 02648402 *02* LINKAGE = SETLOCK MACRO RELEASE REQUEST FOR SPIN LOCK. 02648802 * 02649202 *02* INPUT = SUPERVISOR STATE, ZERO PROTECT KEY. INPUT REGISTERS - 02649602 * R0-R10 = CALLERS REGISTERS, R11 = LOCK ADDRESS, 02649702 * R12 = MASK TO UPDATE CPU LOCKS HELD STRING, R13 = GSLSREL 02649802 * ENTRY POINT ADDRESS, R14 = CALLERS RETURN ADDRESS, R15 = 02649902 * CALLERS REGISTER. 02653202 * 02655202 *02* OUTPUT = NONE. 02655602 * 02656002 *01* EXIT-NORMAL = GSLSREL 02656402 * 02656502 *02* CONDITIONS = BRANCH REGISTER 14 FOR SUCCESSFUL RELEASE OF LOCK 02656602 * AND OTHER GLOBAL SPIN LOCKS HELD OR DISABLED SUPERVISOR 02657702 * INDICATOR ON. LPSW TO RETURN CONTROL ENABLE IF NO OTHER 02658102 * GLOBAL SPIN LOCKS ARE HELD AND NO SUPERVISOR INDICATORS ARE 02658502 * ON. LPSW TO RETURN CONTROL IS SAME STATE AS CALLED IF RELEASE 02658602 * IS UNSUCCESSFUL. 02658702 * 02658802 *02* OUTPUT = LOCK RELEASED IF PREVIOUSLY HELD, CPU DISABLED OR 02661602 * ENABLED DEPENDING ON CONDITIONS. REGISTERS R0-R10 = CALLERS 02663602 * REGISTERS, R11-R12 = UNPREDICTABLE, R13 = RETURN CODE, 02664002 * R14 = RETURN ADDRESS, R15 = CALLERS REGISTER. 02664102 * 02664202 *02* RETURN-CODES = 0 - LOCK SUCCESSFULLY RELEASED., 4 - LOCK WAS 02664302 * NOT OWNED BY ANYONE., 8 - LOCK WAS OWNED BY ANOTHER CPU. 02665202 * 02665602 *01* ENTRY-POINT = GSLMRELD 02666302 * 02667202 *02* PURPOSE = RELEASE A GLOBAL SPIN LOCK WHEN THERE ARE SEVERAL 02670002 * LOCKS AT SAME LEVEL, OR USER PROVIDES LOCK ADDRESS, AND RETURN 02672002 * CONTROL DISABLED. 02674002 * 02690002 *02* LINKAGE = SETLOCK MACRO RELEASE SPIN LOCK DISABLED REQUEST. 02700002 * 02710002 *02* INPUT = SUPERVISOR STATE, ZERO PROTECT KEY. INPUT REGISTERS - 02720002 * R0-R10 = CALLERS REGISTERS, R11 = LOCK ADDRESS, R12 = LOCK 02730002 * ENTRY OFFSET IN CPU LOCKS HELD TABLE, R13 = GSLMRELD ENTRY 02740002 * POINT ADDRESS, R14 = CALLERS RETURN ADDRESS, R15 = CALLERS 02750002 * REGISTER. 02760002 * 02770002 *02* OUTPUT = NONE. 02780002 * 02790002 *01* EXIT-NORMAL = GSLMRELD 02800002 * 02810002 *02* CONDITIONS = BRANCH REGISTER 14 FOR SUCCESSFUL RELEASE OF 02820002 * LOCK. LPSW FOR UNSUCCESSFUL RELEASE OF LOCK. 02830002 * 02840002 *02* OUTPUT = SUCCESSFUL RELEASE, CPU DISABLED. UNSUCCESSFUL 02850002 * RELEASE, CPU IN SAME STATE AS ENTRY ENVIRONMENT. REGISTERS - 02860002 * R0-R10 = CALLERS REGISTERS, R11-R12 = UNPREDICTABLE, R13 = 02870002 * RETURN CODE, R14 = RETURN ADDRESS, R15 = CALLERS REGISTER. 02880002 * 02890002 *02* RETURN-CODES = 0 - LOCK SUCCESSFULLY RELEASED., 4 - LOCK 02900002 * ALREADY HELD BY CALLER., 8 - UNSUCCESSFUL, LOCK OWNED BY 02910002 * 02920002 *01* ENTRY-POINT = GSLSRELD 02942002 * 02944002 *02* PURPOSE = RELEASE A GLOBAL SPIN LOCK WHEN THERE IS ONLY ONE 02946002 * LOCK AT SAME LEVEL, AND SYSTEM KNOWS LOCK ADDRESS, AND RETURN 02948002 * CONTROL DISABLED. 02948402 * 02948802 *02* LINKAGE = SETLOCK MACRO RELEASE SPIN LOCK DISABLED REQUEST. 02949202 * 02949602 *02* INPUT = SUPERVISOR STATE, ZERO PROTECT KEY. INPUT REGISTERS - 02949702 * R0-R10 = CALLERS REGISTERS, R11 = LOCK ADDRESS, R12 = MASK TO 02949802 * UPDATE CPU LOCKS HELD STRING, R13 = GSLSRELD ENTRY 02949902 * POINT ADDRESS, R14 = CALLERS RETURN ADDRESS, R15 = CALLERS 02953202 * REGISTER. 02955202 * 02955602 *02* OUTPUT = NONE. 02956002 * 02956402 *01* EXIT-NORMAL = GSLSRELD 02956502 * 02956602 *02* CONDITIONS = BRANCH REGISTER 14 FOR SUCCESSFUL RELEASE OF 02957702 * LOCK. LPSW FOR UNSUCCESSFUL RELEASE OF LOCK. 02958102 * 02958502 *02* OUTPUT = SUCCESSFUL RELEASE, CPU DISABLED. UNSUCCESSFUL 02958602 * RELEASE, CPU IN SAME STATE AS ENTRY ENVIRONMENT. REGISTERS - 02958702 * R0-R10 = CALLERS REGISTERS, R11-R12 = UNPREDICTABLE, R13 = 02958802 * RETURN CODE, R14 = RETURN ADDRESS, R15 = CALLERS REGISTER. 02961602 * 02963602 *02* RETURN-CODES = 0 - LOCK SUCCESSFULLY RELEASED., 4 - LOCK 02964002 * ALREADY HELD BY CALLER., 8 - UNSUCCESSFUL, LOCK OWNED BY 02964102 * 02964202 *01* ENTRY-POINT = LLCOBT(OR VIA LLCOSVCF FOR SVC FLIH ONLY) 02964302 * 02965202 *02* PURPOSE = CONDITIONAL OBTAIN FOR THE LOCAL MEMORY LOCK 02966302 * 02967202 *02* LINKAGE = SETLOCK MACRO CONDITIONAL OBTAIN REQUEST FOR THE 02970002 * LOCAL LOCK. 02980002 * 02990002 *02* INPUT = SUPERVISOR STATE, ZERO PROTECT KEY. REGISTERS - 03000002 * R0-R10 = CALLERS REGISTER, R11 = ZERO, R12 = LOCAL LOCKS ENTRY 03010002 * ADDRESS IN CPU LOCK HELD TABLE, R13 = RETURN CODE, R14 = 03020002 * RETURN ADDRESS, R15 = CALLERS REGISTER. 03030002 * 03040002 *01* EXIT-NORMAL = LLCOBT 03050002 * 03060002 *02* CONDITIONS = LPSW TO RETURN CONTROL TO CALLER IN SAME STATE AS 03070002 * CALLED. LOCAL LOCK MAY OR MAY NOT BE OBTAINED. 03080002 * 03090002 *02* OUTPUT = LOCAL LOCK HELD IF SUCCESSFUL. SAME STATE AS ENTRY 03100002 * ENVIRONMENT. REGISTERS - R0-R10 = CALLERS REGISTERS, R11-R12 03110002 * = UNPREDICTABLE, R13 = RETURN CODE, R14 = RETURN ADDRESS, R15 03120002 * = CALLERS REGISTER. 03130002 * 03140002 *02* RETURN-CODES = 0 - LOCK SUCCESSFULLY OBTAINED., 4 - LOCK 03150002 * ALREADY HELD BY CALLER., 8 - UNSUCCESSFUL, LOCK OWNED BY 03160002 * ANOTHER CPU. 03170002 * 03180002 *01* ENTRY-POINT = LLREL(OR VIA LRELEXPR FOR EXIT PROLOGUE ONLY OR VIA 03190002 * LRELDISP FOR DISPATCHER ONLY) 03195002 * 03200002 *02* PURPOSE = RELEASE FOR THE LOCAL MEMORY LOCK. 03210002 * 03220002 *02* LINKAGE = SETLOCK MACRO RELEASE LOCAL LOCK REQUEST. 03230002 * 03240002 *02* INPUT = SUPERVISOR STATE, ZERO PROTECT KEY. REGISTERS - 03250002 * R0-R10 = CALLERS REGISTERS, R11 = ZERO, R12=LOCAL LOCKS ENTRY 03260002 * ADDRESS IN CPU LOCK HELD TABLE, R13 = LLREL ENTRY POINT 03270002 * ADDRESS, R14 = RETURN ADDRESS, R15 = CALLERS REGISTER. 03280002 * 03290002 *01* EXIT-NORMAL = LLREL 03300002 * 03310002 *02* CONDITIONS = LPSW TO RETURN TO SAME STATE AS ENTERED. LOCAL 03320002 * LOCK RELEASED IF PREVIOUSLY HELD. 03330002 * 03340002 *02* OUTPUT = SAME STATE AS ENTRY ENVIRONMENT. A SUSPEND- @Z40FPXJ 03350040 * ED SRB, IF THERE IS ONE, WILL HAVE BEEN GIVEN THE @Z40FPXJ 03355040 * LOCK AND SCHEDULED. A MEMORY SWITCH MAY HAVE BEEN @Z40FPXJ 03360040 * INVOKED IF THERE WERE NO SUSPENDED SRBS AND THE NUMBER OF 03370002 * READY TCBS IN THE LOCAL MEMORY EXCEEDED THE NUMBER OF CPUS 03380002 * DISPATCHED TO THE MEMORY. REGISTERS - R0-R10 = CALLERS 03390002 * REGISTERS, R11-R12 = UNPREDICTABLE, R13 = RETURN CODE, R14 = 03400002 * RETURN ADDRESS, R15 = CALLERS REGISTER. 03410002 * 03420002 *02* RETURN-CODES = 0 - LOCAL LOCK SUCCESSFULLY RELEASED., 4 - 03430002 * LOCAL LOCK NOT OWNED BY ANYONE., 8 - LOCAL LOCK OWNED BY 03440002 * ANOTHER CALLER. 03450002 * 03460002 *01* EXIT-ERROR = LLREL 03470002 * 03480002 *02* CONDITIONS = SVC 13 TO ABEND ANY CALLER ATTEMPTING TO FREE THE 03490002 * LOCAL LOCK WHILE HOLDING THE CMS LOCK. 03500002 * 03510002 *02* OUTPUT = SUPERVISOR STATE, ZERO PROTECT KEY, LOCKS HELD. 03520002 * ABEND CALLER WITH 073 SYSTEM ABEND. 03530002 * 03540002 *02* RETURN-CODES = NONE. 03550002 * 03560002 *01* ENTRY-POINT = LLUOBT 03570002 * 03580002 *02* PURPOSE = UNCONDITIONAL OBTAIN OF THE LOCAL LOCK. 03590002 * 03600002 *02* LINKAGE = SETLOCK MACRO UNCONDITION OBTAIN REQUEST. 03610002 * 03620002 *02* INPUT = SUPERVISOR STATE, ZERO PROTECT KEY. REGISTERS - 03630002 * R0-R10 = CALLERS REGISTERS, R11 = ZERO, R12 = LOCAL LOCKS 03640002 * ENTRY ADDRESS IN CPU LOCKS HELD TABLE, R13 = LLUOBT ENTRY 03650002 * POINT ADDRESS, R14 = RETURN ADDRESS, R15 = CALLERS REGISTER. 03660002 * 03670002 *02* OUTPUT = NONE. 03680002 * 03690002 *01* EXIT-NORMAL = LLUOBT 03700002 * 03710002 *02* CONDITIONS = LPSW TO EXIT IN SAME STATE AS CALLED EXCEPT LOCAL 03720002 * LOCK WILL BE HELD. 03730002 * 03740002 *02* OUTPUT = SUPERVISOR STATE, ZERO PROTECT KEY, REGISTERS - 03750002 * R0-R10 = CALLERS REGISTERS, R11-R12 = UNPREDICTABLE, R13 = 03760002 * RETURN CODE, R14 = RETURN ADDRESS, R15 = CALLERS REGISTER. 03770002 * 03780002 *02* RETURN-CODES = 0 - LOCAL LOCK SUCCESSFULLY OBTAINED., 4 - 03790002 * LOCAL LOCK ALREADY HELD. 03800002 * 03810002 *01* EXIT-NORMAL = LLUOBT 03820002 * 03830002 *02* CONDITIONS = BRANCH REGISTER 15 TO THE DISPATCHER AT ENTRY 03840002 * IEA0DS @Z40FPXJ 03850040 * 03870002 *02* OUTPUT = AT ENTRY POINT IEA0DS, THE DISPATCHER WILL BE ENTERED 03880002 * WITH NO LOCKS HELD AND THE STATUS OF THE CALLER SAVED IN THE 03890002 * TCB & RB OR A SUSPENDED SRB. ENTRY WILL BE MADE IN @Z40FPXJ 03900040 * SUPERVISOR STATE, 0 PROTECT KEY, & PHISICALLY @Z40FPXJ 03907040 * DISABLED EXCEPT FOR M.C. @Z40FPXJ 03914040 * 03980002 *02* RETURN-CODES = NONE. 03990002 * 04000002 *01* EXIT-ERROR = LLUOBT 04010002 * 04020002 *02* CONDITIONS = SVC 13 TO ABEND ANY CALLER REQUESTING THE LOCAL 04030002 * LOCK AND HOLDING ANOTHER LOCK (HIERARCHY VIOLATION) OR IF THE 04040002 * CALLER IS NOT IN TCB/RB OR SRB MODE. 04050002 * 04060002 *02* OUTPUT = SUPERVISOR STATE, ZERO PROTECT KEY, LOCKS MAY OR MAY 04070002 * NOT BE HELD. ABEND CALLER WITH 073 SYSTEM ABEND. 04080002 * 04090002 *02* RETURN-CODES = NONE. 04100002 * 04110002 *01* ENTRY-POINT = CMSUOBT 04120002 * 04130002 *02* PURPOSE = UNCONDITIONAL OBTAIN FOR THE CMS LOCK. 04140002 * 04150002 *02* LINKAGE = SETLOCK MACRO UNCONDITIONAL OBTAIN CMS LOCK REQUEST. 04160002 * 04170002 *02* INPUT = SUPERVISOR STATE, ZERO PROTECT KEY, LOCAL LOCK HELD. 04180002 * REGISTERS - R0-R10 = CALLERS REGISTER, R11 = CMS LOCK ADDRESS, 04190002 * R12 = CMS LOCKS ENTRY ADDRESS IN CPU LOCKS HELD TABLE, R13 = 04200002 * CMSUOBT ENTRY POINT ADDRESS, R14 = RETURN ADDRESS, R15 = 04210002 * CALLERS REGISTER. 04220002 * 04230002 *02* OUTPUT = NONE. 04240002 * 04250002 *01* EXIT-NORMAL = CMSUOBT 04260002 * 04270002 *02* CONDITIONS = LPSW TO RETURN CONTROL BACK TO CALLER IN SAME 04280002 * STATE AS CALLED, AND THE CMS LOCK WILL BE HELD. 04290002 * 04300002 *02* OUTPUT = SUPERVISOR STATE, ZERO PROTECT KEY, CMS AND LOCAL 04310002 * LCOK HELD. REGISTERS - R0-R10 = CALLERS REGISTERS, R11-R12 = 04320002 * UNPREDICTABLE, R13 = RETURN CODE, R14 = RETURN ADDRESS, R15 = 04330002 * CALLERS REGISTER. 04340002 * 04350002 *02* RETURN-CODES = 0 - CMS LOCK SUCCESSFULLY OBTAINED, 4 - CMS 04360002 * LOCK ALREADY OWNED. 04370002 * 04380002 *01* EXIT-NORMAL = CMSUOBT 04390002 * 04400002 *02* CONDITIONS = CONTROL WILL BE GIVEN TO THE DISPATCHER IF THE 04410002 * CALLER FAILS TO OBTAIN THE CMS LOCK. IF THE CALLER IS A 04420002 * NON-SRB CALLER, CALLERS STATUS WILL BE SAVED IN THE INTERRUPT 04430002 * HANDLER SAVE AREA, THE ASCB WILL BE ENQED ON THE CMS @Z40FPXJ 04440040 * SUSPEND QUEUE WHICH IS SERIALIZED BY CDS LOGIC. THE @Z40FPXJ 04450040 * INTERRUPT ID WILL BE PLACED IN THE LOCAL LOCK. CONTRL @Z40FPXJ 04460040 * WILL BE GIVEN TO THE DISP AT ENTRY PT IEAODS. IF @Z40FPXJ 04470040 * THE CALLER IS A SRB CALLER, CALLERS STATUS WILL BE SAVED IN A 04490002 * SUSPENDED SRB. THE SUSPENDED SRB WILL BE ENQUEED ON THE CMS 04500002 * SUSPEND QUEUE WHICH IS SERIALIZED BY CDS LOGIC. @Z40FPXJ 04510040 * THE INTERRUPT ID WILL BE PLACED IN THE LOCAL LOCK, @Z40FPXJ 04516040 * THE LOCAL LOCKS CPU LOCK HELD TABLE ENTRY WILL BE ZEROD OUT 04540002 * AND CONTROL WILL BE GIVEN TO THE DISPATCHER AT ENTRY POINT 04550002 * IEA0DS. @Z40FPXJ 04560040 * 04570002 *02* OUTPUT = SUPERVISOR STATE, ZERO PROTECT KEY, PHYSICALLY 04580002 * DISABLED EXCEPT FOR M.C. DISPATCHER LOCK HELD, REGISTERS - 04590002 * R0-R14 = UNPREDICTABLE, R15 = DISPATCHER ENTRY POINT. 04600002 * 04610002 *02* RETURN-CODES = NONE. 04620002 * 04630002 *01* EXIT-ERROR = CMSUOBT 04640002 * 04650002 *02* CONDITIONS = SVC 13 TO ABEND ANY CALLER REQUESTING THE CMS 04660002 * LOCK WITHOUT OWNING THE LOCAL LOCK OR HOLDING A LOCK HIGHER IN 04670002 * THE LOCKING HIERARCHY. 04680002 * 04690002 *02* OUTPUT = SUPERVISOR STATE, ZERO PROTECT KEY, LOCKS MAY OR MAY 04700002 * NOT BE HELD. ABEND CALLER WITH 073 SYSTEM ABEND. 04710002 * 04720002 *02* RETURN-CODES = NONE. 04730002 * 04740002 *01* ENTRY-POINT = CMSCOBT 04750002 * 04760002 *02* PURPOSE = CONDITIONAL OBTAIN FOR THE CMS LOCK 04770002 * 04780002 *02* LINKAGE = SETLOCK MACRO CONDITIONAL OBTAIN REQUEST FOR CMS 04790002 * LOCK. 04800002 * 04810002 *02* INPUT = SUPERVISOR STATE, ZERO PROTECT KEY, REGISTERS - R0-R10 04820002 * = CALLERS REGISTERS, R11 = CMS LOCK ADDRESS, R12 = CMS LOCKS 04830002 * CPU LOCKS HELD TABLE ENTRY ADDRESS, R13 = CMSCOBT ENTRY POINT 04840002 * ADDRESS, R14 = RETURN ADDRESS, R15 = CALLERS REGISTER. 04850002 * 04860002 *02* OUTPUT = NONE. 04870002 * 04880002 *01* EXIT-NORMAL = CMSCOBT 04890002 * 04900002 *02* CONDITIONS = LPSW TO RETURN CONTROL IN SAME STATE AS CALLED. 04910002 * 04920002 *02* OUTPUT = SUPERVISOR STATE, ZERO PROTECT KEY, REGISTERS - 04930002 * R0-R10 = CALLERS REGISTERS, R11-R12 = UNPREDICTABLE, R13 = 04940002 * RETURN CODE , R14 = RETURN ADDRESS, R15 = CALLERS REGISTER. 04950002 * 04960002 *02* RETURN-CODES = 0 - CMS LOCK SUCCESSFULLY OBTAINED, 4 - CMS 04970002 * LOCK ALREADY OWNED., 8 - CMS LOCK OWNED BY ANOTHER MEMORY. 04980002 * 04990002 *01* EXIT-ERROR = CMSCOBT 05000002 * 05010002 *02* CONDITIONS = SVC 13 TO ABEND ANY CALLER REQUESTING THE CMS 05020002 * LOCK WITHOUT OWNING THE LOCAL LOCK. 05030002 * 05040002 *02* OUTPUT = SUPERVISOR STATE, ZERO PROTECT KEY, LOCKS MAY OR MAY 05050002 * NOT BE HELD. ABEND CALLER WITH 073 SYSTEM ABEND. 05060002 * 05070002 *02* RETURN-CODES = NONE. 05080002 * 05090002 *01* ENTRY-POINT = CMSREL 05100002 * 05110002 *02* PURPOSE = RELEASE FOR THE CMS LOCK. 05120002 * 05130002 *02* LINKAGE = SETLOCK MACRO RELEASE REQUEST FOR THE CMS LOCK. 05140002 * 05150002 *02* INPUT = SUPERVISOR STATE, ZERO PROTECT KEY, REGISTERS - R0-R10 05160002 * = CALLERS REGISTERS, R11 = CMS LOCK ADDRESS, R12 = CMS LOCKS 05170002 * CPU LOCKS HELD TABLE ENTRY ADDRESS, R13 = RETURN CODE, R14 = 05180002 * RETURN ADDRESS, R15 = CALLERS REGISTER. 05190002 * 05200002 *02* OUTPUT = NONE. 05210002 * 05220002 *01* EXIT-NORMAL = CMSREL 05230002 * 05240002 *02* CONDITIONS = LPSW TO RETURN TO CALLER IN SAME STATE AS CALLED. 05250002 * 05260002 *02* OUTPUT = SUPERVISOR STATE, ZERO PROTECT KEY, ANY SUSPENDED 05270002 * SRBS DEQUED FROM THE SUSPEND QUEUE & SCHEDULED, ANY SUSPENDED 05280040 * ASCBS DEQUEUED AND MEMORY SWITCH INVOKED FOR EACH ONE IF NO 05286040 * SRBS ARE SCHEDULED, REGISTERS - R0-R10 = CALLERS REGISTERS, 05300002 * R11-R12 = UNPREDICTABLE, R13 = RETURN CODES, R14 = RETURN 05310002 * ADDRESS, R15 = CALLER REGISTER. 05320002 * 05330002 *02* RETURN-CODES = 0 - CMS LOCK SUCCESSFULLY RELEASED., 4 - CMS 05340002 * LOCK NOT OWNED BY ANYONE., 8 - CMS LOCK OWNED BY ANOTHER 05350002 * MEMORY. 05360002 * 05370002 *01* ENTRY-POINT = RELGSD 05380002 * 05390002 *02* PURPOSE = MULTIPLE RELEASE OF SPIN LOCKS, ACCORDING TO AN 05392002 * INPUT STRING IN R11; 05394002 * 05396002 *02* LINKAGE = BRANCH REGISTER 13 WHICH CONTAINS AN ADDRESS 05398002 * OBTAINED FROM THE LOCK INTERFACE TABLE, IEAVELIT. 05398402 * 05398802 *02* INPUT = SUPERVISOR STATE, ZERO PROTECT KEY, DISABLED BECAUSE 05399202 * AT LEAST ONE SPIN LOCK HELD, R0-R10 = CALLERS REGISTERS, R11 = 05399602 * STRING INDICATING WHICH SPIN LOCKS ARE TO BE RELEASED, R12 = 05399702 * ADDRESS OF AN INDIRECT ADDRESS LIST TOWARD LOCKWORDS, R13 = 05399802 * ENTRY POINT ADDRESS IN RELGS, R14 = RETURN ADDRESS, R15 = 05399902 * CALLER REGISTER. 05402102 * 05404102 *01* EXIT-NORMAL = RELGS 05404502 * 05405002 *02* CONDITIONS = BRANCH AFTER A POSSIBLE STOSM TO RETURN 05405402 * CONTROL TO THE CALLER IN A DISABLED OR ENABLED STATE 05405802 * WITH REQUIRED LOCKS RELEASED, DEPENDING ON REQUEST, REQUESTOR, 05405902 * AND/OR STATUS OF NON INVOLVED SPIN LOCKS IF ANY. 05406402 * 05406802 *02* OUTPUT = SUPERVISOR STATE, ZERO PROTECT KEY, 05407202 * REGISTERS - R0-R10 = CALLERS REGISTERS, R11-R13 = 05407302 * UNPREDICTABLE, R14 = CALLERS RETURN ADDRESS, R15 = CALLERS 05407402 * REGISTER. 05407602 * 05408002 *02* RETURN-CODES = NONE. 05408102 * 05408202 *01* ENTRY-POINT = IEAVELRM 05500202 * 05502202 *02* PURPOSE = TO CLEANUP LOCAL LOCK SRB SUSPEND QUEUE. 05504202 * 05506602 *02* LINKAGE = BRANCH REGISTER 15 WHICH CONTAINS 05507002 * THE ENTRY POINT ADDRESS. 05507402 * 05507802 *02* INPUT = SUPERVISOR STATE, ZERO PROTECT KEY, ENABLED R1 = 05507902 * ADRESS OF THE ADDRESS OF A PARM LIST, R14 CONTAINS THE RETURN 05517902 * ADDRESS R13 CONTAINS THE ADDRESS OF A REGISTER SAVE AREA. THE 05527902 * PARMLIST CONTAINS THE ADDRESS OF THE ASCB BEING TERMINATED IN 05537902 * THE FIELD RMPLASCB. 05538302 * 05538802 *01* EXIT-NORMAL = BRANCH ON R14. 05540802 * 05541202 *02* CONDITIONS = IN ALL CASES. 05541302 * 05551002 *02* OUTPUT = SUPERVISOR STATE, ZERO PROTECT KEY, 05551402 * ENABLED,ALL REGS AS ON ENTRY,LOCAL SUSPEND QUEUE CLEARED. 05551802 * 05552402 *02* RETURN-CODES = NONE. 05552502 * 05576402 *01* ENTRY-POINT = RELGSD 05580402 * 05594302 *02* PURPOSE = MULTIPLE RELEASE OF SPIN LOCKS, ACCORDING TO AN 05608202 * INPUT STRING IN R11; 05658202 * 05658602 *02* LINKAGE = BRANCH REGISTER 13 WHICH CONTAINS AN ADDRESS 05659002 * OBTAINED FROM THE LOCK INTERFACE TABLE, IEAVELIT. 05659402 * 05659802 *02* INPUT = SUPERVISOR STATE, ZERO PROTECT KEY, DISABLED BECAUSE 05659902 * AT LEAST ONE SPIN LOCK HELD, R0-R10 = CALLERS REGISTERS, R11 = 05663202 * STRING INDICATING WHICH SPIN LOCKS ARE TO BE RELEASED, R12 = 05665202 * ADDRESS OF AN INDIRECT ADDRESS LIST TOWARD LOCKWORDS, R13 = 05665602 * ENTRY POINT ADDRESS IN RELGS, R14 = RETURN ADDRESS, R15 = 05666002 * CALLER REGISTER. 05666402 * 05666502 *01* EXIT-NORMAL = RELGS 05666602 * 05669902 *01* EXTERNAL REFERENCES = DISPLOCK - DISPATCHER LOCK, CMSSRBF AND 05673402 * CMSSRBL - CMS SUSPEND QUEUE HEADER POINTING TO FIRST AND LAST 05676702 * SUSPENDED SRB, CMSASBF - CMS SUSPEND QUEUE HEADER POINTING TO 05680002 * FIRST SUSPENDED ASCB. IEA0DS, IEAPDS2 AND IEAPDS5 - DISPATCHER 05690002 * ENTRY POINTS,IEAVEMS0 - ADDRESS OF MEMORY SWITCH ENTRY POINT. 05700002 * 05710002 *02* ROUTINES = IEA0DS - GIVE CONTROL TO DISPATCHER WHEN SUSPENDING 05720002 * A TCB/RB CALLER. ALL ENTRIES TO DISPATCHER @Z40FPXJ 05725040 * ARE A LOAD AND BRANCH R15. IEAVEMS0 - CALL MEMORY SWITCH WHEN 05780002 * DEQUEUING A SUSPENDED ASCB OR @Z40FPXJ 05790040 * WHEN FREEING THE LOCAL LOCK AND THE ASCBS2S SWITCH IS ON OR 05800002 * THE NUMBER OF READY TCB FOR THAT MEMORY EXCEEDS THE NUMBER OF 05810002 * OF CPU CURRENTLY DISPATCHED TO THAT ADRESS SPACE. QUICKCELL - 05820002 * TO OBTAIN A SRB IN ORDER TO SUSPEND CURRENT SRB. CALL IS VIA 05830002 * MACRO GETCELL WHICH BRANCH AND LINK R14,R15. SCHEDULE - INLINE 05840002 * MACRO EXPANSION TO SCHEDULE ANY SUSPENDED SRB WHEN RELEASING 05850002 * THE REQUIRED LOCK. RECOVERY MANAGER - TO PURGE THE FRR STACK 05860002 * WHEN SUSPENDING A CALLER AND GIVING CONTROL TO THE DISPATCHER. 05870002 * CALL IS AN INLINE EXPANSION OF SETFRR MACRO. ACR - TO GIVE ACR 05880002 * CONTROL IS ACR ACTIVATED DURING WINDOW SPIN PROCESSING, CALL 05890002 * IS VIA MACRO CALLRTM. ABEND- TO ABEND A CALLER VIOLATING THE 05900002 * LOCKING REGULATIONS - VIA SVC 13. 05910002 *02* DATA-AREAS = NONE. 06210002 * 06220002 *02* CONTROL-BLOCKS - (1) = PSA (W)(R), (2) = LCCA (W)(R), (3) = 06230002 * ASCB (W)(R), (4) = TCB (R)(W), (5) = RB (W), (6) = SRB (W)(R), 06240002 * (7) = IEAVBK (W)(R), (8) = CSD (W)(R) , (9) = ASXB (R), (10) = 06250002 * IHSA (W) 06260002 * 06270002 *01* TABLES = NONE. 06280002 * 06290002 *01* MACROS = (1) = SCHEDULE, (2) = GETCELL, (3) = SETFRR, (4) = 06300002 * CALLRTM, (5) = WINDOW. 06310002 * 06320002 *02* SERIALIZATION = DISPATCHER LOCK TO SERIALIZE THE SUSPEND 06330002 * QUEUES. 06340002 * 06350002 *01* CHANGE-ACTIVITY = Y02751,Y02752,ZM02352 06360003 * OZ28255 - LOCK MANAGER REENTERED DURING GETMAIN 06363040 * FOR AN SSRB @ZA28255 06366040 * OZ32162 - NO CODE CHANGE. FIX COVER LETTER FOR 06367040 * SU51 BECAUSE PREREQ MACRO IHAPSA IS 06368040 * IN SU51 CORRECT. @ZA32162 06369040 * 06370002 *01* MESSAGES = NONE. 06380002 * 06390002 *01* ABEND-CODES = SYSTEM ABEND CODE 073 - (1) - INVALID OBTAIN 06400002 * REQUEST, LOCKING HIERARCHY VIOLATED OR ANOTHER LOCK OF THE SAME 06410002 * TYPE IS ALREADY HELD OR THE CMS LOCK WAS REQUESTED BUT THE LOCAL 06420002 * LOCK WAS NOT HELD OR THE LOCAL LOCK WAS UNCONDITIONALLY REQUESTED 06430002 * BY A NON-TCB/RB OR NON-SRB MODE CALLER. (2) - INVALID RELEASE 06440002 * REQUEST. LOCAL LOCK WAS SPECIFIED AND THE CMS LOCK IS STILL HELD 06450002 * OR MULTIPLE REQUEST VIA REGISTER INVOLVING SPIN LOCKS NOT HELD. 06452002 * 06460002 **** END OF SPECIFICATIONS ***/ 06470002 IEAVELK CSECT 06720002 * CSECT FOR SETLOCK MODULE 06730002 MODID BR=NO 06740002 REG0 EQU 0 REGISTER 0 06750002 REG1 EQU 1 REGISTER 1 06760002 REG2 EQU 2 REGISTER 2 06770002 REG3 EQU 3 REGISTER 3 06780002 REG4 EQU 4 REGISTER 4 06790002 REG5 EQU 5 REGISTER 5 06800002 REG6 EQU 6 REGISTER 6 06810002 REG7 EQU 7 REGISTER 7 06820002 REG8 EQU 8 REGISTER 8 06830002 REG9 EQU 9 REGISTER 9 06840002 REG10 EQU 10 REGISTER 10 06850002 R10 EQU 10 REGISTER 10 @Z40FPXJ 06855040 REG11 EQU 11 REGISTER 11 06860002 R11 EQU 11 REGISTER 11 @Z40FPXJ 06865040 REG12 EQU 12 REGISTER 12 06870002 R12 EQU 12 REGISTER 12 @Z40FPXJ 06875040 REG13 EQU 13 REGISTER 13 06880002 R13 EQU 13 REGISTER 13 @Z40FPXJ 06885040 REG14 EQU 14 REGISTER 14 06890002 REG15 EQU 15 REGISTER 15 06900002 CPIDRG0 EQU 0 CONTROL REGISTER 0 06910002 CSDPTR EQU 3 BASE FOR CSD 06920002 FOUR EQU 4 CONSTANT 4 06930002 TWO EQU 2 CONSTANT 2 06935002 ONE EQU 1 CONSTANT 1 @Z40FPXJ 06937040 CPUCNT EQU 4 COUNT OF ACTIVE CPUS 06940002 CVTBASE EQU 4 BASE FOR CFT 06950002 SRBCNT EQU 5 COUNT OF AVAILABLE SUSPEND SRBS 06960002 SPINRTNR EQU 6 BASE FOR SINDOW SPIN ROUTINE 06970002 MNLRETRN EQU 7 RETURN REGISTER FOR SPIN RTN 06980002 LCCAPTR EQU 8 BASE FOR LCCA 06990002 EIGHT EQU 8 CONSTANT 8 07000002 CPUADDR9 EQU 9 LOGICAL CPU ADDRESS 07010002 ASCBADR9 EQU 9 BASE FOR ASCBS 07020002 TCBPTR EQU 9 BASE FOR TCB 07030002 REGMASK EQU 9 MASK TO UPDATE CLHS 07040002 ZERORG10 EQU 10 CONTAINS FW OF ZEROS FOR CS 07050002 RBPTR EQU 10 BASE FOR RB 07060002 LKADDR11 EQU 11 ADDRESS OF LOCKWORD 07070002 LLTSTREG EQU 11 WKREG TO VALIDATE LL UNCOND OBT 07080002 DISPLOCK EQU 11 ADDRESS OF DISPATCHER LOCK 07090002 SALCLOCK EQU 11 ADDRESS OF SALLOC LOCK 07092002 ALECMS11 EQU 11 ADDRESS OF CMS' CLHT ENTRY 07100002 TWELVE EQU 12 CONSTANT 12 07110002 ALECLHT EQU 12 ADDRESS OF A LOCK'S CLHT ENTRY 07120002 BASER13 EQU 13 BASE FOR SETLOCK ROUTINES 07130002 RCREG13 EQU 13 REGISTER USED TO PASS LOCK'S RC 07140002 RETURN EQU 14 ADDRESS OF CALLERS RETURN ADDR 07150002 CVTADR EQU 16 LOCATION CONTAINS CVT ADDRESS 07160002 K16 EQU 16 LENGTH OF 4 GPRS 07170002 K28 EQU 28 OFFSET FOR 7 FULL WORDS 07180002 K44 EQU 44 LENGTH OF 11 GPRS 07190002 K64 EQU 64 LENGTH OF 16 REGISTERS 07200002 ZERO EQU 0 CONSTANT 0 07210002 CX10 EQU X'10' MASK FOR DISP LOCK 07212002 CXEF EQU X'EF' MASK FOR DISP CLEAR 07214002 CX04 EQU X'04' DISABLE INDICATOR 07216002 CXFE EQU X'FE' CLEAR LOCAL BIT 07218002 DISABLE EQU X'FC' MASK TO DISABLE CALLER 07220002 ENABLE EQU X'03' MASK TO ENABLE CALLER 07230002 SRBNOLH EQU X'7F' MASK TO TURN OFF NO LOCAL LOCK 07240002 LOCKNACT EQU X'F7' MASK TO TURN OFF SETLOCK ACTIVE 07250002 LOCKNSPN EQU X'DF' MASK TO TURN OFF SETLOCK SPIN 07260002 LOCKRDSP EQU X'7F' MASK TO TURN OFF DISP LK HELD 07270002 ALLONES EQU X'FF' ONE BYTE OF ONES 07280002 SPACE 2 07290002 */*IEAVELK: CHART SETLOCK */ 07300002 */* HEADER 07310002 */* IBM CONFIDENTIAL 07320002 */* 07330002 */* 07340002 */* SECTION 3.1.7.14.10 07350002 */* SETLOCK 07360002 */* PAGE # */ 07370002 SPACE 2 07380002 USING FLC,0 07390002 USING SRBSECT,REG1 07400002 USING CSD,CSDPTR 07410002 USING CVT,CVTBASE 07420002 USING TCB,TCBPTR 07430002 USING RBSECT,RBPTR 07440002 USING ASCB,REG11 07450002 USING LCCA,LCCAPTR 07460002 TITLE 'IEAVELK -SETLOCK''S UNCONDITIONAL OBTAIN GLOBAL SPIN LO*07470002 CK ROUTINE (MULTIPLE LOCKS AT SAME LEVEL) ' 07480002 ENTRY GSLMUOBT 07490002 SPACE 2 07500002 */*GSLMUOBT: E GSLMUOBT */ 07510002 SPACE 2 07520002 GSLMUOBT DS 0H 07530002 USING *,BASER13 07540002 SPACE 2 07550002 */* P DISABLE CPU FOR I/O & EXT SAVE PSW SYS MASK IN MODEL PSW */ 07560002 SPACE 2 07570002 STNSM PSAMPSW,DISABLE DISABLE CPU FOR EXT & I/O INT 07580002 SPACE 2 07630002 */*GSLMUOBD: P SAVE REG PSALKSA */ 07640002 SPACE 2 07650002 * THIS IS THE ENTRY USED FOR DISABLED CALLERS 07653002 GSLMUOBD DS 0H 07656002 ST REG12,PSALKR12 SAVE CALLERS REG12 07660002 SPACE 2 07670002 */* P OBTAIN BIT MASK FOR HIERARHY CHECK */ 07680002 SPACE 2 07690002 L REG12,MASKTAB(ALECLHT) ONE AT LOCK LEVEL IN HRCHY 07700002 SPACE 2 07710002 */* D (GE,GSLMUOH1,LT,) COMPARE BIT MASK WITH STRING */ 07720002 SPACE 2 07730002 CL REG12,PSACLHS LOCK HIERARCHY CHECK 07740002 BNH GSLMUOH1 HIGHER OR SAME LK ALREADY HELD 07750002 SPACE 2 07752002 */* P TURN ON SETLOCK ACTIVE INDICATOR IN PSA */ 07754002 SPACE 2 07756002 OI PSASUP1,PSALOCK SETLOCK ACTIVE INDICATOR 07758002 SPACE 2 07760002 */*GSLMUSPN: P GET GET LOCK TABLE OFFSET VALUE */ 07770002 SPACE 2 07780002 GSLMUSPN DS 0H 07785002 L REG13,PSALKR12 GET OFFSET VALUE SAVED 07790002 * NOTE-ADDRESSABILITY HAS JUST BEEN LOST 07790702 SPACE 2 07791402 */* P UPDATE LOCK TABLE AT CORRECT OFFSET */ 07792102 SPACE 2 07792802 ST LKADDR11,PSACLHT(REG13) STORE INTO LOCK TABLE 07793502 SPACE 2 07793602 */* P ZERO REG FOR CS */ 07793702 SPACE 2 07793802 SLR REG13,REG13 ZERO REG FOR CS 07794202 SPACE 2 07794302 */* P SET HIERARCHY BIT FOR LOCK REQUESTED */ 07794402 SPACE 2 07794502 O REG12,PSAHLHI UPDATE HIERARCHY MASK 07794902 ST REG12,PSAHLHI STORE UPDATED VALUE 07795602 SPACE 2 07795702 */* P GET CPUID FOR CS */ 07795802 SPACE 2 07795902 LH REG12,PSACPULA GET CPUID VALUE 07796302 SPACE 2 07796402 */* P CLEAR SETLOCK BIT */ 07796502 */* D (YES,RETURN,NO,) IS LOCK AVAILABLE VIA CS? */ 07796602 SPACE 2 07797002 CS REG13,REG12,ZERO(LKADDR11) GET LOCK 07815402 NI PSASUP1,LOCKNACT CLEAR LOCK SUPER BIT 07824402 LTR REG13,REG13 WAS CS OK 07833402 BZR RETURN IF SO RETURN TO CALLER 07842402 SPACE 2 07851402 */* P REESTABLISH ORIGINAL ADDRESSABILITY */ 07860402 SPACE 2 07869402 BALR BASER13,ZERO GET ADDRESS BACK 07878402 USING *,BASER13 RESET ADDRESSABILITY 07887402 L BASER13,GSLMUOBS GET OLD ADDRESS 07896402 USING GSLMUOBT,BASER13 RESET BACK TO OLD 07905402 SPACE 2 07914402 */* P SET SETLOCK BIT */ 07923402 SPACE 2 07932402 OI PSASUP1,PSALOCK SET SUPER BIT 07941402 SPACE 2 07950402 */* P SAVE DESTROYED REGS IN PSA */ 07959402 SPACE 2 07968402 STM REG5,REG10,PSALKR5 SAVE DESTROYED REGS 07977402 SPACE 2 07986402 */* P CLEAR HIERARCHY BIT ALREADY SET */ 07995402 SPACE 2 08004402 L REG12,PSALKR12 GET LOCK OFFSET SAVED 08013402 SLR REG9,REG9 CLEAR REG FOR STORE 08022402 ST REG9,PSACLHT(REG12) RESET LOCK TABLE ENTRY TO 0 08031402 L REG12,MASKTAB(REG12) SET REG12 TO HIERARCHY MASK 08040402 LR REG9,REG12 HIERARCHY MASK FOR UPDATE 08049402 X REG9,PSAHLHI UPDATE HIERARCHY MASK BACK 08058402 ST REG9,PSAHLHI STORE UPDATED STRING 08067402 SPACE 2 08076402 */* P SET UP WINDOW SPIN INTERFACE */ 08085402 SPACE 2 08094402 L REG8,PSALCCAV GET LCCA ADDRESS 08103402 LA SPINRTNR,WINDSPIN GET SPIN ROUTINE ADDRESS 08112402 SPACE 2 08121402 */* S WINDSPIN:GO TO OPEN WINDOW FOR EMS/MFA */ 08130402 SPACE 2 08139402 BALR MNLRETRN,SPINRTNR GO TO WINDOW SPIN 08148402 SPACE 2 08157402 */* P (,GSLMUSPN) RELOAD SAVED REGS */ 08166402 SPACE 2 08175402 LM REG5,REG10,PSALKR5 RELOAD SAVED REGS 08184402 B GSLMUSPN TRY TO GET LOCK AGAIN 08193402 SPACE 2 08280002 */*GSLMUOH1: D (NO,STLKAB73,YES,) WAS LOCK HELD? */ 08290002 SPACE 2 08300002 GSLMUOH1 DC 0H'0' 08310002 N REG12,PSAHLHI WAS LOCK HELD 08360002 BZ STLKAB73 IF NOT ABEND CALLER 08364002 L REG12,PSALKR12 GET OFFSET VALUE 08368002 C REG11,PSACLHT(REG12) SAME CLASS LOCK REQUESTED? 08372002 BNE STLKAB73 IF SO ABEND 08376002 SPACE 2 08376802 */* P SET RC=4 */ 08377602 */*RETURN: R RETURN TO CALLER */ 08378402 SPACE 2 08379202 LA REG13,FOUR SET RETURN CODE 08380002 BR RETURN RETURN TO CALLER 08384002 TITLE 'IEAVELK -SETLOCK''S UNCONDITIONAL OBTAIN GLOBAL SPIN LO*08390002 CK ROUTINE (SINGLE LOCK AT GIVEN LEVEL) ' 08400002 ENTRY GSLSUOBT 08410002 SPACE 2 08420002 */*GSLSUOBT: E GSLSUOBT */ 08430002 SPACE 2 08440002 GSLSUOBT DS 0H 08450002 USING *,BASER13 08460002 SPACE 2 08470002 */* P DISABLE CPU FOR I/O & EXT SAVE PSW SYS MASK IN MODEL PSW */ 08480002 SPACE 2 08490002 STNSM PSAMPSW,DISABLE DISABLE CPU FOR EXT & I/O INT 08500002 SPACE 2 08550002 */*GSLSUOBD: P SAVE REG PSALKSA */ 08560002 SPACE 2 08570002 * THIS IS THE ENTRY USED FOR DISABLED CALLERS 08573002 GSLSUOBD DS 0H 08576002 ST REG12,PSALKR12 SAVE CALLERS REG12 08580002 SPACE 2 08590002 */* D (GE,GSLSUOH1,LT,) COMPARE BIT MASK WITH STRING */ 08600002 SPACE 2 08610002 CL ALECLHT,PSACLHS LOCK HIERARCHY CHECK 08620002 BNH GSLSUOH1 HIGHER OR SAME LK ALREADY HELD 08630002 SPACE 2 08630102 */*GSLSUSPN: P ZERO REG FOR CS */ 08630202 SPACE 2 08630302 GSLSUSPN DS 0H 08630702 SLR REG13,REG13 CLEAR REG FOR CS 08631402 * NOTE-ADDRESSABILITY HAS JUST BEEN DESTROYED 08632102 SPACE 2 08632202 */* P SET HIERARCHY BIT ON IN MASK */ 08632302 SPACE 2 08632402 O REG12,PSAHLHI UPDATE HIERARCHY MASK 08632802 ST REG12,PSAHLHI STORE NEW VALUE IN MASK 08633502 SPACE 2 08633602 */* P GET CPUID FOR CS */ 08633702 SPACE 2 08633802 LH REG12,PSACPULA GET CPUID FOR CS 08634202 SPACE 2 08634302 */* D (YES,RETURN1,NO,) IS LOCK AVAILABLE? */ 08634402 SPACE 2 08634502 CS REG13,REG12,ZERO(LKADDR11) GET LOCK 08634902 BZR RETURN IF GOTTEN RETURN TO CALLER 08635602 SPACE 2 08635702 */* P REESTABLISH ORIGINAL ADDRESSABILITY */ 08635802 SPACE 2 08635902 BALR BASER13,ZERO REESTABLISH 08636302 USING *,BASER13 ADDRESSABILITY 08637002 L BASER13,GSLSUOBS GET OLD ADDRESS 08637702 USING GSLSUOBT,BASER13 REESTABLISH OLD ADDR. 08638402 SPACE 2 08638802 */* P SET SETLOCK BIT */ 08639202 SPACE 2 08639602 OI PSASUP1,PSALOCK SET SUPER BIT 08640002 SPACE 2 08640202 */* P SAVE REGS DESTROYED */ 08640402 SPACE 2 08640602 STM REG5,REG10,PSALKR5 SAVE DESTROYED REGS 08641002 SPACE 2 08641202 */* P RESET HIERARCHY MASK BIT TO ZERO */ 08641402 SPACE 2 08641602 L REG12,PSALKR12 GET HIERARCHY BIT MASK 08642002 LR REG9,REG12 GET BIT MASK FOR UPDATE 08643002 X REG9,PSAHLHI UPDATE MASK BY CLEARING BIT 08644002 ST REG9,PSAHLHI STORE NEW MASK VALUE 08645002 SPACE 2 08645302 */* P SET UP WINDOW SPIN INTERFACE */ 08645602 L REG8,PSALCCAV GET LCCA ADDRESS 08646002 LA SPINRTNR,WINDSPIN GET WINDOW SPIN ADDRESS 08647002 SPACE 2 08647702 */* S WINDSPIN:GO TO OPEN WINDOW FOR EMS/MFA */ 08648402 SPACE 2 08649102 BALR MNLRETRN,SPINRTNR GO TO WINDOW SPIN 08650002 SPACE 2 08650402 */* P RELOAD SAVED REGS */ 08650802 */* P (,GSLSUSPN) CLEAR SETLOCK BIT */ 08651202 SPACE 2 08651602 LM REG5,REG10,PSALKR5 RELOAD SAVED REGS 08652002 NI PSASUP1,LOCKNACT CLEAR SUPER BIT 08654002 B GSLSUSPN TRY TO GET LOCK AGAIN 08656002 SPACE 2 08746002 */*GSLSUOH1: D (NO,STLKAB73,YES,) WAS LOCK HELD? */ 08836002 SPACE 2 08926002 GSLSUOH1 DC 0H'0' 09040002 N ALECLHT,PSACLHS ZERO REG IF LOCK ALREADY HELD 09090002 BZ STLKAB73 HIERARCHY VIOLATION 09120002 SPACE 2 09120602 */* P SET RC=4 FOR LOCK HELD */ 09121202 */*RETURN1: R RETURN TO CALLER */ 09121802 SPACE 2 09122402 LA REG13,FOUR SET RETURN CODE 09123002 BR RETURN RETURN TO CALLER 09126002 SPACE 2 09127002 */*GSLSDISP: E DISP ENTRY FOR DISP LOCK */ 09128002 SPACE 2 09129002 * THE FOLLOWING ENTRY IS SOLELY FOR THE USE OF THE DISPATCHER 09130002 ENTRY GSLSDISP 09140002 GSLSDISP DS 0H 09150002 USING *,BASER13 09155002 SPACE 2 09156002 */* P GET DISP LOCK ADDRESS */ 09157002 SPACE 2 09158002 L LKADDR11,ADISPLCK GET DISPATCHER LOCK ADDRESS 09160002 SPACE 2 09160702 */*GSLSDSPN: P SET DISP LOCK HELD BIT IN MASK */ 09161402 SPACE 2 09162102 GSLSDSPN DS 0H 09163002 OI PSAHLHI+TWO,CX10 SET DISP LOCK BIT IN MASK 09166002 SPACE 2 09166802 */* P CLEAR REG FOR CS */ 09167602 */* P GET CPUID FOR CS */ 09168402 SPACE 2 09169202 SLR REG13,REG13 CLEAR REG FOR CS 09170002 * NOTE-ADDRESSABILITY HAS JUST BEEN DESTROYED 09180002 LH REG12,PSACPULA GET CPUID FOR CS 09186002 SPACE 2 09188002 */* D (YES,RETURN1,NO,) WAS DISP LOCK GOTTEN? */ 09190002 CS REG13,REG12,ZERO(LKADDR11) GET LOCK 09192002 BZR RETURN IF GOTTEN RETURN TO CALLER 09198002 SPACE 2 09199002 */* P REESTABLISH ORIGINAL BASE */ 09200002 SPACE 2 09201002 BALR BASER13,ZERO REESTABLISH 09204002 USING *,BASER13 ADDRESSABILITY 09210002 L BASER13,GSLSDISB GET OLD ADDRESS 09216002 USING GSLSDISP,BASER13 REESTABLISH OLD ADDR. 09222002 SPACE 2 09224002 */* P CLEAR DISP BIT IN MASK */ 09226002 SPACE 2 09228002 NI PSAHLHI+TWO,CXEF CLEAR DISP BIT IN MASK 09230002 SPACE 2 09230202 */* P SET SUPER BIT */ 09230402 SPACE 2 09230602 OI PSASUP1,PSALOCK SET SUPER BIT 09231002 SPACE 2 09231202 */* P SAVE REGS DESTROYED */ 09231402 SPACE 2 09231602 STM REG5,REG10,PSALKR5 SAVE DESTROYED REGS 09232002 SPACE 2 09232202 */* P SET UP WINDOW SPIN INTERFACE */ 09232402 SPACE 2 09232602 L REG12,MASKDISP GET HIERARCHY BIT MASK 09233002 L REG8,PSALCCAV GET LCCA ADDRESS 09234002 LA SPINRTNR,WINDSPIN GET WINDOW SPIN ADDRESS 09235002 SPACE 2 09236002 */* S WINDSPIN:GO OPEN EMS/MFA WINDOW */ 09237002 SPACE 2 09238002 BALR MNLRETRN,SPINRTNR GO TO WINDOW SPIN 09240002 SPACE 2 09240502 */* P RESTORE SAVED REGS */ 09241002 SPACE 2 09241502 LM REG5,REG10,PSALKR5 RELOAD SAVED REGS 09242002 SPACE 2 09242502 */* P (,GSLSDSPN) CLEAR SETLOCK BIT */ 09243002 SPACE 2 09243502 NI PSASUP1,LOCKNACT CLEAR SUPER BIT 09244002 B GSLSDSPN TRY TO GET LOCK AGAIN 09246002 TITLE 'IEAVELK -SETLOCK''S CONDITIONAL OBTAIN GLOBAL SPIN LOCK*09250002 ROUTINE (MULTIPLE LOCKS AT SAME LEVEL) ' 09253002 ENTRY GSLMCOBT 09256002 SPACE 1 09260002 SPACE 2 09270002 */*GSLMCOBT: E GSLMCOBT */ 09280002 SPACE 2 09290002 GSLMCOBT DS 0H 09300002 USING *,BASER13 09310002 SPACE 2 09320002 */* P DISABLE CPU FOR I/O & EXT SAVE PSW SYS MASK IN MODEL PSW */ 09330002 SPACE 2 09340002 STNSM PSAMPSW,DISABLE DISABLE CPU FOR EXT & I/O INT 09350002 SPACE 2 09360002 */* P TURN ON SETLOCK ACTIVE INDICATOR IN PSA */ 09370002 SPACE 2 09380002 OI PSASUP1,PSALOCK SETLOCK ACTIVE INDICATOR 09390002 SPACE 2 09400002 */* P SAVE REGS. PSALICSA */ 09410002 SPACE 2 09420002 STM REG9,REG10,PSALKR9 SAVE CALLERS REGS 9 AND 10 09430002 SPACE 2 09440002 */* P GET CLHT ENTRY FOR CONFLICT CHECK */ 09450002 SPACE 2 09460002 L ZERORG10,PSACLHT(ALECLHT) ZERO CS REG IF NO VIOLATION 09470002 SPACE 2 09480002 */* D (YES,GSLMCOH1,NO,) LOCK THIS LEVEL ALREADY HELD? */ 09490002 SPACE 2 09500002 LTR ZERORG10,ZERORG10 CHECK CLHT ENTRY FOR ZERO 09510002 BNZ GSLMCOH1 LOCK HELD OR VIOLATE 09520002 SPACE 2 09530002 */* P GET LOGICAL CPU ID FROM PSA */ 09540002 */* P FORM 'CS' LOCK ARG. */ 09550002 SPACE 2 09560002 LH CPUADDR9,PSACPULA LOGICAL CPU ADDRESS 09570002 SPACE 2 09580002 */* P OBTAIN LOCK */ 09590002 */* D (YES,GSLMCOS,NO,GSLCOU) SUCESS? */ 09600002 SPACE 2 09610002 CS ZERORG10,CPUADDR9,ZERO(LKADDR11) WAS LOCK AVAILABLE? 09620002 BNZ GSLCOU LOCK NOT OBTAINED 09630002 SPACE 2 09640002 */*GSLMCOS: P PLACE LOCK'S ADDR INTO LOCK'S ENTRY IN CLHT */ 09650002 SPACE 2 09660002 GSLMCOS DC 0H'0' LOCK SUCCESSFULLY OBTAINED 09670002 ST LKADDR11,PSACLHT(ALECLHT) STORE LOCK ADDR IN CLHT ENTRY 09680002 SPACE 2 09690002 */* P UPDATE CPU LOCKS HELD STRING */ 09700002 SPACE 2 09710002 L REGMASK,MASKTAB(ALECLHT) MASK TO UPDT STRING 09720002 O REGMASK,PSACLHS UPDT LOCK HELD STRING 09730002 ST REGMASK,PSACLHS STORE NEW STRING 09740002 SPACE 2 09750002 */*GSLMCOR: P SET RETURN CODE IN PROPER REG */ 09760002 SPACE 2 09770002 GSLMCOR DC 0H'0' 09772002 LR RCREG13,REG10 GET RETURN CODE FROM REG10 09780002 SPACE 2 09790002 */* P RESTORE REGS. 9-10 */ 09800002 SPACE 2 09810002 LM REG9,REG10,PSALKR9 RESTORE CALLERS REGS 9 AND 10 09820002 SPACE 2 09830002 */* P TURN OFF ACTIVE INDICATOR */ 09840002 NI PSASUP1,LOCKNACT TURN OFF SETLOCK ACTIVE BIT 09850002 SPACE 2 09860002 */* P BR 14 RETURN WITH LOCK HELD & DISABLED */ 09870002 */* R RETURN */ 09880002 SPACE 2 09890002 BR RETURN RETURN DISABLED TO CALLER 09900002 SPACE 2 09910002 */*GSLMCOH1: P SET RC=4 LOCK ALREADY HELD */ 09920002 SPACE 2 09930002 GSLMCOH1 DC 0H'0' 09940002 SPACE 2 09960002 */* D (YES,STLKAB73,NO,GSLMCOR) DIFF LOCK OF SAME TYPE? */ 09970002 SPACE 2 09980002 CR LKADDR11,ZERORG10 DIFF LOCK OF SAME TYPE 09990002 LA REG10,FOUR LOCK ALREADY HELD 09992002 BE GSLMCOR NO LOCK IS SAME AS ONE OWNED 10000002 B STLKAB73 VIOLATION: ABEND CALLER 10010002 TITLE 'IEAVELK -SETLOCK''S CONDITIONAL OBTAIN GLOBAL SPIN LOCK*10020002 ROUTINE (SINGLE LOCK AT THIS LEVEL) ' 10030002 ENTRY GSLSCOBT 10040002 SPACE 1 10050002 SPACE 2 10060002 */*GSLSCOBT: E GSLSCOBT */ 10070002 SPACE 2 10080002 GSLSCOBT DS 0H 10090002 USING *,BASER13 10100002 SPACE 2 10110002 */* P DISABLE CPU FOR I/O & EXT SAVE PSW SYS MASK IN MODEL PSW */ 10120002 SPACE 2 10130002 STNSM PSAMPSW,DISABLE DISABLE CPU FOR EXT & I/O INT 10140002 SPACE 2 10150002 */* P TURN ON SETLOCK ACTIVE INDICATOR IN PSA */ 10160002 SPACE 2 10170002 OI PSASUP1,PSALOCK SETLOCK ACTIVE INDICATOR 10180002 SPACE 2 10190002 */* P SAVE REGS. PSALICSA */ 10200002 SPACE 2 10210002 STM REG9,REG10,PSALKR9 SAVE CALLERS REGS 9 AND 10 10220002 SPACE 2 10230002 */* P SAVE MASK FOR LOCK ALREADY HELD CHECK */ 10240002 SPACE 2 10250002 LR ZERORG10,ALECLHT SAVE BIT MASK FOR STRING UPDATE 10260002 SPACE 2 10270002 */* D (YES,GSLSCOH1,NO,) LOCK ALREADY HELD? */ 10280002 SPACE 2 10290002 N ZERORG10,PSACLHS THIS ZERO REG IF LOCK NOT HELD 10300002 BNZ GSLSCOH1 LOCK ALREADY HELD 10310002 SPACE 2 10320002 */* P GET LOGICAL CPU ID FROM PSA */ 10330002 */* P FORM 'CS' LOCK ARG. */ 10340002 SPACE 2 10350002 LH CPUADDR9,PSACPULA LOGICAL CPU ADDRESS 10360002 SPACE 2 10370002 */* P OBTAIN LOCK */ 10380002 */* D (YES,GSLSCOS,NO,GSLCOU) SUCESS? */ 10390002 SPACE 2 10400002 CS ZERORG10,CPUADDR9,ZERO(LKADDR11) WAS LOCK AVAILABLE? 10410002 BNZ GSLCOU LOCK NOT OBTAINED 10420002 SPACE 2 10430002 */*GSLSCOS: P UPDATE CPU LOCKS HELD STRING */ 10440002 SPACE 2 10450002 GSLSCOS DC 0H'0' LOCK SUCCESSFULLY OBTAINED 10460002 O ALECLHT,PSACLHS UPDT LOCK HELD STRING 10470002 ST ALECLHT,PSACLHS STORE NEW STRING 10480002 SPACE 2 10490002 */*GSLSCOR: P SET RETURN CODE IN PROPER REG */ 10500002 SPACE 2 10510002 GSLSCOR DC 0H'0' 10512002 LR RCREG13,REG10 GET RETURN CODE FROM REG10 10520002 SPACE 2 10530002 */* P RESTORE REGS. 9-10 */ 10540002 SPACE 2 10550002 LM REG9,REG10,PSALKR9 RESTORE CALLERS REGS 9 AND 10 10560002 SPACE 2 10570002 */* P TURN OFF ACTIVE INDICATOR */ 10580002 NI PSASUP1,LOCKNACT TURN OFF SETLOCK ACTIVE BIT 10590002 SPACE 2 10600002 */* P BR 14 RETURN WITH LOCK HELD & DISABLED */ 10610002 */* R RETURN */ 10620002 SPACE 2 10630002 BR RETURN RETURN DISABLED TO CALLER 10640002 SPACE 2 10650002 */*GSLCOU: P SET RC=8 LOCK NOT AVAILABLE RESTORE REGS */ 10660002 SPACE 2 10670002 GSLCOU DC 0H'0' 10680002 LM REG9,REG10,PSALKR9 RESTORE CALLERS REGS 9 AND 10 10690002 LA RCREG13,EIGHT LOCK WAS HELD BY ANOTHER CPU 10700002 SPACE 2 10710002 */*GSLORET: P PLACE CALLER'S RETURN ADDR INTO MODEL PSW IN PSA */ 10720002 SPACE 2 10730002 GSLORET DC 0H'0' 10740002 LA RETURN,ZERO(RETURN) STORE CALLERS RETURN ADDRESS 10750002 ST RETURN,PSAMPSW+FOUR IN MODEL PSW 10760002 SPACE 2 10770002 */* P TURN OFF ACTIVE INDICATOR IN PSASUP1 */ 10780002 SPACE 2 10790002 NI PSASUP1,LOCKNACT TURN OFF SETLOCK ACTIVE BIT 10800002 SPACE 2 10810002 */* P LPSW NOTE: STATE SAME AS WHEN ENTERED */ 10820002 */* R RETURN */ 10830002 SPACE 2 10840002 LPSW PSAMPSW RETURN TO CALLER IN SAME STATE 10850002 SPACE 2 10860002 */*GSLSCOH1: P (,GSLSCOR) SET RC=4 LOCK ALREADY HELD */ 10870002 SPACE 10880002 GSLSCOH1 DC 0H'0' 10890002 LA REG10,FOUR LOCK ALREADY HELD 10900002 B GSLSCOR GOTO COMMON RETURN CODE 10902002 TITLE 'IEAVELK - SETLOCK RELEASE GLOBAL SPIN LOCK ROUTINE (MUL*11050002 TIPLE LOCKS AT SAME LEVEL) ' 11060002 ENTRY GSLMREL 11070002 SPACE 2 11080002 */*GSLMREL: E GSLMREL */ 11090002 SPACE 2 11100002 GSLMREL DS 0H 11110002 USING *,BASER13 11120002 SPACE 2 11130002 */* D (NO,GSLMRNH,YES,) IS LOCK HELD? */ 11132002 SPACE 2 11140002 C LKADDR11,PSACLHT(ALECLHT) IS LOCK HELD? 11150002 BNE GSLMRNH NO: GO SET RETURN CODE 11160002 SPACE 2 11170002 */* P TURN ON ACTIVE INDICATOR IN PSW */ 11180002 SPACE 2 11190002 OI PSASUP1,PSALOCK TURN ON SETLOCK ACTIVE BIT 11200002 SPACE 2 11202002 */* P UPDATE CPU LOCKS HELD STRING */ 11204002 SPACE 2 11206002 L REG13,MASKTAB2(ALECLHT) GET MASK FOR UPDT 11208002 N REG13,PSACLHS UPDATE STRING 11208402 ST REG13,PSACLHS STORE NEW STRING 11208802 SPACE 2 11210002 */* P CLEAR LOCK AND LOCK'S ENTRY IN CLHT */ 11212002 SPACE 2 11214002 SR REG13,REG13 ZERO IN REG13 11216002 ST REG13,0(LKADDR11) RESET LOCKWORD TO ZERO 11218002 ST REG13,PSACLHT(ALECLHT) CLEAR CLHT ENTRY 11218402 SPACE 2 11270002 */* P TURN OFF ACTIVE INDICATOR */ 11440002 SPACE 2 11450002 NI PSASUP1,LOCKNACT TURN OFF SETLOCK ACTIVE BIT 11460002 BALR BASER13,ZERO RESET ADDRESSABILITY 11462002 USING *,BASER13 11464002 SPACE 2 11474002 */* D (YES,GSLMRRD,NO,) SYS. DISABLED INDICATOR ON? */ 11600002 SPACE 2 11610002 L REG12,SUPMASK MASK TO CHECK SUP CONTROL BYTES 11630002 N REG12,PSASUPER ZERO REG IF ONLY SETLOCK BIT ON 11640002 BNZ GSLMRRD SUPERVISOR RETURN DISABLED 11650002 SPACE 2 11660002 */* D (YES,GSLMRRD,NO,) OTHER SPIN LOCKS HELD? */ 11660402 SPACE 2 11660802 LA REG12,FRSTSPIN ONE IN 1ST SPIN LOCK POSITION 11661202 CL REG12,PSACLHS COMPARE WITH NEW STRING VALUE 11661602 BNH GSLMRRD TO RETURN DISABLED 11661702 SPACE 2 11664402 */* P ENABLE FOR IO & EXT */ 11664802 SPACE 2 11666402 STOSM PSAMPSW,ENABLE ENABLE FOR IO & EXT 11666802 SPACE 2 11667302 */* GSLMRRD: P SET RC=0 */ 11670002 SPACE 2 11690002 GSLMRRD DC 0H'0' 11700002 SR RCREG13,RCREG13 RC 0 - RELEASE SUCCESSFUL 11720002 SPACE 2 11730002 */* P RETURN TO CALLER DISABLED */ 11780002 */* R RETURN */ 11790002 SPACE 2 11800002 BR RETURN RETURN DISABLE 11810002 TITLE 'IEAVELK - SETLOCK RELEASE GLOBAL SPIN LOCK ROUTINE (SIN*11820002 GLE LOCK AT THIS LEVEL) ' 11830002 ENTRY GSLSREL 11840002 SPACE 2 11850002 */*GSLSREL: E GSLSREL */ 11860002 SPACE 2 11870002 GSLSREL DS 0H 11880002 USING *,BASER13 11890002 SPACE 2 11900002 */* P UPDATE CPU LOCKS HELD STRING */ 11910002 SPACE 2 11920002 N ALECLHT,PSACLHS UPDATE STRING 11930002 ST ALECLHT,PSACLHS STORE NEW STRING 11940002 SPACE 2 11942002 */* P GET CONTENT OF LOCKWORD */ 11942102 */* D (NO,GSLSRNH,YES,) IS LOCK HELD? */ 11942402 SPACE 2 11944002 L REG12,0(LKADDR11) GET CONTENT OF LOCKWORD 11946002 CH REG12,PSACPULA IS LOCK HELD? 11948002 BNE GSLSRNH NO: GO SET RETURN CODE 11948402 SPACE 2 11980002 */* P RELEASE LOCK */ 12110002 SPACE 2 12130002 SR REG12,REG12 GET FULLWORD OF ZEROES 12140002 ST REG12,0(LKADDR11) STORE IN LOCKWORD 12150002 SPACE 2 12200002 */* D (YES,GSLSRRD,NO,) SYS. DISABLED INDICATOR ON? */ 12210002 SPACE 2 12220002 L REG12,SUPMASK MASK TO CHECK SUP CTRL BYTES 12240002 N REG12,PSASUPER ZERO REG IF ONLY SETLOCK BIT ON 12250002 BNZ GSLSRRD RELEASE DISABLED 12252002 SPACE 2 12254002 */* D (YES,GSLSRRD,NO,) OTHER SPIN LOCKS HELD? */ 12264002 SPACE 2 12270002 LA REG12,FRSTSPIN ONE IN 1ST SPIN LOCK POSITION 12280002 CL REG12,PSACLHS COMPARE WITH NEW STRING VALUE 12290002 BNH GSLSRRD TO RETURN DISABLED 12300002 SPACE 2 12302002 */* P ENABLE FOR IO & EXT */ 12304002 SPACE 2 12306002 STOSM PSAMPSW,ENABLE ENABLE FOR IO & EXT 12308002 SPACE 2 12310002 */*GSLSRRD: P SET RC=0 */ 12390002 SPACE 2 12410002 GSLSRRD DC 0H'0' 12420002 SR RCREG13,RCREG13 RC 0 - RELEASE SUCCESSFUL 12440002 SPACE 2 12450002 */* P RETURN TO CALLER DISABLED */ 12500002 */* R RETURN */ 12510002 SPACE 2 12520002 BR RETURN RETURN DISABLE 12530002 TITLE 'IEAVELK - SETLOCK''S RELEASE DISABLED GLOBAL SPIN LOCK *12770002 ROUTINE(MULTIPLE LOCKS AT SAME LEVEL)' 12780002 SPACE 2 12790002 */*GSLMRELD: E GSLMRELD */ 12800002 SPACE 2 12810002 ENTRY GSLMRELD 12820002 GSLMRELD DS 0H 12830002 USING *,BASER13 12840002 SPACE 2 12850002 */* D (NO,GSLMRNH,YES,) IS LOCK HELD? */ 12860002 SPACE 2 12870002 C LKADDR11,PSACLHT(ALECLHT) IS LOCK HELD? 12880002 BNE GSLMRNH NO: GO SET RETURN CODE 12890002 SPACE 2 12900002 */* P TURN ON ACTIVE INDICATOR IN PSW */ 12910002 SPACE 2 12920002 OI PSASUP1,PSALOCK TURN ON SETLOCK ACTIVE BIT 12930002 SPACE 2 12932002 */* P UPDATE CPU LOCKS HELD STRING */ 12934002 SPACE 2 12936002 L REG13,MASKTAB2(ALECLHT) GET MASK FOR UPDT 12938002 N REG13,PSACLHS UPDATE STRING 12938402 ST REG13,PSACLHS STORE NEW STRING 12938802 SPACE 2 12940002 */* P CLEAR LOCK AND LOCK'S ENTRY IN CLHT */ 12942002 SPACE 2 12944002 SR REG13,REG13 ZERO IN REG13 12946002 ST REG13,0(LKADDR11) RESET LOCKWORD TO ZERO 12948002 ST REG13,PSACLHT(ALECLHT) CLEAR CLHT ENTRY 12948402 SPACE 2 13000002 */* P TURN OFF ACTIVE INDICATOR */ 13070002 SPACE 2 13080002 NI PSASUP1,LOCKNACT TURN OFF SETLOCK ACTIVE BIT 13090002 SPACE 2 13120002 */* P SET RC=0 */ 13250002 SPACE 2 13260002 SPACE 2 13290002 */* P RETURN TO CALLER DISABLED */ 13300002 */* R RETURN */ 13310002 SPACE 2 13320002 BR RETURN RETURN DISABLE 13330002 TITLE 'IEAVELK - SETLOCK''S RELEASE DISABLED GLOBAL SPIN LOCK *13390002 ROUTINE(SINGLE LOCK AT THIS LEVEL)' 13400002 SPACE 2 13410002 */*GSLSRELD: E GSLSRELD */ 13420002 SPACE 2 13430002 ENTRY GSLSRELD 13440002 GSLSRELD DS 0H 13450002 USING *,BASER13 13460002 SPACE 2 13470002 */* P UPDATE CPU LOCKS HELD STRING */ 13480002 SPACE 2 13490002 N ALECLHT,PSACLHS UPDATE STRING 13500002 ST ALECLHT,PSACLHS STORE NEW STRING 13510002 SPACE 2 13520002 */* P GET CONTENT OF LOCKWORD */ 13522002 */* D (NO,GSLSRNH,YES,) IS LOCK HELD? */ 13530002 SPACE 2 13540002 L REG12,0(LKADDR11) GET CONTENT OF LOCKWORD 13550002 CH REG12,PSACPULA IS LOCK HELD? 13560002 BNE GSLSRNH NO: GO SET RETURN CODE 13570002 SPACE 2 13620002 */* P RELEASE LOCK */ 13630002 SPACE 2 13640002 SR REG12,REG12 GET FULLWORD OF ZEROES 13650002 ST REG12,0(LKADDR11) STORE IN LOCKWORD 13660002 SPACE 2 13710002 */* P SET RC=0 */ 13840002 SPACE 2 13850002 SR RCREG13,RCREG13 RC 0 - RELEASE SUCCESSFUL 13870002 SPACE 2 13880002 */* P RETURN TO CALLER DISABLED */ 13890002 */* R RETURN */ 13900002 SPACE 2 13910002 BR RETURN RETURN DISABLE 13920002 SPACE 2 13930002 */*GSLMRNH: P GET CONTENT OF LOCKWORD */ 13932002 SPACE 2 13940002 GSLMRNH DC 0H'0' 13950002 L REG12,0(LKADDR11) GET LOCKWORD CONTENT 13960002 SPACE 2 13970002 */*GSLSRNH: P PRESET RETURN CODE FOR LOCK NOT HELD */ 13972002 SPACE 2 13980002 GSLSRNH DC 0H'0' 13990002 LA RCREG13,FOUR PRESET RC FOR LOCK NO HELD 14020002 SPACE 2 14030002 */* D (YES,,NO,GSLRNA) IS LOCK AVALIABLE? */ 14032002 */* P RETURN TO CALLER IN SAME STATE */ 14034002 */* R RETURN */ 14036002 SPACE 2 14040002 LTR REG12,REG12 CHECK LOCKWORD FOR ZERO 14050002 BCR EIGHT,RETURN RETURN IF ZERO 14060002 SPACE 2 14070002 */*GSLRNA: P SET RETURN CODE LOCK HELD BY ANOTHER CPU */ 14072002 */* P RETURN TO CALLER IN SAME STATE */ 14074002 */* R RETURN */ 14076002 SPACE 2 14080002 LA RCREG13,EIGHT SET RC LOCK HELD BY ANOTHER CPU 14090002 BR RETURN RETURN TO CALLER 14100002 TITLE 'IEAVELK - SETLOCK''S CONDITIONAL OBTAIN LOCAL LOCK ROUT*14330002 INE' 14340002 SPACE 2 14350002 */*LLCOBT: E LLCOBT */ 14360002 SPACE 2 14370002 ENTRY LLCOBT 14380002 LLCOBT DS 0H 14390002 USING *,BASER13 ESTABLISH ADDRESSABILITY 14400002 SPACE 2 14410002 */* P DISABLE CPU FOR I/O & EXT SAVE PSW SYS MASK IN MODEL PSW */ 14420002 SPACE 2 14430002 STNSM PSAMPSW,DISABLE DISABLE CPU FOR EXT & I/O INT 14440002 SPACE 2 14450002 */*LLSUP: P TURN ON ACTIVE INDICATOR IN PSA */ 14460002 SPACE 2 14470002 LLSUP OI PSASUP1,PSALOCK SETLOCK ACTIVE INDICATOR 14480002 SPACE 2 14490002 */* P SAVE REGS 9 & 10 */ 14500002 SPACE 2 14510002 ST REG9,PSALKR9 SAVE CALLERS REG 9 @Z40FPXJ 14520040 ST REG10,PSALKR10 SAVE CALLERS REG 10 @Z40FPXJ 14525040 */* P GET ASCB ADDR FROM PSAAOLD */ 14540002 SPACE 2 14550002 L LKADDR11,PSAAOLD OBTAIN CURRENT ASCB ADDRESS 14560002 SPACE 2 14610002 */* D (NO,LLCOLH,YES,) IS LOCAL LOCK ALREADY HELD? */ 14620002 SPACE 2 14630002 TM PSACLHS+3,LOCAL IS LOCAL LOCK ALREADY HELD? 14640002 BO LLCOLH RETURN LOCK ALREADY HELD 14650002 * NB: THE ONLY LOCAL LK POSSIBLY 14660002 * HELD IS SAME AS REQUIRED; ANY 14670002 * OTHER IS SUSPENDED BEFORE THIS 14680002 * TASK IS DISPATCHED. 14690002 SPACE 2 14700002 */* P GET LOGICAL CPU ID */ 14710002 SPACE 2 14720002 LH CPUADDR9,PSACPULA OBTAIN LOGICAL CPU ADDRESS 14730002 SPACE 2 14740002 */* P FORM 'CS' LOCK ARGUMENT */ 14750002 SPACE 2 14760002 LA ZERORG10,ZERO FULLWORD OF ZEROS 14770002 SPACE 2 14780002 */* P OBTAIN LOCAL LOCK */ 14790002 */* D (NO,LLCOU,YES,) SUCCESS? */ 14800002 SPACE 2 14810002 CS ZERORG10,CPUADDR9,ASCBLOCK IS LOCK AVAILABLE 14820002 BNZ LLCOU LOCK IS HELD BY ANOTHER CPU 14830002 SPACE 2 14840002 */* P UPDATE CPU LOCKS HELD STRING */ 14850002 SPACE 2 14860002 OI PSACLHS+3,LOCAL UPDATE STRING 14870002 SPACE 2 14920002 */*LLCORET: P SET RETURN CODE IN PROPER REG */ 14974002 SPACE 2 14976002 LLCORET DS 0H'0' 14976402 LR RCREG13,REG10 GET RETURN CODE FROM REG10 14978002 SPACE 2 14980002 */* P RESTORE REGS */ 14990002 SPACE 2 15000002 L REG9,PSALKR9 RESTORE CALLERS REG 9 @Z40FPXJ 15010040 L REG10,PSALKR10 RESTORE CLRS REG 10 @Z40FPXJ 15015040 */* P TURN OFF ACTIVE INDICATOR */ 15030002 SPACE 2 15040002 NI PSASUP1,LOCKNACT TURN OFF SETLOCK ACTIVE BIT 15050002 SPACE 2 15061602 */*LLCORET1: P PLACE RTN ADDR INTO MODEL PSW IN PSA */ 15062002 SPACE 2 15064002 LA RETURN,ZERO(RETURN) STORE CALLERS RETURN ADDRESS 15066002 ST RETURN,PSAMPSW+FOUR IN MODEL PSW 15068002 SPACE 2 15068402 */* P LPSW RETURN IN STATE CALLED */ 15070002 */* R RETURN */ 15080002 SPACE 2 15090002 LPSW PSAMPSW RETURN TO CALLER IN SAME STATE 15100002 SPACE 2 15110002 */*LLCOLH: P (,LLCORET) SET RC=4 "ALREADY OWNED" */ 15120002 SPACE 2 15130002 LLCOLH DS 0H'0' 15140002 LA REG10,FOUR R.C 4, LOCK ALREADY OWNED 15150002 B LLCORET BRANCH TO COMMON RETURN CODE 15160002 SPACE 2 15170002 */*LLCOU: P (,LLCORET) SET RC=8 */ 15180002 SPACE 2 15190002 LLCOU DC 0H'0' 15200002 LA REG10,EIGHT RC 8, LOCK HELD BY ANOTHER CPU 15210002 B LLCORET GO TO COMMON RETURN CODE 15220002 SPACE 2 15220202 */*LLCOSVCF: E SVC FLIH LOCAL OBTAIN ENTRY */ 15220402 SPACE 2 15220602 * THE FOLLOWING ENTRY IS SOLELY FOR THE USE OF THE SVCFLIH 15220802 ENTRY LLCOSVCF 15221602 LLCOSVCF DS 0H 15222402 USING *,BASER13 15223202 SPACE 2 15223402 */* P SET LOCAL LOCK BIT IN MASK */ 15223602 SPACE 2 15223802 OI PSAHLHI+3,LOCAL SET HIERARCHY BIT FOR LOCAL 15224002 SPACE 2 15224102 */* P GET ASCB ADDRESS FOR CS */ 15224202 */* P GET CPUID FOR CS */ 15224302 */* P ZERO REG FOR CS */ 15224402 SPACE 2 15224802 L REG11,PSAAOLD GET ASCB ADDRESS 15228002 LH REG12,PSACPULA GET CPUID 15228802 SLR REG13,REG13 ZERO REG FOR CS 15230002 * NOTE-ADDRESSABILITY HAS JUST BEEN DESTROYED 15232002 SPACE 2 15233002 */* D (YES,RETURN2,NO,) WAS LOCK OBTAINED? */ 15233502 SPACE 2 15234002 CS REG13,REG12,ASCBLOCK TRY TO GET LOCK 15234502 BZR RETURN IF GOTTEN RETURN 15236002 SPACE 2 15237002 */* P CLEAR LOCAL BIT IN MASK */ 15237502 */* P SET RETURN CODE=8 */ 15238002 */*RETURN2: R RETURN TO SVCFLIH */ 15238502 SPACE 2 15239002 NI PSAHLHI+3,CXFE CLEAR LOCAL LOCK BIT 15239502 LA REG13,EIGHT SET RETURN CODE 15240002 BR RETURN RETURN TO SVCFLIH 15241002 TITLE 'IEAVELK - SETLOCK''S RELEASE LOCAL LOCK ROUTINE' 15242002 */*LRELEXPR: E EXIT PROLOGUE RELEASE LOCAL ENTRY */ 15242602 SPACE 2 15243202 * THE FOLLOWING ENTRY IS SOLELY FOR THE USE OF EXIT PROLOGUE 15244002 ENTRY LRELEXPR 15245002 LRELEXPR DS 0H 15246002 USING *,REG11 15248002 SPACE 2 15250002 */* P (,LRELDISP) SET DISABLE INDICATOR */ 15251002 SPACE 2 15252002 MVI PSAMPSW,CX04 SET DISABLED INDICATOR 15253002 B LRELDISP GO TO MAINLINE CODE 15254002 DROP REG11 15255002 USING ASCB,REG11 15256002 ENTRY LLREL 15257002 SPACE 2 15258002 */*LLREL: E LLREL */ 15260002 SPACE 2 15270002 LLREL DS 0H 15280002 USING *,BASER13 ESTABLISH BASE REGISTER 15290002 SPACE 2 15300002 */* P DISABLE CPU FOR I/O & EXT SAVE PSW SYS MASK IN MODEL PSW */ 15310002 SPACE 2 15320002 STNSM PSAMPSW,DISABLE DISABLE & SAVE CALLER'S STATE 15330002 SPACE 2 15340002 */*LLSUP2: D (NO,,YES,STLKAB73) CMS LOCK HELD BY CALLER? */ 15390002 SPACE 2 15400002 LLSUP2 TM PSACLHS+3,CMS DOES THIS CPU HOLD CMS LOCK 15410002 BO STLKAB73 CMS LOCK HELD BY THIS CPU:ABEND 15420002 SPACE 2 15420502 */*LRELDISP: E THIS ENTRY IS USED BY DISP ONLY */ 15421002 SPACE 2 15421502 * THE FOLLOWING ENTRY IS USED SOLELY BY THE DISPATCHER 15422002 ENTRY LRELDISP 15424002 LRELDISP DS 0H 15426002 SPACE 2 15430002 */* P GET ASCB'S ADDR FROM PSA LOCAL LOCK IN ASCB */ 15490002 SPACE 2 15500002 L REG11,PSAAOLD GET CURRENT ASCB ADDRESS 15510002 SPACE 2 15520002 */* P GET CONTENT OF LOCKWORD */ 15532002 SPACE 2 15540002 L REG12,ASCBLOCK GET CONTENT OF LOCKWORD 15560002 SPACE 2 15570002 */* D (NO,LLRELNH,YES,) IS LOCK HELD? */ 15570102 SPACE 2 15570402 CH REG12,PSACPULA IS LOCK HELD? 15570802 BNE LLRELNH NO: GO SET RETURN CODE 15571202 */* P SAVE REGS */ 15572002 SPACE 2 15574002 STM REG6,REG10,PSALKR6 SAVE CALLERS REGISTERS @Z40FPXJ 15576040 SPACE 2 15578002 */* P TURN SETLOCK ACTIVE INDICATOR IN PSA */ 15578402 SPACE 2 15578802 OI PSASUP1,PSALOCK SETLOCK ACTIVE INDICATOR ON 15579202 SPACE 2 15579602 */*LLRELDAH: P SET ASCB ADDRESSABILITY */ 16360002 SPACE 2 16370002 LLRELDAH DC 0H'0' 16380002 LR REG9,REG11 GET ASCB ADDR @Z40FPXJ 16390040 DROP REG11 16392002 USING ASCB,REG9 16400002 SPACE 2 16420002 */* D (YES,LLRELSRB,NO,) ARE ANY SRB'S SUSPENDED? */ 16430002 SPACE 2 16440002 LR R6,REG12 GET LOCKWORD @Z40FPXJ 16447040 SLR R7,R7 ZERO FOR CS @Z40FPXJ 16452040 SLR R10,R10 ZERO FOR CS @Z40FPXJ 16457040 SLR R11,R11 ZERO FOR CS @Z40FPXJ 16462040 CDS R6,R10,ASCBLOCK IF Q IS EMPTY, ZERO LK @Z40FPXJ 16467040 BNZ LLRELSRB Q NOT EMPTY, REL SRB @Z40FPXJ 16472040 SPACE 2 @Z40FPXJ 16477040 */* P RELEASE THE LOCAL LOCK */ @Z40FPXJ 16482040 */* D (YES,LLRELMS,NO,) MUST MEMORY SWITCH BE INVOKED? */ 16522402 SPACE 2 @Z40FPXJ 16522840 NI PSACLHS+3,ALLONES-LOCAL UPDATE STRING @Z40FPXJ 16552840 TM ASCBFLG2,ASCBS2S HAS STAGE 2 BEEN INVOKED? 16670002 BO LLRELMS YES INVOKE MEMORY SWITCH 16680002 L REG10,ASCBTCBS COMPARE NUMBER OF READY TCBS 16690002 C REG10,ASCBCPUS IN THIS ADDR SPACE TO NO. CPUS 16700002 BH LLRELMS ACTIVE IN ADDR SPACE 16710002 SPACE 2 17040002 */*LLRELRET: P RESTORE REGS */ 17082402 SPACE 2 17084002 LLRELRET DS 0H'0' 17086002 LM REG6,REG10,PSALKR6 RESTORE CALLER'S REGS @Z40FPXJ 17086440 SPACE 2 17088402 */*LLRELRT1: P TURN OFF ACTIVE INDICATOR IN PSA */ @Z40FPXJ 17088540 */* P SET RETURN CODE IN PROPER REG */ @Z40FPXJ 17089240 SPACE 2 17090702 LLRELRT1 DC 0H'0' 17091102 NI PSASUP1,LOCKNACT TRN OFF STLCK ACT BIT @Z40FPXJ 17091340 LR RCREG13,REG11 GET RTRN CD FRM REG11 @Z40FPXJ 17091440 SPACE 2 17091702 */* D (YES,,NO,LLRELRT2) WAS CALLER SUPER? */ 17091802 */* P RETURN VIA BRANCH INSTRUCTION */ 17091902 */* R RETURN */ 17092002 SPACE 2 17092102 L REG11,PSASUPER GET SUPER BITS 17092502 LTR REG11,REG11 ARE ANY ON 17092902 BNZR RETURN IF SO RETURN DISABLED 17094902 TM PSAMPSW,ENABLE WAS CALLER DISABLED? 17101602 BCR EIGHT,RETURN YES: RETURN VIA BRANCH 17102002 SPACE 2 17102402 */*LLRELRT2: P PLACE RETURN ADDR INTO MODEL PSW IN PSA */ 17102802 SPACE 2 17103202 LA RETURN,ZERO(RETURN) STORE CALLER'S RETURN ADDR 17103602 ST RETURN,PSAMPSW+FOUR IN MODEL PSW 17104002 SPACE 2 17104402 */* P LPSW RETURN IN SAME STATE AS CALLED */ 17104802 */* R RETURN */ 17105202 SPACE 2 17105602 LPSW PSAMPSW RETURN TO CALLER IN SAME STATE 17106002 * AS CALLED. 17106402 SPACE 2 17106802 */*LLRELNH: P (,LLRELRT1) SET PROPER RETURN CODE: -4= LOCK FREE; -8= 17107202 */*LOCK HELD BY OTHER CPU */ 17107602 SPACE 2 17108002 LLRELNH DC 0H'0' 17108402 LTR REG12,REG12 WAS LOCK AVALIABLE? 17108840 BNZ LLRELOCH NO: HELD BY OTHER CPU 17109140 LA REG11,FOUR SET LK FREE RTN CODE @Z40FPXJ 17109440 B LLRELRT1 GO TO COMMON RETURN CODE 17109740 LLRELOCH DC 0H'0' 17110402 LA REG11,EIGHT SET LK HLD BY CPU R.C. @Z40FPXJ 17110840 B LLRELRT1 GO TO COMMON RETURN CODE 17111202 SPACE 2 17111602 */*LLRELSRB: P SAVE REGS USED BY SCHEDULE */ 17119202 SPACE 2 17119602 LLRELSRB DC 0H'0' 17120002 ST REG0,PSALKR0 SAVE CALLERS REGISTER 0 @Z40FPXJ 17120440 ST REG1,PSALKR1 SAVE CALLERS REGISTER 1 @Z40FPXJ 17120540 ST REG14,PSALKR14 SAVE CALLERS REGISTER 14 @Z40FPXJ 17120640 ST REG15,PSALKR15 SAVE CALLERS REGISTER 15 @Z40FPXJ 17120740 USING SRBSECT,REG7 RG7 NOW THE SRB BASE @Z40FPXJ 17121240 SPACE 2 17121602 */*LLRELSCH:S DEQUEUE TOP SRB AND SCHEDULE IT */ @Z40FPXJ 17122040 SPACE 2 @Z40FPXJ 17122240 DROP REG9 @Z40FPXJ 17122440 LR REG11,REG9 GET ASCB ADDRESS @Z40FPXJ 17122640 USING ASCB,REG11 @Z40FPXJ 17122840 LA REG6,ASCBLOCK GET ADDR OF LOCK WORD @Z40FPXJ 17123040 LLRSRBLK DS 0H @Z40FPXJ 17123240 L REG8,SRBFLNK GET SRB LINK FIELD @Z40FPXJ 17123440 LTR REG8,REG8 IS LINK ZERO? @Z40FPXJ 17123640 BZ LLRCSDEQ YES, CS TO DEQUEUE @Z40FPXJ 17123840 SPACE 2 @Z40FPXJ 17123940 */* D (YES,LLRCSDEQ,NO,) ONLY ONE SSRB ON QUEUE? */ @Z40FPXJ 17124040 */*LLRUPTNX: P UPDATE TO NEXT SSRB */ @Z40FPXJ 17124140 */* D (YES,,NO,LLRUPTNX) IS THIS THE LAST SSRB? */ @Z40FPXJ 17124240 */* P (,LLRSPNID) ZERO NEW LAST FOWARD PTR */ @Z40FPXJ 17124340 */*LLRCSDEQ: D (YES,,NO,LLRELSCH) C.S. SSRB SUCCESSFUL */ @Z40FPXJ 17124440 */*LLRSPNID: P PUT SUSPEND ID IN LOCK */ @Z40FPXJ 17124540 */* P (,LLRELRET) SCHEDULE SSRB */ @Z40FPXJ 17124640 SPACE 2 @Z40FPXJ 17124740 LLRUPTNX DS 0H @Z40FPXJ 17124940 LR REG6,REG7 SAVE PREV ELEMENT PTR @Z40FPXJ 17125040 LR REG7,REG8 UPDATE PTR TO CURRENT @Z40FPXJ 17125140 L REG8,SRBFLNK GER SRB LINK FIELD @Z40FPXJ 17125240 LTR REG8,REG8 IS LINK ZERO? @Z40FPXJ 17125340 BNZ LLRUPTNX NO, GET NEXT SRB @Z40FPXJ 17125440 ST REG8,SRBFLNK-SRBSECT(0,6) ZERO PREV FWD PTR @Z40FPXJ 17125540 B LLRSPNID GIVE LOCK TO SRB @Z40FPXJ 17125640 LLRCSDEQ DS 0H @Z40FPXJ 17125840 CS REG7,REG8,SRBFLNK-SRBSECT(6) CS ELE OFF QUEUE @Z40FPXJ 17125940 BNZ LLRSRBLK NOT SUCCESFUL, DO OVER @Z40FPXJ 17126240 LLRSPNID DS 0H @Z40FPXJ 17126340 L REG6,SUSPNDID GET SUSPEND ID @Z40FPXJ 17126440 ST REG6,ASCBLOCK STORE IT IN LOCK @Z40FPXJ 17126540 NI PSACLHS+3,ALLONES-LOCAL UPDATE LK HELD STRING @Z40FPXJ 17126640 OI SSRBFLG1,SSRBLLH SSRB OWNS LOCAL LOCK @Z40FPXJ 17126740 L REG6,SSRBGPRS+56 GET SRB RTRN ADDR(R14) @Z40FPXJ 17126840 LA REG6,ZERO(REG6) ZERO OUT HIGH BYTE @Z40FPXJ 17126940 ST REG6,SSRBCPSW+4 STORE RTRN ADDR IN PSW @Z40FPXJ 17127040 ST REG10,SSRBGPRS+52 SET R13 R.C. TO ZERO @Z40FPXJ 17127140 SCHEDULE SRB=(7) SCHEDULE SSRB @Z40FPXJ 17127340 B LLRELNDP @Z40FPXJ 17127640 SPACE 2 @Z40FPXJ 17127840 */*LLRELMS: P SAVE REGS USED BY MEMORY SWITCH */ @Z40FPXJ 17127940 SPACE 2 @Z40FPXJ 17128040 LLRELMS DC 0H'0' @Z40FPXJ 17128240 ST REG0,PSALKR0 SAVE CALLERS REG 0 @Z40FPXJ 17128440 ST REG1,PSALKR1 SAVE CALLERS REG 1 @Z40FPXJ 17128740 ST REG14,PSALKR14 SAVE CALLERS REG 14 @Z40FPXJ 17132940 ST REG15,PSALKR15 SAVE CALLERS REG 15 @Z40FPXJ 17133040 LR REG1,REG9 MORE ACTIVE TCBS THAN CPUS, 17133202 LH REG0,ASCBAFFN-ASCB(REG1) GET AFFINITY MASK 17133302 C REG0,NOCPUAFF TEST FOR AFFN SPECIFIED 17133402 BE LLRELMS1 NO AFFINITY SPECIFIED 17133502 LCR REG1,REG1 INDICATE AFFINITY TO MS 17133602 LLRELMS1 DC 0H'0' @Z40FPXJ 17133740 SPACE 2 @Z40FPXJ 17135940 */*LLRELMS2: S INVOKE MEMORY SWITCH */ @Z40FPXJ 17136140 SPACE 2 @Z40FPXJ 17136340 LLRELMS2 L REG15,AMEMSW CRNT ASCB ADDR RG1 & @Z40FPXJ 17136540 BALR REG14,REG15 MEMORY SWITCH IS CALLED 17137202 SPACE 2 @Z40FPXJ 17138940 */* LLRELNDP: P (,LLRELRET) RESTORE CALLER'S REGISTERS */ @Z40FPXJ 17139140 SPACE 2 17139602 LLRELNDP DS 0H @Z40FPXJ 17139840 L REG0,PSALKR0 RESTORE CALLERS REG 0 @Z40FPXJ 17140040 L REG1,PSALKR1 RESTORE CALLERS REG 1 @Z40FPXJ 17140140 L REG14,PSALKR14 RESTORE CALLERS REG 14 @Z40FPXJ 17140240 L REG15,PSALKR15 RESTORE CALLERS REG 15 @Z40FPXJ 17140340 SLR R11,R11 GET A ZERO R.C. @Z40FPXJ 17141240 B LLRELRET RETURN @Z40FPXJ 17141640 USING ASCB,REG11 @Z40FPXJ 17142040 DROP REG7 @Z40FPXJ 17142440 TITLE 'IEAVELK - SETLOCK''S UNCONDITIONAL OBTAIN LOCAL LOCK RO*17144802 UTINE' 17145602 ENTRY LLUOBT 17146402 SPACE 2 17147202 */*LLUOBT: E LLUOBT */ 17148002 SPACE 2 17148802 LLUOBT DS 0H 17150002 USING *,BASER13 ESTABLISH ADDRESSABILITY 17160002 SPACE 2 17160502 */* D (YES,LLULKSH,NO,) ARE SUPER BITS OR HIERARCHY BITS ON? */ 17161002 SPACE 2 17161502 L REG11,PSASUPER GET SUPER BITS 17162002 O REG11,PSAHLHI ARE ANY SUPER OR HIER BITS ON 17164002 BNZ LLULKSH IF SO GO CHECK FURTHER 17166002 SPACE 2 17170002 */* P DISABLE CPU FOR EXT & I/O SAVE PSW SYS. MASK IN MODEL PSW */ 17180002 SPACE 2 17190002 STNSM PSAMPSW,DISABLE DISABLE & SAVE CALLERS STATE 17200002 SPACE 2 17210002 */* P TURN ON ACTIVE INDICATOR */ 17220002 SPACE 2 17230002 OI PSASUP3,PSAULCMS SETLOCK ACTIVE IN A POSSIBLE 17240040 * SUSPEND PATH @ZA28255 17280040 SPACE 2 17370002 */* P GET ASCB'S ADDR FROM PSA LOCAL LOCK IN ASCB */ 17420002 SPACE 2 17430002 L LKADDR11,PSAAOLD GET ASCB ADDRESS 17440002 SPACE 2 17460002 */* P GET LOGICAL CPUID FROM PSA */ 17470002 SPACE 2 17480002 LH REG12,PSACPULA GET CPU LOGICAL ADDRESS 17490002 SPACE 2 17500002 */* P FORM 'CS' LOCK ARG */ 17510002 SPACE 2 17520002 SLR REG13,REG13 ZERO REG FOR CS 17530002 * note-ADDRESSABILITY HAS JUST BEEN DESTROYED 17535002 SPACE 2 17540002 */* P OBTAIN LOCAL LOCK */ 17550002 */* P REESTABLISH ADDRESSABILITY */ 17555002 */* D (NO,LLUSUPND,YES,) SUCCESS? */ 17560002 SPACE 2 17570002 CS REG13,REG12,ASCBLOCK WAS LOCK AVAILABLE 17580002 BALR REG12,ZERO SET 17583002 USING *,REG12 ADDRESSABILITY 17586002 BNZ LLUSUPND LOCK HELD BY ANOTHER CPU 17590002 SPACE 2 17590502 */* P SET LOCAL LOCK BIT IN MASK */ 17591002 SPACE 2 17591502 * NOTE-ADDRESSABILITY EXIST FROM HERE TO LPSW USING REG12 17592002 OI PSAHLHI+3,LOCAL SET LOCAL HIERARCHY BIT 17593002 SPACE 2 17593302 */* P (,LLURET) CLEAR SETLOCK BIT */ 17593602 SPACE 2 17594002 NI PSASUP3,ALLONES-PSAULCMS SETLOCK NOT ACTIVE @ZA28255 17674040 LA RETURN,ZERO(RETURN) CLEAR RETURN REG 17754002 ST RETURN,PSAMPSW+FOUR BUILD RETURN PSW 17834002 LPSW PSAMPSW RETURN TO REQUESTOR 17914002 SPACE 2 18000002 */*LLUSUPND: P REESTABLISH ORIGINAL BASE */ 18003002 */* P SAVE REGS DESTROYED */ 18006002 */* D (YES,LLUSPSRB,NO,) SRB MODE? */ 18010002 SPACE 2 18020002 LLUSUPND DC 0H'0' 18030002 L BASER13,LLUOBS GET ORIGINAL ADDRESS 18032002 DROP REG12 DROP ADDRESSABILITY 18034002 USING LLUOBT,BASER13 REESTABLISH ADDRESSABILITY 18036002 STM REG6,REG10,PSALKR6 SAVE REGS @Z40FPXJ 18038040 L LCCAPTR,PSALCCAV OBTAIN LOGICAL CCA ADDRESS 18040002 USING LCCA,LCCAPTR ESTABLISH LCCA ADDRESSABILITY 18050002 TM LCCADSF2,LCCASRBM TEST IF CALLER IS SRB MODE 18060002 BO LLUSPSRB CALLER IS IN SRB MODE 18070002 SPACE 2 18080002 */* P SAVE ALL GP REGS IN TCB */ 18090002 SPACE 2 18100002 L TCBPTR,PSATOLD CURRENT TCB ADDRESS 18110002 USING TCB,TCBPTR ESTABLISH TCB ADDRESSABILITY 18120002 STM REG0,REG15,TCBGRS SAVE ALL CURRENT REGS IN TCB 18130002 SPACE 2 18140002 */* P PLACE CALLER E.P. TO SETLOCK INTO MODEL PSW */ 18150002 SPACE 2 18160002 MVC TCBGRS6(20),PSALKR6 SAV CLRS RGS AT ENTRY @Z40FPXJ 18170040 L RBPTR,TCBRBP LOCATE TOP RB 18180002 USING RBSECT,RBPTR ESTABLISH RB ADDRESSABILITY 18190002 L REG4,PSAMPSW CALLERS STATE AT ENTRY 18200002 SPACE 2 18210002 */* P SAVE MODEL PSW IN RBOPSW */ 18220002 SPACE 2 18230002 ST REG4,RBOPSW SAVE STATE IN RB 18240002 LA BASER13,ZERO(BASER13) GOOD PSW ADDR 18250002 ST BASER13,RBOPSW+FOUR SET IC TO LOCK RTN'S ENTRY 18260002 L REG15,AIEA0DS DISPATCHERS ENTRY POINT 18270002 SPACE 2 18280002 */* P TURN OFF SETLOCK ACTIVE INDICATOR IN PSA */ 18290002 SPACE 2 18300002 NI PSASUP3,ALLONES-PSAULCMS SETLOCK NOT ACTIVE @ZA28255 18310040 SPACE 2 18320002 */* R DISPLATCHER IEAODS */ 18330002 SPACE 2 18340002 BR REG15 GIVE CONTROL TO THE DISPATCHER 18350002 SPACE 2 18360002 */*LLUSPSRB: P SAVE REMAINDER OF CALLER REGISTERS */ @Z40FPXJ 18770040 SPACE 2 @Z40FPXJ 18776040 LLUSPSRB DS 0H @Z40FPXJ 18782040 STM REG0,REG5,PSALKR0 SAVE REST OF CALLERS @Z40FPXJ 18788040 STM REG12,REG15,PSALKR12 REGISTERS 18800002 SPACE 2 18810002 */* L Q CEL:GET A SUSPEND SRB/SA */ 18820002 SPACE 2 18830002 L CPIDRG0,SRBCPID CPID FOR QUICK CELL 18840002 GETCELL CPID=(0),BRANCH=YES,SAVE=NO OBTAIN A SUSPEND SRB 18850002 SPACE 2 18900002 */* D (YES,LLUSPAVL,NO,) WAS CELL OBTAINED? */ 18910002 SPACE 2 18920002 LTR REG15,REG15 WAS CELL OBTAINED 18930002 BZ LLUSPAVL IF SO GO SET UP 18932002 SPACE 2 18934002 */* P GET SALLOC LOCK FOR GETMAIN */ 18939602 L ALECLHT,MASKSALC GET SALLOC HIERARCHY MASK 18939702 L SALCLOCK,ASALCLCK GET SALLOC LOCK ADDR 18939802 BAL REG2,USPOBTL GO GET LOCK 18939902 SETFRR A,FRRAD=LOCKASVT,PARMAD=(1),WRKREGS=(2,3) @ZA28255 18940940 OI RRRAFLG1-RRRA(R1),RRRALOCK INDICATE SETLOCKFRR @ZA28255 18941940 OI LCCALKFG,LCCALKSA SET SALLOC LOCK BIT 18943202 SPACE 2 18943602 SPACE 2 18947302 */* D (YES,LLUSPRL2,NO,) IS LOCAL LOCK AVAILABLE? */ 18949202 SPACE 2 18950602 SLR REG10,REG10 ZERO FOR CS @Z40FPXJ 18951440 L LKADDR11,PSAAOLD GET ASCB ADDR 18952302 CS ZERORG10,CPUADDR9,ASCBLOCK IS LOCAL LOCK AVAIL @Z40FPXJ 18953740 BZ LLUSPRL2 IF SO RELEASE SPINS 18954402 MVC LCCAGPGR(64),PSALKSA SAVE REGS IN CASE LOCK MANAGER 18954540 * IS CALLED AGAIN @ZA28255 18954640 SPACE 2 18954802 */* L GETMAIN SSRB TO SAVE STATUS */ 18955102 SPACE 2 18955502 LA REG0,SSRBLEN GET SSRB LENGTH 18955802 GETMAIN RU,LV=(0),SP=245,BRANCH=(YES,GLOBAL) GET SSRB 18956502 SPACE 2 18957002 */* P INDICATE SSRB WAS GETMAINED */ 18957202 SPACE 2 18957602 LA REG15,SSRBMAIN INDICATE GETMAIN 18958602 MVC PSALKSA,LCCAGPGR MOVE SAVED REGS BACK @ZA28255 18958740 SPACE 2 18958840 */* P FREE SALLOC LOCK */ 18959002 SPACE 2 18959102 SLR ZERORG10,ZERORG10 CLEAR REG 18959402 L SALCLOCK,ASALCLCK GET SALLOC LOCK ADDR 18960002 NI LCCALKFG,ALLONES-LCCALKSA CLEAR SALLOC LOCK BIT 18963302 SETFRR D,WRKREGS=(4,7) GETMAIN COMPLETED @ZA28255 18964340 ST ZERORG10,ZERO(SALCLOCK) FREE SALLOC LOCK 18965302 OI PSAMPSW,ENABLE SET RETURN PSW ENABLE @ZA28255 18966040 *********************************************************************** 18966802 * THIS SECTION BUILDS A SUSPENDED SRB, WHOSE ADDRESS WAS * 18970102 * RETURNED IN REGISTER 1 VIA QUICKCELL,OR GETMAIN * 18973402 *********************************************************************** 18976702 SPACE 2 18977502 */*LLUSPAVL: P BUILD SUSPENDED SRB */ 18978302 SPACE 2 18979102 LLUSPAVL DC 0H'0' 18980002 SPACE 2 19140002 */* P INITIALIZE FLAG BYTE */ 19150002 SPACE 2 19160002 STC REG15,SSRBFLG1 INIT FLAG BYTE 19170002 SPACE 2 19180002 */* P BUILD & SAVE PSW IN SRB PSAMPSW-> SSRBCPSW */ 19190002 */* P REG 13 (LOCK RETURN EP -> SSRBCPSW+4 */ 19200002 SPACE 2 19210002 L REG4,PSAMPSW LEFT HALF OF CALLERS ENTRY PSW 19220002 ST REG4,SSRBCPSW SAVE IN SRB FOR REDISPATCH 19230002 LA REG13,ZERO(REG13) INSURE HIGH ORDER BYTE IS ZERO 19240002 ST REG13,SSRBCPSW+4 STORE SETLCKS EP IN CALLERS PSW 19250002 SPACE 2 19300002 */* P SAVE GPR'S OF CALLER AT ENTRY IN SRBSA */ 19340002 SPACE 2 19350002 MVC SSRBGPRS(64),PSALKR0 SAVE ALL CALLERS REGISTERS 19360002 SPACE 2 19390002 */* P SET UP COMMON SAVE STATUS INTERFACE */ 19430002 SPACE 2 19480002 LR REG7,REG8 PUT LCCA ADDR IN REG7 19482002 L REG8,PSAAOLD GET ASCB ADDR 19490002 LR REG4,REG1 SAVE SSRB ADDR IN REG4 19492002 LA REG12,IEAVSPCR GET COMMON SAVE ADDR 19494002 SPACE 2 19494402 */* L GO TO IEAVSPCR TO SAVE STATUS */ 19496002 SPACE 2 19498002 BALR REG15,REG12 GO TO SAVE RTN 19498402 SPACE 2 19498502 */* P RESTORE DESTROYED REGS */ 19498802 SPACE 2 19499202 LR REG1,REG4 GET SSRB ADDR 19499602 LR REG8,REG7 RESTORE LCCA ADDR 19499702 SPACE 2 19500002 */*LLUSQFLN: P QUEUE SRB TO LOCAL LOCK SRB SUSPEND QUEUE */ @Z40FPXJ 19510040 */* D (YES,LLUSQEND,NO,) DID CDS TO ENQUEUE SSRB GO */ @Z40FPXJ 19513040 SPACE 2 19520002 L REG11,PSAAOLD GET ASCB ADDR @Z40FPXJ 19520340 LR REG7,REG1 SSRB ADDR IN REG7 @Z40FPXJ 19520540 DROP REG1 @Z40FPXJ 19520740 USING SRBSECT,REG7 @Z40FPXJ 19520940 L REG4,ASCBLOCK GET LK CONTS FOR CDS @Z40FPXJ 19521140 LTR REG4,REG4 IS LOCK AVAILABLE @Z40FPXJ 19521240 BZ LLUTRLK GO OBTAIN IT @Z40FPXJ 19521340 LLUSQFLN DS 0H @Z40FPXJ 19521440 L REG5,ASCBLSQH GET Q HDR FIELD @Z40FPXJ 19521540 LLUSQLNK ST REG5,SRBFLNK SET SSRB LINK FIELD @Z40FPXJ 19521740 LR REG6,REG4 GET CPUID FOR CDS @Z40FPXJ 19521940 CDS REG4,REG6,ASCBLOCK ENQUE ELEMENT @Z40FPXJ 19522140 BZ LLUSQEND ELEMENT WAS ENQUED @Z40FPXJ 19522340 SPACE 2 @Z40FPXJ 19522440 */* D (NO,LLUSQFLN,YES,) IS LOCAL LOCK NOW AVAILABLE */ @Z40FPXJ 19522640 */* D (YES,LLUFRMN,NO,) WAS SSRB GETMAINED */ @Z40FPXJ 19522740 */* L (,LLUSPRL3) FREECELL SSRB STORAGE */ @Z40FPXJ 19522840 */*LLUFRMN: P GET SALLOC FOR FREEMAIN */ @Z40FPXJ 19522940 */* L (,LLUSPRL2) FREEMAIN SSRB */ @Z40FPXJ 19523040 SPACE 2 @Z40FPXJ 19523140 LTR REG4,REG4 IS LOCK NOW FREE? @Z40FPXJ 19523340 BNZ LLUSQLNK NO, RETRY ENQUE @Z40FPXJ 19523440 LLUTRLK DS 0H @Z40FPXJ 19523540 LH REG6,PSACPULA GET CPU LOGICAL ADDR @Z40FPXJ 19523740 CS REG4,REG6,ASCBLOCK YES, TRY TO OBTAIN LK @Z40FPXJ 19523840 BNZ LLUSQFLN LOCK NOT AVAIL, REENQ @Z40FPXJ 19523940 DROP REG7 @Z40FPXJ 19524040 USING SRBSECT,REG1 @Z40FPXJ 19524140 OI LCCADSF2,LCCASRBM INDICATE SRB MODE @ZA28255 19524240 OI PSACLHS+3,LOCAL INDICATE LOCK HELD @ZA28255 19524340 TM SSRBFLG1,SSRBMAIN WAS SSRB GETMAINED? @Z40FPXJ 19524440 BO LLUFRMN YES, FREEMAIN @ZM40340 19524540 L CPIDRG0,SRBCPID GET CPID FOR FREECELL @Z40FPXJ 19524740 FREECELL CPID=(0),BRANCH=YES,SAVE=NO,CELL=(1) @Z40FPXJ 19524840 SLR REG10,REG10 GET A ZERO R.C. @Z40FPXJ 19524940 B LLUSPRL3 RETURN TO MAINLINE @Z40FPXJ 19525040 LLUFRMN L ALECLHT,MASKSALC GET SALLOC MASK @Z40FPXJ 19525140 L SALCLOCK,ASALCLCK GET SALLOC ADDR @Z40FPXJ 19525340 BAL REG2,USPOBTL CBT SALLOC @Z40FPXJ 19525540 SETFRR A,FRRAD=LOCKASVT,PARMAD=(7),WRKREGS=(2,3) @ZA28255 19525740 OI RRRAFLG1-RRRA(R7),RRRALOCK INDICATE SETLOCKFRR @ZA28255 19526140 OI LCCALKFG,LCCALKSA SET ON SALLOC FLAG @Z40FPXJ 19526940 LA REG0,SSRBLEN LENGTH FOR FREEMAIN @Z40FPXJ 19527340 FREEMAIN RU,LV=(0),BRANCH=(YES,GLOBAL),SP=245,A=(1) FREE SSRB 19528140 OI PSAMPSW,ENABLE SET RETURN PSW ENABLE @ZA28255 19528240 MVC PSALKSA,LCCAGPGR MUST RESTORE SAVED REGS @ZA28255 19528340 B LLUSPRL2 BACK TO MAINLINE @Z40FPXJ 19650040 SPACE 2 19700002 */*LLUSQEND: P TURN OFF SETLOCK ACTIVE INDICATOR */ 19710040 SPACE 2 19720002 LLUSQEND DS 0H @Z40FPXJ 19722040 L REG15,AIEA0DS @Z40FPXJ 19725040 NI PSASUP3,ALLONES-PSAULCMS SETLOCK NOT ACTIVE @ZA28255 19730040 BR REG15 GIVE CTL TO DISP @Z40FPXJ 19735040 SPACE 2 19740002 */* R IEA0DS DISPATCHER */ @Z40FPXJ 19750040 SPACE 2 19772002 */*LLUSPRL2: P RELEASE SALLOC LOCK */ 19774002 */*LLUSPRL3: P RESTORE REGS */ @Z40FPXJ 19775040 SPACE 2 19776002 LLUSPRL2 L SALCLOCK,ASALCLCK GET SALLOC LOCK ADDR @Z40FPXJ 19778840 NI LCCALKFG,ALLONES-LCCALKSA CLEAR SALLOC LOCK BIT 19779202 SETFRR D,WRKREGS=(4,5) FREEMAIN COMPLETED @ZA28255 19779440 ST ZERORG10,ZERO(SALCLOCK) FREE SALLOC LOCK 19779602 SPACE 2 19780002 LLUSPRL3 OI LCCADSF2,LCCASRBM INDICATE SRB MODE @ZM40337 19781040 LM REG0,REG5,PSALKR0 RESTORE REGS 0-5 @Z40FPXJ 19783040 LM REG12,REG15,PSALKR12 RESTORE REGS 12-15 @Z40FPXJ 19789040 SPACE 2 19840002 */*LLUOBTD: P UPDATE CPU LOCKS HELD STRING */ 19840902 SPACE 2 19841802 LLUOBTD DC 0H'0' 19842702 OI PSACLHS+3,LOCAL UPDATE STRING 19843602 SPACE 2 19844502 */*LLURET: P SET RETURN CODE IN PROPER REG */ 19845402 SPACE 2 19846302 LLURET DS 0H'0' 19847202 LR RCREG13,REG10 GET RETURN CODE FROM REG10 19848102 SPACE 2 19849002 */* P RESTORE REGS */ 19850002 SPACE 2 19851002 LM REG6,REG10,PSALKR6 RSTR RGS 6-10 OF CLRS @Z40FPXJ 19852040 SPACE 2 19853002 */* P PLACE RTN ADDR INTO MODEL PSW IN PSA */ 19854002 SPACE 2 19855002 LA RETURN,ZERO(RETURN) STORE CALLERS RETURN ADDRESS 19856002 ST RETURN,PSAMPSW+FOUR IN MODEL PSW 19857002 SPACE 2 19860002 */* P TURN OFF ACTIVE INDICATOR */ 19860802 SPACE 2 19861602 NI PSASUP3,ALLONES-PSAULCMS SETLOCK NOT ACTIVE @ZA28255 19862440 SPACE 2 19863202 */* P LPSW RETURN IN STATE CALLED */ 19864002 */* R RETURN */ 19864802 SPACE 2 19865602 LPSW PSAMPSW RETURN TO CALLER IN SAME STATE 19866402 * AS CALLED. 19867202 SPACE 2 19868002 */*LLULKSH: P SET RC=4 FOR HELD */ 19868402 */* D (NO,STLKAB73,YES,LLURET) IS LOCAL LOCK HELD? */ 19870002 SPACE 2 19871002 LLULKSH DC 0H'0' 19872002 TM PSACLHS+3,LOCAL IS LOCAL ALREADY HELD? 19873002 BNO SUSPAB73 NO: VIOLATION @ZA28255 19874040 LA REG13,FOUR LCL LK IS ALRDY HLD @Z40FPXJ 19875040 BR RETURN RETURN TO CALLER 19876002 */*USPOBTL: E LOCK OBTAIN SUBROUTINE */ 19876402 */*USPSPL: P THIS PORTION GETS THE LOCK */ 19876802 */* D (YES,USPFINL,NO,) WAS LOCK OBTAINED */ 19877202 */* S WINDSPIN:GO TO OPEN EMS/MFA WINDOW */ 19877602 */* P (,USPSPL) TRY AGAIN */ 19878002 */*USPFINL: R RETURN */ 19878402 SPACE 2 19878802 USPOBTL DS 0H @YM02494 19879202 LH CPUADDR9,PSACPULA GET CPUID @YM02494 19880202 USPSPL SLR ZERORG10,ZERORG10 CLEAR CS REG @YM02494 19881202 CS ZERORG10,CPUADDR9,ZERO(REG11) GET LOCK @YM02494 19882202 BZR REG2 IF GOTTEN RETURN @YM02494 19883202 LA SPINRTNR,WINDSPIN SPIN ON LOCK @YM02494 19884202 BALR MNLRETRN,SPINRTNR GO TO WINDOW RTN @YM02494 19885202 B USPSPL TRY AGAIN @YM02494 19886202 TITLE 'IEAVELK - SETLOCK''S UNCONDITIONAL CMS OBTAIN ROUTINE' 19888002 ENTRY CMSUOBT 19890002 SPACE 2 19892002 */*CMSUOBT: E CMSUOBT */ 19894002 SPACE 2 19896002 CMSUOBT DS 0H 19900002 USING *,BASER13 19910002 SPACE 2 19920002 */* P DISABLE EXT & I/O SAVE SYS MASK IN MODEL PSW */ 19930002 SPACE 2 19940002 STNSM PSAMPSW,DISABLE DISABLE CPU FOR EXT & I/O INT 19950002 SPACE 2 19960002 */* P TURN ON ACTIVE INDICATOR IN PSA */ 19970002 SPACE 2 19980002 OI PSASUP3,PSAULCMS SETLOCK ACTIVE IN A POSSIBLE 19990040 * SUSPEND PATH @ZA28255 19993040 SPACE 2 20000002 */* P SAVE REGS */ 20002002 SPACE 2 20004002 STM REG4,REG10,PSALKR4 SAVE CALLERS REGS 20006002 SPACE 2 20008002 */* D (NO,CMSULH,YES,) IS LOCAL LOCK ONLY LOCK HELD? */ 20010002 SPACE 2 20020002 L ALECLHT,PSACLHS GET STRING FOR CHECKING 20030002 BCT ALECLHT,CMSULH CONTENT IS ONE IF ONLY LL HELD 20040002 SPACE 2 20050002 */* P GET ASCB ADDR FROM PSAAOLD */ 20100002 SPACE 2 20110002 L ASCBADR9,PSAAOLD OBTAIN CURRENT ASCB ADDR 20120002 DROP REG11 20122040 USING ASCB,REG9 @Z40FPXJ 20125040 SPACE 2 20130002 */* P FORM 'CS' LOCK ARG */ 20140002 SPACE 2 20150002 SLR ZERORG10,ZERORG10 ZERO VALUE FOR CS @Z40FPXJ 20160040 SPACE 2 20170002 */* P OBTAIN CMS LOCK */ 20180002 */* D (NO,CMSUUNS,YES,) SUCCESS? */ 20190002 SPACE 2 20200002 CS ZERORG10,ASCBADR9,ZERO(LKADDR11) IS CMS LOCK FREE 20210002 BNZ CMSUUNS CMS LOCK OWNED BY ANOTHER 20220002 SPACE 2 20230002 */*CMSUSOBT: P UPDATE CPU LOCKS HELD STRING */ 20240002 SPACE 2 20250002 CMSUSOBT DC 0H'0' 20260002 OI PSACLHS+3,CMS+LOCAL UPDATE STRING @Z40FPXJ 20270040 SPACE 2 20280002 */*CMSURET: P PUT RETURN CODE IN PROPER REG */ 20282002 SPACE 2 20284002 CMSURET DC 0H'0' 20286002 LR RCREG13,REG10 GET RETURN CODE FROM REG10 20288002 SPACE 2 20288402 */* P RESTORE REGS */ 20290002 SPACE 2 20300002 LM REG4,REG10,PSALKR4 RESTORE CALLER'S REGISTERS 20310002 SPACE 2 20360002 */* P PLACE RTN ADDR INTO MODEL PSW IN PSA */ 20370002 SPACE 2 20380002 LA RETURN,ZERO(RETURN) SAVE CALLERS RETURN ADDRESS 20400002 ST RETURN,PSAMPSW+4 IN MODEL PSW 20410002 SPACE 2 20420002 */* P TURN OFF ACTIVE INDICATOR */ 20430002 SPACE 2 20440002 NI PSASUP3,ALLONES-PSAULCMS SETLOCK NOT ACTIVE @ZA28255 20450040 SPACE 2 20460002 */* P LPSW RETURN IN SAME STATE CALLED */ 20470002 */* R RETURN */ 20480002 SPACE 2 20490002 LPSW PSAMPSW RETURN TO CALLER IN SAME STATE 20500002 * AS CALLED 20510002 SPACE 2 20520002 */*CMSULH: P SET RC=4 "ALREADY OWNED" */ 20530002 SPACE 2 20540002 CMSULH DC 0H'0' 20550002 LA REG10,FOUR THE CMS LOCK IS ALREADY HELD 20560002 SPACE 2 20570002 */* D (YES,CMSURET,NO,STLKAB73) IS CMS LOCK ALREADY HELD? */ 20580002 SPACE 2 20590002 TM PSACLHS+3,CMS IS CMS LOCK ALREADY HELD? 20600002 BO CMSURET YES: GO TO COMMON RETURN CODE 20610002 B SUSPAB73 NO: VIOLATION @ZA28255 20620040 SPACE 2 20630002 */*CMSUUNS: P GET LOGICAL CPU ADDR */ 20640002 SPACE 2 20650002 CMSUUNS DC 0H'0' 20660002 L LCCAPTR,PSALCCAV OBTAIN LCCA ADDR IN REG 8 20670002 SPACE 2 20680002 */* D (YES,CMSUUSRB,NO,) SRB MODE? */ 21040002 SPACE 2 21050002 TM LCCADSF2,LCCASRBM IS THIS A SRB CALLER? 21060002 BO CMSUUSRB SRB CALLER MUST BE SUSPENDED 21070002 SPACE 2 21080002 */* P SAVE REGS 0-3 & 11-15 IN IHSA */ @Z40FPXJ 21090040 SPACE 2 21100002 L REG5,ASCBASXB OBTAIN ASXB ADDR 21110002 USING ASXB,REG5 21120002 L REG4,ASXBIHSA OBTAIN INT HANDLER SAVE AREA 21130002 USING IHSA,REG4 21140002 STM REG0,REG3,IHSAGPRS SAVE CALLERS REGS 0 THRO 3 21150002 SPACE 2 21160002 */* P MOVE REGS 4-10 FROM PSA TO IHSA */ @Z40FPXJ 21170040 SPACE 2 21180002 MVC IHSAGPRS+16(28),PSALKR4 SAVE CALLERS REGS 4 THRO 10 21190002 STM REG11,REG15,IHSAGPRS+44 SAVE CALLERS REGS 11 THR 15 21200002 SPACE 2 21210002 */* P BUILD (STCM) RESUME PSW R13-> PSAMPSW+3 */ 21220002 SPACE 2 21230002 MVC IHSACPSW(4),PSAMPSW SAVE CALLERS LEFT HALF PSW 21240002 LA BASER13,ZERO(BASER13) INSURE HIGH BYTE ZERO 21250002 SPACE 2 21260002 */* P SAVE RESUME PSW IN IHSA (OBTAIN RTN'S ENTRY POINT) */ 21270002 SPACE 2 21280002 ST BASER13,IHSACPSW+4 SAVE CALLERS EP TO CMS OBTAIN 21290002 SPACE 2 21302002 */* P SET UP INTERFACE TO COMMON SAVE ROUTINE */ 21304002 SPACE 2 21306002 SLR REG1,REG1 CLEAR REG1 -NOTSRB 21308002 LR REG7,REG8 GET LCCA ADDR IN 7 21308402 L REG8,PSAAOLD GET ASCB ADDR IN 8 21308802 LA REG12,IEAVSPCR GET ENTRY ADDR 21309202 SPACE 2 21309602 */* L GO TO IEAVSPCR TO SAVE STATUS */ 21309702 SPACE 2 21309802 BALR REG15,REG12 GO TO SAVE STATUS 21309902 SPACE 2 21313202 */* P RESTORE NEEDED VALUES */ 21315202 SPACE 2 21315602 L REG9,PSAAOLD GET ASCB ADDR IN 9 21316002 LR REG8,REG7 RESTORE LCCA ADDR 21316402 SPACE 2 21316702 */*CMSUQACB: P QUEUE ASCB TO ASCBCMS SUSPEND Q */ @Z40FPXJ 21320040 SPACE 2 @Z40FPXJ 21320540 LR REG10,REG11 GET CMS LK ADDR @Z40FPXJ 21321040 LR REG7,REG9 GET ASCB ADDR FOR CS @Z40FPXJ 21321540 CMSUQACB DS 0H @Z40FPXJ 21322040 L REG5,4(REG11) GET Q HDR @Z40FPXJ 21322540 CMSUACBS DS 0H @Z40FPXJ 21323040 ST REG5,ASCBCMSF STR HDR IN ASCB FWDPTR @Z40FPXJ 21323540 L REG4,ZERO(REG10) GET LOCKWORD @Z40FPXJ 21324040 LTR REG4,REG4 IS LOCK AVAILABLE @Z40FPXJ 21324140 BZ CMSUTRLK GO GET IT @Z40FPXJ 21324240 LR REG6,REG4 PUT LKWD IN R6 FOR CDS @Z40FPXJ 21324540 CDS REG4,REG6,ZERO(REG10) CDS ELE ONTO QUE @Z40FPXJ 21325040 */* D (YES,CMSUACBQ,NO,) DID CDS TO QUE ASCB GO */ @Z40FPXJ 21325140 */* D (NO,CMSUQACB,YES,) IS CMS LOCK AVAIL */ @Z40FPXJ 21325240 BZ CMSUACBQ ELE ON QUE @Z40FPXJ 21325540 LTR REG4,REG4 IS LOCK AVAIL @Z40FPXJ 21326040 BNZ CMSUACBS NO TRY TO REQUE @Z40FPXJ 21326540 CMSUTRLK DS 0H @Z40FPXJ 21326740 CS REG4,REG7,ZERO(REG10) YES TRY TO GET IT @Z40FPXJ 21327040 BNZ CMSUQACB LK NOT AVAIL REQUE ELE @Z40FPXJ 21327540 SLR ZERORG10,ZERORG10 GET A ZERO RETURN CODE @Z40FPXJ 21328040 L REG5,ASCBASXB GET ASXB ADDRESS @Z40FPXJ 21328140 L REG4,ASXBIHSA GET IHSA ADDRESS @Z40FPXJ 21328240 SPACE 2 @Z40FPXJ 21330240 */* D (YES,,NO,CMSUQACB) DID CS FOR LOCK GO ? */ @Z40FPXJ 21332240 */* P RESET TOLD AND TNEW */ @Z40FPXJ 21334240 SPACE 2 @Z40FPXJ 21336240 MVC PSATNEW(EIGHT),IHSANTCB-IHSA(REG4) ST TOLD/TNEW @Z40FPXJ 21338240 SPACE 2 @Z40FPXJ 21340240 */* D (YES,,NO,CMSUNTQE) IS THERE A TQE ? */ @Z40FPXJ 21342240 SPACE 2 @Z40FPXJ 21344240 L REG5,PSATOLD TCB ADDRESS @Z40FPXJ 21346240 L REG5,TCBTME-TCB(REG5) TQE ADDRESS @Z40FPXJ 21348240 LTR REG5,REG5 IS THERE A TQE @Z40FPXJ 21350240 BNH CMSUNTQE NO, SKIP TIMER SETTING @Z40FPXJ 21352240 SPACE 2 @Z40FPXJ 21354240 */* D (YES,,NO,CMSUNTQE) IS CPU TIMER OK ? */ @Z40FPXJ 21356240 SPACE 2 @Z40FPXJ 21358240 L REG5,PSAPCCAV PCCA ADDRESS @Z40FPXJ 21360240 TM PCCAINTE-PCCA(REG5),PCCANUIN CPU TIMER WORKING @Z40FPXJ 21362240 BO CMSUNTQE NOT WORKING SKIP SET @Z40FPXJ 21364240 SPACE 2 @Z40FPXJ 21366240 */* P RESET CPU TIMER AND DISPATCHER TOD */ @Z40FPXJ 21368240 SPACE 2 @Z40FPXJ 21370240 SPT IHSACPUT-IHSA(REG4) RESET CPU TIMER @Z40FPXJ 21372240 L REG5,PSALCCAV LCCA ADDRESS @Z40FPXJ 21374240 STCK LCCADTOD-LCCA(REG5) RESET DISPATCHER TOD @Z40FPXJ 21376240 CMSUNTQE DS 0H @Z40FPXJ 21378240 SPACE 2 @Z40FPXJ 21380240 */*CMSUNTQE: P RESET LOCAL LOCK TO CPU ADDRESS */ @Z40FPXJ 21382240 SPACE 2 @Z40FPXJ 21384240 LH REG5,PSACPULA GET CPU ADDRESS @Z40FPXJ 21386240 ST REG5,ASCBLOCK-ASCB(REG7) UPDATE LOCAL LOCK @Z40FPXJ 21388240 SPACE 2 @Z40FPXJ 21390240 */* P (,CMSUSOBT) RESET CPUS COUNT */ @Z40FPXJ 21392240 SPACE 2 @Z40FPXJ 21394240 L REG3,ASCBCPUS-ASCB(REG7) GET THE CPUS COUNT @ZM40337 21396240 CMSUPCPU DS 0H @Z40FPXJ 21398240 LA REG5,ONE(REG3) INCREMENT COUNT FOR CS @ZM40337 21400240 CS REG3,REG5,ASCBCPUS-ASCB(REG7) UPDATE CPUS COUNT @ZM40337 21401240 BNZ CMSUPCPU COUNT HAS CHANGED @Z40FPXJ 21404240 LM REG0,REG3,IHSAGPRS RELOAD R0-R3 @Z40FPXJ 21510040 LM REG11,REG15,IHSAGPRS+44 LOAD R11-R15 @Z40FPXJ 21512040 B CMSUSOBT TO EXIT WITH LOCK @Z40FPXJ 21514040 CMSUACBQ DS 0H @Z40FPXJ 21516040 SPACE 2 21518040 */* D (YES,CMSUACBQ,NO,) DID CDS TO QUE ASCB GO */ @Z40FPXJ 21520040 */*CMSUACBQ: P GET DISPATCHER ENTRY POINT */ @Z40FPXJ 21530040 SPACE 2 21550002 L REG15,AIEA0DS OBTAIN DISP ENTRY, @Z40FPXJ 21580040 * IEAPDS2 FOR SUSPENDED LOCKED 21590002 * ADDRESS SPACES 21600002 SPACE 2 21612002 SPACE 2 21619202 */* P TURN OFF SETLOCK ACTIVE INDICATOR */ 21620002 SPACE 2 21630002 NI PSASUP3,ALLONES-PSAULCMS SETLOCK NOT ACTIVE @ZA28255 21640040 SPACE 2 21650002 */* R IEA0DS DISPATCHER */ @Z40FPZJ 21660040 */*CMSUAGLK: D (NO,CMSUQACB,YES,CMSUSOBT) IS CMS LOCK AVAIL */ @Z40FPXJ 21663040 SPACE 2 21670002 BR REG15 TO DISP, NO DISP LOCK @Z40FPXJ 21680040 SPACE 2 21682002 */*CMSSPRL2: P RELEASE SALLOC LOCK */ 21684002 SPACE 2 21686002 CMSSPRL2 L REG5,ASALCLCK GET SALLOC LOCK ADDR @Z40FPXJ 21688840 NI LCCALKFG,ALLONES-LCCALKSA CLEAR SALLOC LOCK BIT 21689202 SETFRR D,WRKREGS=(2,3) FREEMAIN COMPLETED @ZA28255 21689440 ST ZERORG10,ZERO(REG5) FREE SALLOC LOCK 21689602 CMSSPRL3 LM REG0,REG3,PSALKR0 RESTORE REGS 0-3 @Z40FPXJ 21689740 LM REG11,REG15,PSALKR11 RESTORE REGS 11-15 @Z40FPXJ 21689840 SPACE 2 21690002 */*CMSSPRL3: P RESTORE REGS */ @Z40FPXJ 21720040 */*CMSULSO: P (,CMSUSOBT) RETURN TO MAINLINE EXIT */ @Z40FPXJ 21730040 SPACE 2 21770002 OI LCCADSF2,LCCASRBM INDICATE SRB MODE @ZM40337 21780040 B CMSUSOBT GO PROCESS FOR GOTTEN LOCK 21800002 SPACE 2 21810002 */*CMSUUSRB: P SAVE REGS 0-3, 11-15 IN PSA */ 21820002 SPACE 2 21830002 CMSUUSRB DC 0H'0' 21840002 STM REG0,REG3,PSALKR0 SAVE CALLER'S OTHER REGS 21850002 STM REG11,REG15,PSALKR11 SAVE CALLERS'S OTHER REGS 21860002 SPACE 2 21870002 */* S QCELL:GET A SUSPENDED SRB */ 21880002 SPACE 2 21890002 L CPIDRG0,SRBCPID CPID FOR QUICK CELL 21900002 GETCELL CPID=(0),BRANCH=YES,SAVE=NO OBTAIN A SUSPEND SRB 21950002 SPACE 2 22000002 */* D (YES,CMSUSAVL,NO,) WAS CELL OBTAINED? */ 22050002 SPACE 2 22100002 LTR REG15,REG15 WAS CELL OBTAINED 22110002 BZ CMSUSAVL IF SO GO SET UP 22120002 SPACE 2 22148102 */* P GET SALLOC LOCK FOR GETMAIN */ 22148402 SPACE 2 22148502 LR REG4,REG11 SAVE CMS LK ADDR @Z40FPXJ 22148640 L ALECLHT,MASKSALC GET SALLOC HIERARCHY MASK 22148802 L SALCLOCK,ASALCLCK GET SALLOC LOCK ADDR 22149202 BAL REG2,USPOBT GO GET LOCK 22149602 SETFRR A,FRRAD=LOCKASVT,PARMAD=(1),WRKREGS=(2,3) @ZA28255 22149740 OI RRRAFLG1-RRRA(R1),RRRALOCK INDICATE SETLOCKFRR @ZA28255 22149940 OI LCCALKFG,LCCALKSA SET SALLOC LOCK BIT 22150140 SPACE 2 22150502 */* D (YES,CMSSPRL2,NO,) IS CMS LOCK AVAILABLE? */ 22157602 SPACE 2 22158002 L CPUADDR9,PSAAOLD GET ASCB ADDR FOR SWAP 22158102 LR LKADDR11,REG4 GET CMS LOCK ADDR BACK @Z40FPXJ 22158440 CS ZERORG10,CPUADDR9,ZERO(LKADDR11) IS LOCK AVAIL 22159202 BZ CMSSPRL2 IF SO RELEASE SPINS 22160002 MVC LCCAGPGR(64),PSALKSA SAVE REGS IN CASE LOCK MANAGER 22160140 * IS CALLED AGAIN @ZA28255 22160240 SPACE 2 22160402 */* L GETMAIN SSRB SAVE ARE */ 22162002 SPACE 2 22162402 LA REG0,SSRBLEN GET SSRB LENGTH 22162802 GETMAIN RU,LV=(0),SP=245,BRANCH=(YES,GLOBAL) GET SSRB 22163202 SPACE 2 22164302 */* P INDICATE SSRB WAS GETMAINED */ 22166702 SPACE 2 22167802 LA REG15,SSRBMAIN INDICATE GETMAIN 22168902 MVC PSALKSA,LCCAGPGR MOVE SAVED REGS BACK @ZA28255 22169440 SPACE 2 22170002 */* P FREE SALLOC LOCK */ 22172102 SPACE 2 22172202 L REG4,ASALCLCK GET SALLOC LOCK BIT @Z40FPXJ 22172940 NI LCCALKFG,ALLONES-LCCALKSA CLEAR SALLOC LOCK BIT 22173302 SETFRR D,WRKREGS=(5,7) GETMAIN COMPLETED @ZA28255 22173840 SLR ZERORG10,ZERORG10 CLEAR R10 TO FREE LK @Z40FPXJ 22174340 ST ZERORG10,ZERO(REG4) FREE SALLOC LOCK @Z40FPXJ 22176640 OI PSAMPSW,ENABLE SET RETURN PSW ENABLE @ZA28255 22186640 *********************************************************************** 22210002 * THIS SECTION BUILDS A SUSPENDED SRB, WHOSE ADDRESS WAS * 22220002 * RETURNED IN REGISTER 1 VIA QUICKCELL,OR GETMAIN * 22222002 *********************************************************************** 22224002 SPACE 2 22224602 */*CMSUSAVL: P BUILD A SUSPENDED SRB*/ 22225202 CMSUSAVL DC 0H'0' 22226002 USING SRBSECT,REG1 22226402 SPACE 2 22228002 */* P INITIALIZE FLAG BYTE */ 22229702 SPACE 2 22229802 STC REG15,SSRBFLG1 INIT FLAG BYTE 22229902 SPACE 2 22233202 */* P BUILD & SAVE PSW IN SRB PSAMPSW-> SSRBCPSW */ 22235202 */* P REG 13 (LOCK RETURN EP -> SSRBCPSW+4 */ 22235602 SPACE 2 22236002 L REG4,PSAMPSW LEFT HALF OF CALLERS ENTRY PSW 22236402 ST REG4,SSRBCPSW SAVE IN SRB FOR REDISPATCH 22236502 LA REG13,ZERO(REG13) INSURE HIGH ORDER BYTE IS ZERO 22236602 ST REG13,SSRBCPSW+4 STORE SETLCKS EP IN CALLERS PSW 22239902 SPACE 2 22289902 */* P SAVE GPR'S OF CALLER AT ENTRY IN SRBSA */ 22290002 SPACE 2 22340002 MVC SSRBGPRS(64),PSALKR0 SAVE ALL CALLERS REGISTERS 22390002 SPACE 2 22540002 */* P SET UP COMMON SAVE STATUS INTERFACE */ 22590002 SPACE 2 22640002 LR REG7,REG8 PUT LCCA ADDR IN REG7 22690002 L REG8,PSAAOLD GET ASCB ADDR 22740002 LR REG4,REG1 SAVE SSRB ADDR IN REG4 22790002 LA REG12,IEAVSPCR GET COMMON SAVE ADDR 22840002 SPACE 2 22890002 */* L GO TO IEAVSPCR TO SAVE STATUS */ 22900002 SPACE 2 22910002 BALR REG15,REG12 GO TO SAVE RTN 22920002 SPACE 2 22922002 */* P RESTORE DESTROYED REGS */ 22924002 SPACE 2 22926002 LR REG8,REG7 RESTORE LCCA ADDR 22928402 SPACE 2 22930002 */*CMSUQSRB: P QUEUE SRB TO CMS SRB SUSPEND QUEUE */ @Z40FPXJ 22940040 */* D (NO,,YES,CMSUSRBQ) DID CDS TO ENQUE ELE GO */ @Z40FPXJ 22943040 SPACE 2 22950002 LR REG10,REG11 GET CMS LK ADDR @Z40FPXJ 22950140 USING SRBSECT,REG7 @Z40FPXJ 22955140 LR REG7,REG4 GET SSRB ADDR @Z40FPXJ 22960140 CMSUQSRB DS 0H @Z40FPXJ 22965140 L REG5,FOUR(REG11) GET SRB Q HDR @Z40FPXJ 22970140 CMSUSRBS DS 0H @Z40FPXJ 22975140 ST REG5,SRBFLNK STR HDR IN SRB LN FLD @Z40FPXJ 22980140 L REG4,ZERO(REG10) GET CMSLK @Z40FPXJ 22985140 LTR R4,R4 Q. LOCK AVAILABLE @ZA15008 22986140 BZ CMSULOKA A. YES - GO TRY TO GET @ZA15008 22987140 LR REG6,REG4 PUT LK IN REG6 FOR CDS @Z40FPXJ 22990140 CDS REG4,REG6,ZERO(REG10) CDS ELE ON QUE @Z40FPXJ 22995140 BZ CMSUSRBQ ELE IS ENQUED @Z40FPXJ 23000140 LTR REG4,REG4 NOT ENQD IS LOCK FREE @Z40FPXJ 23005140 BNZ CMSUSRBS NO REENQUE @Z40FPXJ 23010140 CMSULOKA LH REG2,PSACPULA GET CPU ID @ZA19338 23010740 L REG6,PSAAOLD GET ASCB ADDR @ZA19338 23011340 CS REG4,REG6,ZERO(REG10) TRY TO GET CMS LOCK @Z40FPXJ 23020140 BNZ CMSUQSRB FAILED, TOP OF QUE RTN @Z40FPXJ 23025140 ST REG2,ASCBLOCK-ASCB(REG6) STORE CPUID IN LOCK @ZA19338 23027140 OI LCCADSF2,LCCASRBM INDICATE SRB MODE @ZA28255 23028140 OI PSACLHS+3,CMS+LOCAL INDICATE LOCKS HELD @ZA28255 23029140 TM SSRBFLG1,SSRBMAIN SUCCESS, WAS ELE GTMD @Z40FPXJ 23030140 BO CMSUFRMN YES, GOTO FREEMAIN @Z40FPXJ 23035140 L CPIDRG0,SRBCPID CPID FOR FREE CELL @Z40FPXJ 23040140 FREECELL CPID=(0),BRANCH=YES,SAVE=NO,CELL=(7) @Z40FPXJ 23045140 SLR ZERORG10,ZERORG10 GET 0 RTN CODE @Z40FPXJ 23050140 B CMSSPRL3 TO EXIT @Z40FPXJ 23055140 CMSUFRMN DS 0H @Z40FPXJ 23060140 L ALECLHT,MASKSALC GET SALLOC MASK @Z40FPXJ 23065140 L SALCLOCK,ASALCLCK GET SALLOC ADDR @Z40FPXJ 23070140 LR R4,R7 SAVE SSRB ADDR ACROSS @ZA18192 23071140 * SUBRTN CALL @ZA18192 23072140 BAL REG2,USPOBT GO GET LK @Z40FPXJ 23075140 SETFRR A,FRRAD=LOCKASVT,PARMAD=(1),WRKREGS=(2,3) @ZA28255 23076140 OI RRRAFLG1-RRRA(R1),RRRALOCK INDICATE SETLOCKFRR @ZA28255 23077140 OI LCCALKFG,LCCALKSA UPDATE LK HELD STRING @Z40FPXJ 23080140 LA REG0,SSRBLEN GET LNGTH FOR FREEMAIN @Z40FPXJ 23085140 FREEMAIN RU,LV=(0),SP=245,BRANCH=(YES,GLOBAL),A=(4) @ZA18192 23087140 OI PSAMPSW,ENABLE SET RETURN PSW ENABLE @ZA28255 23089140 MVC PSALKSA,LCCAGPGR MUST RESTORE SAVED REGS @ZA28255 23091140 SLR REG10,REG10 GET ZERO R.C. @Z40FPXJ 23095140 B CMSSPRL2 TO EXIT @Z40FPXJ 23100140 DROP REG7 @Z40FPXJ 23105140 CMSUSRBQ DS 0H @Z40FPXJ 23110140 L REG15,AIEA0DS ADDR OF DISP ENTRY @Z40FPXJ 23115140 NI PSASUP3,ALLONES-PSAULCMS SETLOCK NOT ACTIVE @ZA28255 23150040 SPACE 2 23200002 */* D (YES,,NO,CMSUQSRB) IS CMS LOCK AVAIL */ @Z40FPXJ 23211040 */* D (NO,,YES,CMSUFRMN) WAS SSRB GETMAINED */ @Z40FPXJ 23212040 */* L (,CMSSPRL3) FREECELL SSRB STORAGE */ @Z40FPXJ 23213040 */*CMSUFRMN: P GET SALLOC LOCK FOR FREEMAIN */ @Z40FPXJ 23214040 */* L (,CMSSPRL2) FREEMAIN SSRB STORAGE */ @Z40FPXJ 23215040 */*CMSUSRBQ: P TURN OFF SETLOCK ACTIVE INDICATOR */ @Z40FPXJ 23216040 */* R IEA0DS DISPATCHER */ @Z40FPXJ 23217040 SPACE 2 23220002 BR REG15 ENTER DISPATCHER AT ITS ENTRY 23230002 * POINT FOR SUSPENDING SRBS. 23240002 SPACE 2 23242002 */*USPOBT: E LOCK OBTAIN SUBROUTINE */ 23243002 */*USPSP: P THIS PORTION GETS THE LOCK */ 23244002 */* D (YES,USPFIN,NO,) WAS LOCK OBTAINED */ 23244102 */* S WINDSPIN:GO TO OPEN EMS/MFA WINDOW */ 23244202 */* P (,USPSP) TRY AGAIN */ 23244302 */*USPFIN: R RETURN */ 23244402 SPACE 2 23246002 USPOBT DS 0H 23248002 LH CPUADDR9,PSACPULA GET CPUID 23249602 USPSP SLR ZERORG10,ZERORG10 CLEAR CS REG 23249702 CS ZERORG10,CPUADDR9,ZERO(REG11) GET LOCK 23250702 BZR REG2 IF GOTTEN RETURN 23251702 LA SPINRTNR,WINDSPIN SPIN ON LOCK 23252702 BALR MNLRETRN,SPINRTNR GO TO WINDOW RTN 23253702 B USPSP TRY AGAIN 23254702 TITLE 'IEAVELK''S CMS CONDITIONAL OBTAIN ROUTINE' 23255702 ENTRY CMSCOBT 23260002 SPACE 2 23270002 */*CMSCOBT: E CMSCOBT */ 23280002 SPACE 2 23290002 CMSCOBT DS 0H 23300002 USING *,BASER13 23310002 SPACE 2 23320002 */* P DISABLE EXT & I/O SAVE SYS MASK IN MODEL PSW */ 23330002 SPACE 2 23340002 STNSM PSAMPSW,DISABLE DISABLE CPU FOR EXT & I/O INT 23350002 SPACE 2 23360002 */* P TURN ON SETLOCK ACTIVE INDICATOR IN PSA */ 23370002 SPACE 2 23380002 OI PSASUP1,PSALOCK SETLOCK ACTIVE INDICATOR 23390002 SPACE 2 23400002 */* P SAVE REGS */ 23402002 SPACE 2 23404002 ST REG9,PSALKR9 SAVE CALLERS REG9 @Z40FPXJ 23406040 ST REG10,PSALKR10 SAVE CALLERS RG 10 @Z40FPXJ 23406640 SPACE 2 23408002 */* D (NONE,STLKAB73,BOTH,CMSCHLD,LL,) LOCAL &/OR CMS HELD? */ 23410002 SPACE 2 23420002 TM PSACLHS+3,CMS+LOCAL CHECK LOCAL & CMS IND 23430002 BO CMSCHLD LOCK ALREADY HELD 23450002 BZ STLKAB73 HIERARCHY VIOLATE: LL NOT HELD 23460002 SPACE 2 23470002 */*CMSCNTHD: P GET ASCB ADDR FROM PSA */ 23530002 SPACE 2 23540002 CMSCNTHD DC 0H'0' 23542002 L ASCBADR9,PSAAOLD OBTAIN CURRENT ASCB ADDR 23550002 SPACE 2 23560002 */* P FORM 'CS' LOCK ARG */ 23570002 SPACE 2 23580002 SLR ZERORG10,ZERORG10 FULLWORD OF ZEROS @Z40FPXJ 23590040 SPACE 2 23600002 */* P OBTAIN CMS LOCK */ 23610002 */* D (NO,CMSCOBTU,YES,) SUCCESS? */ 23620002 SPACE 2 23630002 CS ZERORG10,ASCBADR9,ZERO(LKADDR11) WAS LOCK AVAILABLE 23640002 BNZ CMSCOBTU LOCK NOT AVAILABLE 23650002 SPACE 2 23660002 */* P UPDATE CPU LOCKS HELD STRING */ 23670002 SPACE 2 23680002 OI PSACLHS+3,CMS UPDATE STRING 23690002 SPACE 2 23700002 */*CMSCRET: P GET RETURN CODE IN PROPER REG */ 23710002 SPACE 2 23720002 CMSCRET DC 0H'0' 23722002 LR RCREG13,REG10 GET RETURN CODE FROM REG10 23730002 SPACE 2 23740002 */* P RESTORE REGS */ 23750002 SPACE 2 23760002 L REG9,PSALKR9 RESTORE CALLERS REG9 @Z40FPXJ 23780040 L REG10,PSALKR10 RESTORE CALLERS REG10 @Z40FPXJ 23783040 SPACE 2 23790002 */*CMSCRET1: P PLACE RTN ADDR INTO MODEL PSW IN PSA */ 23800002 SPACE 2 23810002 CMSCRET1 DC 0H'0' 23820002 LA RETURN,ZERO(RETURN) STORE CALLER'S RETURN ADDR 23830002 ST RETURN,PSAMPSW+4 IN MODEL PSW 23840002 SPACE 2 23850002 */* P TURN OFF ACTIVE INDICATOR */ 23860002 SPACE 2 23870002 NI PSASUP1,LOCKNACT TURN OFF SETLOCK ACTIVE BIT 23880002 SPACE 2 23890002 */* P LPSW RETURN IN STATE CALLED */ 23900002 */* R RETURN */ 23910002 SPACE 2 23920002 LPSW PSAMPSW RETURN CONTROL IN SAME STATE 23930002 SPACE 2 23940002 */*CMSCOBTU: P (,CMSCRET) SET RC=8 */ 23950002 SPACE 2 23960002 CMSCOBTU DC 0H'0' 23970002 LA REG10,EIGHT LOCK WAS HELD BY ANOTHER CPU 23980002 B CMSCRET GO TO COMMON RETURN CODE 23990002 SPACE 2 24000002 */*CMSCHLD: P (,CMSCRET) SET RC=4 "ALREADY OWNED" */ 24010002 SPACE 2 24020002 CMSCHLD DC 0H'0' 24030002 LA REG10,FOUR LOCK ALREADY HELD 24040002 B CMSCRET GO TO COMMON RETURN CODE 24050002 TITLE 'IEAVELK''S CMS RELEASE ROUTINE' 24160002 ENTRY CMSREL 24170002 SPACE 2 24180002 */* E CMSREL */ 24190002 SPACE 2 24200002 CMSREL DS 0H 24210002 USING *,BASER13 24220002 SPACE 2 24230002 */* P DISABLE EXT & I/O SAVE SYS MASK IN MODEL PSW */ 24240002 SPACE 2 24250002 STNSM PSAMPSW,DISABLE DISABLE CPU FOR EXT & I/O INT 24260002 SPACE 2 24270002 */* P TURN ON ACTIVE INDICATOR IN PSA */ 24280002 */* P NOTE: NO TEST FOR LOGICAL LOCK */ 24290002 SPACE 2 24300002 OI PSASUP1,PSALOCK SETLOCK ACTIVE INDICATOR 24310002 SPACE 2 24320002 */*CMSRLLO: P SAVE REGS */ 24330002 SPACE 2 24340002 CMSRLLO DC 0H'0' 24350002 STM REG4,REG10,PSALKR4 SAVE CALLERS R4-10 @ZM40338 24360040 SPACE 2 24410002 */* P FORM 'CS' LOCK ARG */ 24420002 SPACE 2 24430002 SLR ZERORG10,ZERORG10 ZERO RETURN CODE 24440040 SPACE 2 24450002 */* D (NO,CMSRNTHD,YES,) IS LOCK HELD? */ 24470002 */* P RELEASE CMS LOCK */ 24472002 SPACE 2 24480002 TM PSACLHS+3,CMS IS CMS LOCK HELD 24490002 BNO CMSRNTHD NO: SET PROPER RETURN CODE 24500802 SPACE 2 25080002 */*CMSRQCHK: D (YES,CMSREXIT,NO,) IS QUEUE EMPTY? */ @Z40FPXJ 25090040 */* S CMSRDEQS: DEQ ELEMENTS ON SUSPEND QUEUE */ @Z40FPXJ 25095040 SPACE 2 25110002 CMSRQCHK DS 0H @Z40FPXJ 25111040 L R6,ZERO(REG11) GET LK WORD @Z40FPXJ 25121040 SLR R7,R7 ZERO FOR CS @Z40FPXJ 25131040 SLR R8,R8 ZERO FOR CS @Z40FPXJ 25141040 SLR R9,R9 ZERO FOR CS @Z40FPXJ 25151040 CDS REG6,REG8,ZERO(REG11) IS QUEUE EMPTY @Z40FPXJ 25161040 BNZ CMSRDEQS GO DEQUE CHAIN @Z40FPXJ 25171040 NI PSACLHS+3,ALLONES-CMS UPDATE STRING @Z40FPXJ 25181040 SPACE 2 25448002 */*CMSREXIT: P SET RETURN CODE IN PROPER REG */ 25450002 SPACE 2 25460002 CMSREXIT DC 0H'0' 25470002 LR RCREG13,REG10 INDICATE RELEASE SUCCESSFUL 25480002 SPACE 2 25490002 */*CMSRRET: P RESTORE REGS */ 25500002 SPACE 2 25510002 CMSRRET DC 0H'0' 25520002 LM REG4,REG10,PSALKR4 RESTORE CALLER'S R4-10 @ZM40338 25530040 SPACE 2 25540002 */* P BUILD RETURN PSW */ 25550002 SPACE 2 25560002 LA RETURN,ZERO(RETURN) STORE CALLER'S RETURN ADDR 25570002 ST RETURN,PSAMPSW+4 IN MODEL PSW 25580002 SPACE 2 25590002 */* P TURN OFF ACTIVE INDICATOR */ 25600002 SPACE 2 25610002 NI PSASUP1,LOCKNACT TURN OFF LOCK ACTIVE BIT 25620002 SPACE 2 25630002 */* P LPSW RETURN IN SAME STATE AS CALLED */ 25640002 */* R RETURN */ 25650002 SPACE 2 25660002 LPSW PSAMPSW RETURN CONTROL IN SAME STATE 25670002 * AS WHEN CALLED. 25680002 SPACE 2 25682002 */*CMSRNTHD: D (NO,CMSROCH,YES,) WAS LOCK FREE */ 25689202 SPACE 2 25689602 CMSRNTHD DC 0H'0' 25691602 C ZERORG10,ZERO(LKADDR11) IS LOCK AVALIABLE? 25694002 BNE CMSROCH NO: HELD BY OTHER CPU 25696002 SPACE 2 25698002 */* P (,CMSREXIT) SET RC=4 "LOCK NOT HELD" */ 25698402 SPACE 2 25698802 LA REG10,FOUR RC 4 - LOCK NOT HELD BY ANY CPU 25699202 B CMSREXIT GO TO COMMON RETURN CODE 25699302 SPACE 2 25699402 */*CMSROCH: P (,CMSREXIT) SET RC=8 "ANOTHER CPU OWNS LOCK" */ 25699502 SPACE 2 25699602 CMSROCH DC 0H'0' 25702002 LA REG10,EIGHT RC 8 - LOCK OWNED BY ANOTHER 25702102 B CMSREXIT GO TO COMMON RETURN CODE 25704102 SPACE 2 25704802 ********************************************************************** 25707402 * * 25708440 * THIS ROUTINE DEQUEUES ANY SRBS AND ASCBS THAT ARE SUSPENDED * 25720002 * ON THE CMS LCK SPND Q. IF ANY SRBS ARE ON THE @Z40FPXJ* 25730040 * SUSPEND QUEUE, THEY WILL BE SCHEDULED AND MEMORY SWITCH * 25740002 * WILL NOT BE INVOKED. IF THERE ARE NO SRBS (THEN THERE * 25750002 * MUST BE ASCBS) MEMORY SWITCH WILL BE INVOKED EACH TIME * 25760002 * AN ASCB IS DEQUEUED. EACH ASCB WILL HAVE THE INTERRUPTED * 25770002 * LOCK ID PLACED IN ITS LOCAL LOCK (PREVIOUS VALUE WAS THE * 25780002 * SUSPEND ID) IN ORDER THAT THE DISPATCHER WILL DISPATCH THAT * 25790002 * ASCB WHEN IT BECOMES HIGHEST READY MEMORY. * 25800002 ********************************************************************** 25810002 SPACE 2 25820002 */*CMSRDEQS: E CMSRDEQS */ 25830002 */* P SAVE REGS */ 25910002 SPACE 2 25920002 CMSRDEQS DC 0H'0' 25922002 ST REG0,PSALKR0 SAVE CALLERS REG 0 @Z40FPXJ 25930040 ST REG1,PSALKR1 SAVE CALLERS REG1 @Z40FPXJ 25933040 ST REG14,PSALKR14 SAVE CALLERS REG 14 @Z40FPXJ 25940040 ST REG15,PSALKR15 SAVE CALLERS REG 15 @Z40FPXJ 25941040 CMSRDQCS DS 0H @Z40FPXJ 25946140 CDS REG6,REG8,ZERO(REG11) DEQUE CHAIN @Z40FPXJ 25947140 BNZ CMSRDQCS UNSUCCESSFUL, TRY AGN @Z40FPXJ 25954140 NI PSACLHS+3,ALLONES-CMS UPDATE STRING @Z40FPXJ 25961140 CMSRELNC DS 0H @Z40FPXJ 25968140 L REG1,CASCB PICK UP ASCB ACRONYM @Z40FPXJ 25975140 C REG1,ZERO(REG7) IS IT AN ASCB @Z40FPXJ 25976140 BE CMSRASCB YES GO DEQUE ASCB @Z40FPXJ 25982140 USING SRBSECT,REG7 @Z40FPXJ 25989140 LR REG1,REG7 SAVE SRB ADDRESS @Z40FPXJ 25990140 L REG7,SRBFLNK GET NEXT ELEMENT @Z40FPXJ 25992140 SCHEDULE SRB=(REG1) SCHED SRB @Z40FPXJ 25996140 LTR REG7,REG7 IS Q EMPTY @Z40FPXJ 26010140 BZ CMSRDEX YES, DONE @Z40FPXJ 26017140 B CMSRELNC NO, GET NEXT ELEMENT @Z40FPXJ 26024140 CMSRASCB DS 0H @Z40FPXJ 26031140 DROP REG9 26034140 USING ASCB,REG7 @Z40FPXJ 26038140 L REG4,ASCBCMSF @ZM40338 26041140 L REG6,INTERTID GET INTERRUPT ID @Z40FPXJ 26045140 ST REG6,ASCBLOCK STORE IT IN LOCK @Z40FPXJ 26052140 SPACE 2 @Z40FPXJ 26066140 */* P FREE LOCK AND UPDATE STRING */ @Z40FPXJ 26073140 */* CMSRELNC: D (YES,CMSRASCB,NO,) IS ELEMENT ASCB */ @Z40FPXJ 26080140 */* P SCHEDULE SRB */ @Z40FPXJ 26087140 */* D (NO,CMSRDEX,YES,CMSRELNC) ANY MORE ELEMENTS */ @Z40FPXJ 26094140 */* CMSRASCB: P PUT INTERRUPT ID IN LOCAL LOCK */ @Z40FPXJ 26101140 SPACE 2 26540002 LA REG1,ZERO(REG7) ASCB ADDR IN REG1 @Z40FPXJ 26550040 LH REG0,ASCBAFFN-ASCB(REG1) GET AFFINITY MASK 26551002 C REG0,NOCPUAFF TEST FOR AFFN SPECIFIED 26552002 BE CMSRDMS1 NO AFFINITY SPECIFIED 26553002 LCR REG1,REG1 INDICATE AFFINITY TO MS 26554002 CMSRDMS1 DC 0H'0' 26555002 SPACE 2 @Z40FPXJ 26555140 */* CMSRAOLD: S IEAVEMS0 MEMORY SW */ @Z40FPXJ 26555740 SPACE 2 @Z40FPXJ 26555940 CMSRAOLD DS 0H @Z40FPXJ 26559340 L REG15,AMEMSW ADDR OF MEMORY SWITCH 26560002 BALR REG14,REG15 INVOKE MEMORY SWITCH 26570002 */*CMSRDNMS: D (YES,CMSRELNC,NO,) ANY MORE ELEMENTS? */ @Z40FPXJ 26587040 SPACE 2 26600002 CMSRDNMS DC 0H'0' 26610002 LR REG7,REG4 RESTORE ASCB PTR @ZM40338 26613040 LTR REG7,REG7 IS THIS THE LAST ELE @Z40FPXJ 26620040 BNZ CMSRELNC MORE ELEMENTS @Z40FPXJ 26625040 SPACE 2 26640002 */*CMSRDEX: P RESTORE REGS */ 26780002 */* R RETURN */ 26790002 SPACE 2 26800002 CMSRDEX DC 0H'0' 26810002 L REG0,PSALKR0 RESTORE CALLER'S REG 0 @Z40FPXJ 26820040 L REG1,PSALKR1 RESTORE CALLER'S REG 1 @Z40FPXJ 26823040 L REG14,PSALKR14 RESTORE CALLER REG 14 @Z40FPXJ 26830040 L REG15,PSALKR15 RESTORE CALLER REG 15 @Z40FPXJ 26831040 SLR REG10,REG10 GET A ZERO RETURN CODE @Z40FPXJ 26835040 B CMSREXIT RETURN TO CALLER @Z40FPXJ 26840040 TITLE 'IEAVELK''S RELEASE MULTIPLE SPIN LOCKS ROUTINE' 26850002 SPACE 2 26860002 OFSTREG EQU 8 OFFSET REG FOR CLHT & OTHER 26870002 CLHSREG EQU 11 REG TO MANIPULATE CLHS 26880002 LOCKWREG EQU 7 REG TO CONTENT LOCK ADDR 26890002 ALCKATAB EQU 12 TAB OF ADDR OF LOCK ADDR 26900002 NZNCARRY EQU 4 MASK VALUE 26902002 ZNOCARRY EQU 8 MASK VALUE 26904002 ZCARRY EQU 2 MASK VALUE 26906002 SPACE 2 26910002 */*RELGS: E RELGS */ 26910402 SPACE 2 26912002 RELGS DC 0H'0' 26914002 ENTRY RELGS 26916002 USING *,BASER13 26918002 SPACE 2 26918402 */* P SAVE CALLER'S REGS */ 27044402 SPACE 2 27044502 STM REG6,REG10,PSALKR6 SAVE CALLERS REGISTERS 27044602 SPACE 2 27044702 */* P SAVE RELEASE STRING VALUE */ 27046402 SPACE 2 27047202 LR REG6,CLHSREG SAVE RELEASE STRING VALUE 27049602 SPACE 2 27049702 */* P TURN OF SETLOCK ACTIVE BIT */ 27070002 SPACE 2 27080002 OI PSASUP1,PSALOCK SETLOCK ACTIVE INDICATOR 27090002 SPACE 2 27100002 */* P SET 'CS' COMPERAND TO ZERO */ 27150002 SPACE 2 27160002 LA ZERORG10,ZERO FULLWORD OF ZEROS FOR COMPARE 27170002 SPACE 2 27220002 */* P INIT LOOP TO CHECK RELEASE STRING */ 27230002 SPACE 2 27240002 SR OFSTREG,OFSTREG INIT INDEX REGISTER TO ZERO 27250002 SLL CLHSREG,30-NBSPIN SHIFT DISP BIT HIGH ORDER 27280002 SPACE 2 27290002 */*RGSNEXT: P PREPARE CHECK OF NEXT LEVEL */ 27300002 SPACE 2 27310002 RGSNEXT DC 0H'0' 27320002 ALR CLHSREG,CLHSREG FORCE HIGH BIT OUT:CARRY IF 1 27330002 SPACE 2 27340002 */* D (YES,RGSREL,NO,) IS A LOCK OF THIS LEVEL HELD? */ 27350002 */* D (NO,RGSOUT,YES,RGSINCR) ANY LOCK HELD AT LOWER LEVEL? */ 27360002 SPACE 2 27370002 BC NZNCARRY,RGSINCR LOCKS HELD BUT NOT THIS LEVEL 27390002 * COND. NEVER HAPPENS: REG NEVER 27406002 * NULL AT ENTRY AND THEN GOES 1ST 27408002 * THRU ZERO+CARRY WHICH EXIT AT 27408402 * END OF PROCESSING TO 'RGSOUT'. 27408802 SPACE 2 27410002 */*RGSREL: P OBTAIN LOCKWORD ADDR THRU LOCK INTFCE TAB */ 27420002 SPACE 2 27430002 L LOCKWREG,ZERO(OFSTREG,ALCKATAB) ADDR OF LOCK ADDR 27440002 L LOCKWREG,ZERO(LOCKWREG) ADDR OF LOCKWORD 27450002 SPACE 2 27460002 */* P RELEASE LOCK */ 27470002 SPACE 2 27490002 ST ZERORG10,ZERO(LOCKWREG) PLACE ZEROS IN LOCK 27500002 SPACE 2 27570002 */* P UPDATE CPU LOCKS HELD TABLE ENTRY */ 27580002 SPACE 2 27590002 ST ZERORG10,PSACLHT(OFSTREG) STORE ZERO IN CLHT ENTRY 27610002 SPACE 2 27620002 */* D (NO,RGSOUT,YES,) MORE LOCKS TO RELEASE? */ 27620402 SPACE 2 27622002 BC ZCARRY,RGSOUT NO MORE LOCKS:EXIT FROM LOOP 27626002 * NOTE: CHK STILL ON ALR RETCODE 27626402 SPACE 2 27628002 */*RGSINCR: P (,RGSNEXT) INCREMENT INDEX FOR CLHT */ 27630002 SPACE 2 27640002 RGSINCR DC 0H'0' 27650002 LA OFSTREG,FOUR(OFSTREG) INCREMENT TO NEXT CLHT OFFSET 27660002 B RGSNEXT TEST NEXT BIT IN STRING 27670002 SPACE 2 27680002 */*RGSOUT: P UPDATE CPU LOCKS HELD STRING */ 27690002 SPACE 2 27700002 RGSOUT DC 0H'0' 27710002 X REG6,PSACLHS RESET ALL RELEASED LOCKS BITS 27732002 ST REG6,PSACLHS STORE NEW STRING 27740002 SPACE 2 27750002 */* P RESTORE REGS */ 27750402 SPACE 2 27750802 LM REG6,REG10,PSALKR6 RESTORE CALLER'S REGISTERS 27751202 SPACE 2 27751602 */* P TURN OFF SETLOCK ACTIVE INDICATOR */ 27751702 SPACE 2 27751802 NI PSASUP1,LOCKNACT TURN OFF LOCK ACTIVE BIT 27751902 SPACE 2 27755602 */* D (YES,RGSRETDS,NO,) RETURN IN DISABLED STATE? */ 27759302 SPACE 2 27759402 TM PSAMPSW,ENABLE CHECK RETURN DISABLED 27759502 BZR RETURN BRANCH IF YES 27759602 SPACE 2 27759702 */* D (YES,RGSRETDS,NO,) SYS. DISABLED INDICATOR ON? */ 27759802 SPACE 2 27763002 L REG12,SUPMASK MASK TO CHECK SUP CTRL BITS 27766702 N REG12,PSASUPER ZERO REG IF ONLY SETLOCK BIT ON 27770402 BNZR RETURN RELEASE DISABLED 27774102 SPACE 2 27777802 */* D (YES,RGSRETDS,NO,) SOME SPIN LOCKS STILL HELD? */ 27781502 SPACE 2 27785202 LA REG12,FRSTSPIN MASK TO CHK FOR MORE SPIN LOCKS 27788902 CL REG12,PSACLHS ARE THERE MORE? 27791302 BNHR RETURN YES: ELEASE DISABLED 27792602 SPACE 2 27796302 */* P TURN ON ENABLE BITS IN MODEL PSW */ 27850002 SPACE 2 27860002 STOSM PSAMPSW,ENABLE ENABLE FOR IO & EXT 27880002 SPACE 2 27890002 */*RGSRETDS: P BR 14 TO RETURN DISABLE */ 28130002 */* R RETURN */ 28140002 SPACE 2 28150002 RGSRETDS DC 0H'0' 28152002 BR RETURN RETURN TO CALLER 28160002 SPACE 2 28162002 */*STLKAB73: P ABEND CODE SYSTEM 073 HIERARCHY VIOLATION */ 28176002 */* P OR NON-TCBIRB OR SRB CALLER */ 28176402 */* P TURN OFF SETLOCK ACTIVE INDICATOR */ 28176502 */* P ABEND SVC */ 28176602 */* R ABEND */ 28177702 SPACE 2 28178102 SUSPAB73 NI PSASUP3,ALLONES-PSAULCMS SETLOCK NOT ACTIVE @ZA28255 28178540 STLKAB73 DC 0H'0' 28178640 NI PSASUP1,LOCKNACT TURN OFF SETLOCK ACTIVE BIT 28178740 ABEND X'073',DUMP,,SYSTEM ABEND THE CALLER 28179040 TITLE 'IEAVELK''S WINDOW SPIN ROUTINE' 28179740 *********************************************************************** 28180002 * WINDOW SPIN ROUTINE - THIS ROUTINE WILL ENABLE FOR EMERGENCY * 28190002 * SIGNAL AND MALFUNCTION ALERT EXTERNAL INTERRUPTS, IMMEDIATELY* 28200002 * DISABLE AND TEST TO SEE IF ACR WAS ACTIVED DURING THE ENABLED* 28210002 * PERIOD. IF ACR WAS ACTIVATED, THE LOCK WILL BE COMPARED WITH * 28220002 * THE FAILING CPU ID TO DETERMINE IF FAILING CPU OWN THE LOCK * 28230002 * OR A HIGHER LOCK. IN EITHER CASE ACR WILL BE INVOKED * 28240002 *********************************************************************** 28250002 SPACE 2 28260002 */*WINDSPIN: E WINDSPIN */ 28270002 SPACE 2 28280002 ENTRY IEAVELKW @Z40FPXJ 28285040 WINDSPIN DC 0H'0' 28290002 IEAVELKW DS 0H @Z40FPXJ 28292040 USING *,SPINRTNR EST. SPIN ROUTINES ADDRESSABLTY 28300002 SPACE 2 28310002 */* P TURN ON LOCK'S SPIN INDICATOR FOR EXT FLITH */ 28320002 SPACE 2 28330002 OI LCCASPN1,LCCALOCK LOCK IN SPIN ROUTINE 28340002 WINDLOOP DS 0H @Z40FPXJ 28340540 CL ALECLHT,MASKSALC IS THIS SPN FOR SALLOC @Z40FPXJ 28341240 BE WINDSALC YES, SET SMALL COUNT @Z40FPXJ 28341940 L REG5,LOOPCTN NO, SET HIGH COUNT @Z40FPXJ 28342640 B WINDSPNI GO SPIN FOR LOCK @Z40FPXJ 28343340 WINDSALC DS 0H @Z40FPXJ 28344040 L REG5,LOOPSALC SET LOW CNT FOR SALLOC @Z40FPXJ 28344740 WINDSPNI DS 0H @Z40FPXJ 28345440 L REG10,ZERO(LKADDR11) CHECK IF LOCK AVAIL @Z40FPXJ 28346140 LTR REG10,REG10 @Z40FPXJ 28346840 BNZ WINDBCT NO, DECRMENT SPIN CNT @Z40FPXJ 28347540 NI LCCASPN1,LOCKNSPN LOCK OUT OF SPIN RTN @Z40FPXJ 28348240 BR MNLRETRN RETURN TO MAINLINE @Z40FPXJ 28348940 WINDBCT DS 0H @Z40FPXJ 28349640 BCT REG5,WINDSPNI CNT>1 CONTINUE LOOP @Z40FPXJ 28350340 */*WINDLOOP: D (YES,WINDSALC,NO,) IS SPIN FOR SALLOC */ @Z40FPXJ 28351040 */* P (,WINDSPNI) SET COUNT='100'X */ @Z40FPXJ 28351740 */* WINDSALC: P SET COUNT='05'X */ @Z40FPXJ 28352140 */* WINDSPNI: D (YES,,NO,WINDLP) LOCK AVAIL? */ @Z40FPXJ 28353140 */* P TURN OFF SPIN BIT */ @Z40FPXJ 28353840 */* R RETURN TO MAINLINE */ @Z40FPXJ 28354540 */*WINDLP: P DECREMENT COUNT BY 1 */ @Z40FPXJ 28355240 */* D (YES,,NO,WINDSPNI) TIME TO OPEN WINDOW */ @Z40FPXJ 28355940 */* P SAVE CR0 IN PSACR0 & LCCALCR0 */ 28360002 */* P MODIFY CR0 TO ENABLE MFA & ES */ 28370002 */* P ENABLE EXT & INT SUMM MASK BIT IN PSW */ 28380002 */* P DISABLE EXT. INT. SUMM. MASK IN PSW */ 28390002 */* P LOAD CR0 FROM PSACR0 */ 28400002 SPACE 2 28410002 WINDOW LCCALCR0 ENABLE/DISABLE FOR EMS AND MFA 28420002 SPACE 2 28430002 */* P TURN OFF SPIN INDICATOR */ 28440002 SPACE 2 28450002 NI LCCASPN1,LOCKNSPN LOCK OUT OF SPIN ROUTINE 28460002 SPACE 2 28470002 */* D (YES,,NO,WINDSPIN) ACR ACTIVE IND ON? */ @Z0FPXJ 28480040 SPACE 2 28490002 TM LCCADSF1,LCCAACR IS ACR IN PROCESS 28500002 BZ WINDSPIN NO ACR RETN TO SPN LP @Z40FPXJ 28510040 SPACE 2 28520002 */* P SET FAILING CPU = OTHER CPU */ 28530002 SPACE 2 28540002 * CODE FOR SETLOCK REQUEST BY FAILING CPU ON GOOD CPU 28550002 L REG10,LCCADCPU GET FAILING CPU'S LOGICAL CCA 28560002 SPACE 2 28570002 */* D (YES,WINDFCPU,NO,) LCCA= RECOVERYING CPU? */ 28580002 SPACE 2 28590002 CR LCCAPTR,REG10 IS REQUEST BY FAILING CPU 28600002 BNE WINDFCPU GOOD CPU REQUESTING LOCK 28610002 SPACE 2 28620002 */* P SET RECOVERYING CPU= OTHER CPU */ 28630002 SPACE 2 28640002 L REG10,LCCARCPU RECOVERYING CPU BECOMES OTHER 28650002 SPACE 2 28660002 */*WINDFCPU: P COMPARE CPUID OF OTHER CPU WITH CPUID OF LOCK */ 28670002 SPACE 2 28680002 WINDFCPU DC 0H'0' TEST FOR OTHER CPU OWNING LOCKS 28690002 DROP REG8 REG10 IS NEW LCCA BASE 28700002 USING LCCA,REG10 EST. NEW LCCA ADDRESSABILITY 28710002 LH REG5,LCCACPUA GET OTHER CPU'S LOGICAL ADDR 28720002 SPACE 2 28730002 */* D (YES,WINDACR,NO,) CPUIDS EQUAL? */ 28740002 SPACE 2 28750002 C REG5,ZERO(LKADDR11) DOES OTHER CPU OWN LOCK? 28760002 BE WINDACR OTHER CPU OWNS LOCK CALL ACR 28770002 SPACE 2 28780002 */* D (YES,,NO,WINDEXIT) OTHER CPU OWNS HIGHER LOCK? */ 28790002 SPACE 2 28800002 CL ALECLHT,LCCACRLC DOES OTHER CPU OWN HIGHER LK? 28810002 BL WINDEXIT OTHER CPU DOES NOT 28820002 SPACE 2 28830002 */*WINDACR: S ACRLM:CALL RTM TYPE=ACRLM, CCA=(1) */ 28840002 SPACE 2 28850002 DROP REG10 REG 10 NOT REQUIRED FOR LCCA 28860002 USING LCCA,LCCAPTR REESTABLISH REG8 AS LCCA BASE 28870002 WINDACR DC 0H'0' 28880002 CALLRTM TYPE=ACRLM,CCA=(LCCAPTR) INVOKE ACR 28890002 SPACE 2 28900002 */*WINDEXIT: R RETURN */ 28910002 SPACE 2 28920002 WINDEXIT DC 0H'0' 28930002 BR MNLRETRN RETURN TO CALLER 28940002 ENTRY IEAVELKE @YM04039 28943002 IEAVELKE DS 0H END OF LOCK RTN @YM04039 28946002 */*IEAVSPCR: E COMMON SUSPEND ROUTINE ENTRY POINT */ 28950002 */* HEADER 28960002 */* IBM CONFIDENTIAL 28962002 */* 28964002 */* 28966002 */* SECTION: 3.1.7.14 28968002 */* SETLOCK ROUTINES 28968402 */* PAGE # */ 28968802 ENTRY IEAVSPCR 28969202 IEAVSPCR DC 0H'0' 28969602 *********************************************************************** 28969702 * IEAVSPCR IS A COMMON SUSPEND ROUTINE AVAILABLE TO THE LOCK * 28969802 * MANAGER AND THE PAGE SUSPEND PROCESSOR WHEN SUSPENDING A SRB * 28969902 * OR A LOCALLY LOCKED TASK. THIS ROUTINE WILL CALL THE JOB * 28973202 * STEP TIMING SUBROUTINE IN THE DISPATCHER TO COMPLETE THE * 28975202 * STATUS SAVING FUNCTION. DISPATCHER'S RECOVERY ROUTINE WILL * 28975602 * ALSO CALL THIS SUBROUTINE WHEN SAVING A LOCALLY LOCKED TCB'S * 28976002 * STATUS. * 28976402 * INPUT TO THIS ROUTINE IS AS FOLLOWS: * 28976502 * REGISTERS: R7 - LCCA ADDRESS * 28976602 * R8 - ASCB ADDRESS * 28979902 * R12 - IEAVSPCR ENTRY POINT ADDRESS * 28981902 * R15 - RETURN ADDRESS OF CALLER * 28982302 * R1 - 0 - (SUSPEND A LOCALLY LOCKED TASK) * 28982702 * - ADDRESS OF SRB - (SUSPEND A SRB) * 28983102 *********************************************************************** 28983202 * REGISTER EQUATES * 28983302 R0 EQU 0 REG 0 28986602 R1 EQU 1 REG 1 28988602 R2 EQU 2 REG 2 28989002 R3 EQU 3 REG 3 28989402 R4 EQU 4 REG 4 28989802 R6 EQU 6 REG 6 28989902 R7 EQU 7 REG 7 28990002 R8 EQU 8 REG 8 28993302 R9 EQU 9 REG 9 28995302 BASER12 EQU 12 BASE REGISTER 28995702 RE EQU 14 REG 14 28996102 R14 EQU 14 REG 14 28996502 RF EQU 15 REG 15 ZM02352 28996603 R15 EQU 15 REG 15 28997803 DSL0 EQU 0 DISPLACEMENT VALUE 28998803 DSL1 EQU 1 DISPLACEMENT VALUE 28999803 DSL2 EQU 2 DISPLACEMENT VALUE 28999903 DSCC7 EQU 7 DISPLACEMENT VALUE 29000903 XFF EQU X'FF' MASK VALUE 29002902 SPCRLLHI EQU 1 LOCAL LOCK HELD MASK 29004902 SPCRCMSI EQU 2 CMS LOCK HELD BIT 29005302 USING *,BASER12 29005702 USING LCCA,R7 29005802 USING ASCB,R8 29005902 USING PSA,0 29006102 SPACE 2 29006202 */* D (YES,SPCRSRBS,NO,) IS SRB TO BE SAVED? */ 29006403 SPACE 2 29006503 LTR R1,R1 IS THIS A SUSPENDED SRB? 29007403 BNZ SPCRSRBS PROCESS SRB WHOSE ADDR IS IN R1 29008203 SPACE 2 29008603 */* P GET IHSA ADDRESS */ 29009003 SPACE 2 29010003 L R3,ASCBASXB ASXB ADDRESS 29010503 DROP REG5 29010740 USING ASXB,R3 29011003 L R3,ASXBIHSA IHSA ADDRESS 29011503 DROP R3 29012003 USING IHSA,R3 29012603 SPACE 2 29013203 */* P STORE FLOATING POINT REGISTERS */ 29014203 SPACE 2 29015202 STD R0,IHSAFPR0-IHSA(R3) * STORE 29015303 STD R2,IHSAFPR2-IHSA(R3) * FLOATING 29015503 STD R4,IHSAFPR4-IHSA(R3) * POINT 29016403 STD R6,IHSAFPR6-IHSA(R3) * REGISTERS. 29016803 SPACE 2 29017403 */* P SAVE PSATNEW AND PSATOLD */ 29018103 SPACE 2 29018603 L R2,PSATNEW * STORE 29019103 L RE,PSATOLD * PSATNEW 29020103 ST R2,IHSANTCB-IHSA(R3) * AND 29020703 ST RE,IHSAOTCB-IHSA(R3) * PSATOLD 29021303 SPACE 2 29021903 */* D (NO,SPCRNTME,YES,) IS THERE A TCB? */ 29022902 SPACE 2 29024902 LTR RE,RE TEST FOR TCB ADDRESS. 29026902 BZ SPCRNTME NO. BYPASS TIMER TESTS. 29027902 SPACE 2 29029302 */* D (NO,SPCRNTME,YES,) IS THERE A TQE FOR THIS TCB? */ 29029702 SPACE 2 29029802 USING TCB,RE TCB ADDRESSABILITY. 29029902 L R2,TCBTME TQE ADDRESS FROM TCB. 29030902 LTR R2,R2 IS THERE A TQE? 29031902 BNH SPCRNTME NO. BYPASS TIMER SETTING. 29032902 DROP RE DROP TCB ADDRESSABILITY. 29033902 SPACE 2 29035402 */* D (NO,SPCRNTME,YES,) IS THIS CPU'S TIMER OK? */ 29035802 SPACE 2 29035902 L R1,PSAPCCAV PCCA ADDRESS. 29036402 USING PCCA,R1 PCCA ADDRESSABILITY. 29036702 TM PCCAINTE,PCCANUIN IS THE CPU TIMER OK? 29037002 DROP R1 29037302 BO SPCRNTME NO. BYPASS TIMER SETTINGS. 29037402 SPACE 2 29037902 */* P SAVE CPU INTERVAL TIMER INTO IHSA */ 29038302 SPACE 2 29038702 STPT IHSACPUT-IHSA(R3) SAVE CPU INTERVAL TIMER VALUE 29038802 SPACE 2 29039002 */* P SET CPU TIMER TO HIGH VALUE */ 29041002 SPACE 2 29041402 SPT SPCRHITM SET CPU INT TIMER TO X'7F---F' 29041502 SPACE 2 29042302 */*SPCRNTME: P SAVE LOCAL SUPERVISOR'S FRR STACK */ 29042402 SPACE 2 29042502 SPCRNTME DC 0H'0' 29042602 LR R9,R15 SAVE R15 VALUE ACROSS MVCL 29042702 LA R2,IHSAFRRS-IHSA(R3) OBTAIN FRR SAVE AREA ADDR 29042802 L RE,PSANSTK OBTAIN NORMAL STACK ADDRESS 29043003 L R3,FRRSCURR-FRRS(RE) CURRENT ENTRY @ZM02352 29043103 L RF,FRRSELEN-FRRS(RE) LENGTH OF CURRENT ENTRY @ZM02352 29053603 AR R3,RF ADDR OF LAST BYTE @ZM02352 29053703 SR R3,RE LENGTH OF STACK TO SAVE @ZM02352 29053803 LA R15,DSL0(R3) DUPLICATE LENGTH 29054003 MVCL R2,RE MOVE THE NORMAL STK TO SAVE AREA 29054203 LR R15,R9 RESTORE R15 VALUE 29054503 SPACE 2 29055003 */*SPCRJSTR: P SET UP FOR CALL TO JST RTN */ 29055403 */* S DSJST:CALCULATE JOB STEP TIME */ 29056003 SPACE 2 29056103 SPCRJSTR DC 0H'0' 29056803 L R1,SPCRJSTA DISP JST SUB RTN EP 29057203 BALR RE,R1 GO TO CALCULATE JOB STEP TIME 29057603 * DSJST USES REGISTERS 0,1,2,3,9 AND 14. 29058503 SPACE 2 29059003 */* D (NO,SPCRNCMS,YES,) IS THE CMS LOCK HELD? */ 29059403 */* P SET ASCBCMSH BIT */ 29059803 SPACE 2 29060403 SETLOCK TEST,TYPE=CMS,BRANCH=(NOTHELD,SPCRNCMS) 29060803 OI ASCBFLG1,ASCBCMSH SET CMS LOCK HELD BIT IN ASCB 29061203 SPACE 2 29061603 */*SPCRNCMS: D (NO,SPCRNOLK,YES,) IS THIS CPU ID IN LOCAL LOCK */ 29062303 SPACE 2 29062803 SPCRNCMS DC 0H'0' 29063503 LH R2,ASCBLOCK+DSL2 ID VALUE FROM THE LOCAL LOCK 29063903 CH R2,PSACPULA IS IT THE CURRENT CPU. 29064503 BC DSCC7,SPCRNOLK NO. RETURN 29065003 SPACE 2 29065503 */* D (YES,SPCRSRBM,NO,) IS THIS SRB MODE? */ 29065603 */* P DECREMENT ASCBCPUS COUNT */ 29066203 SPACE 2 29067002 TM LCCADSF2,LCCASRBM IS THIS SRB MODE? 29067103 BO SPCRSRBM SRB MODE, DON'T DECREMENT COUNT 29068003 L R1,ASCBCPUS GET NO. OF CPUS ACTIVE 29068403 SPCRCSLP DC 0H'0' 29068803 LR R2,R1 CUPLICATE NO. OF CPUS ACTIVE 29069203 BCTR R2,ZERO DECREMENT COUNT OF CPUS 29069703 CS R1,R2,ASCBCPUS UPDATE ASCBCPUS 29070203 BNZ SPCRCSLP COUNT HAS CHANGED REPEAT 29070703 SPACE 2 29071203 */*SPCRSRBM: P STORE SUSPEND ID INTO LOCAL LOCK */ 29071703 SPACE 2 29072503 SPCRSRBM DC 0H'0' 29072903 L R1,SPCRSPID YES. STORE SUSPEND ID 29073303 ST R1,ASCBLOCK INTO THE LOCAL LOCK. 29073703 SPACE 2 29074503 */*SPCRNOLK: P CLEAR PSATNEW AND PSATOLD FIELDS */ 29074703 SPACE 2 29075503 SPCRNOLK DC 0H'0' 29075903 SR R1,R1 ZERO THE STORE REG 29076503 ST R1,PSATNEW * CLEAR PSANEW 29076903 ST R1,PSATOLD * AND PSAOLD 29077303 SPACE 2 29077703 */* P CLEAR LOCAL AND CMS CPU LOCK HELD INDICATORS */ 29078503 SPACE 2 29078603 NI PSAHLHI+3,XFF-SPCRLLHI-SPCRCMSI CLEAR LOCK BITS 29079103 NI LCCADSF2,XFF-LCCASRBM-LCCAGSRB CLEAN UP SRB MODE 29079603 * INDICATORS 29080103 SPACE 2 29080603 DST110A DC 0H'0' *** TEST LABEL *** 29081103 */*DST110A: R RETURN */ 29081903 SPACE 2 29082403 BR R15 RETURN. 29082903 EJECT 29083403 SPCRSRBS DC 0H'0' 29084003 USING SRBSECT,R1 29084403 SPACE 2 29084803 */*SPCRSRBS: P SAVE FPRS IN SRB S A */ 29085503 SPACE 2 29085603 STD R0,SSRBFPR0 SAVE FPR 0 IN SRB SAVE AREA 29086103 STD R2,SSRBFPR2 SAVE FPR 2 IN SRB SAVE AREA 29086603 STD R4,SSRBFPR4 SAVE FPR 4 IN SRB SAVE AREA 29087103 STD R6,SSRBFPR6 SAVE FPR 6 IN SRB SAVE AREA 29087603 SPACE 2 29088103 */* P SAVE FRR STACK IN SRB S A */ 29088603 SPACE 2 29089203 LR R9,R15 SAVE R15 VALUE ACROSS MVCL 29089703 LA R2,SSRBFRRS OBTAIN FRR SAVE AREA ADDR 29090203 L RE,PSANSTK OBTAIN NORMAL STACK ADDRESS 29091203 L R3,FRRSCURR-FRRS(RE) CURRENT ENTRY @ZM02352 29092403 L RF,FRRSELEN-FRRS(RE) LENGTH OF CURRENT ENTRY @ZM02352 29092503 AR R3,RF ADDR OF LAST BYTE @ZM02352 29092603 SR R3,RE LENGTH OF STACK TO SAVE @ZM02352 29092703 LA R15,DSL0(R3) DUPLICATE LENGTH 29092803 MVCL R2,RE MOVE THE NORMAL STK TO SAVE AREA 29093103 LR R15,R9 RESTORE R15 VALUE 29093403 SPACE 2 29093503 */* P SAVE ASCB ADDR FROM PSAOLD IN SRB */ 29093703 SPACE 2 29094303 ST R8,SRBASCB SAVE ASCB ADDR IN SRB @ZA18876 29094640 SPACE 2 29095703 */* P SAVE CPU AFFINITY & PURGE ASID/TCB FROM LCCA */ 29096203 SPACE 2 29096603 MVC SRBFLC,LCCASRBF MOVE CPU AFFINITY, ASID & TCB 29098403 SPACE 2 29098803 */* P MOVE REG 3 FROM PSA TO SRB SA */ 29099203 SPACE 2 29100003 LA R3,SSRB FIRST BYTE OF SRB SAVE AREA 29100503 SPACE 2 29101003 */* P PLACE ADDR OF SRB SA IN SRB */ 29101503 SPACE 2 29102003 ST R3,SRBSAVE SAVE SRB SAVE AREA ADDR IN SRB 29102403 SPACE 2 29102803 */* P EST. PRIORITY LELEL - NONQ FOR THE SRB */ 29103203 SPACE 2 29104002 LA R3,SRBPNONQ ESTABLISH X'04' 29104503 STC R3,SRBPRIOR EST. THIS SRB AS A NONQ LEVEL 29104903 SPACE 2 29105303 */* P ESTABLISH RMTR FOR SRB */ 29105703 SPACE 2 29106303 L R2,ARMTRRTN RMTR ROUTINE FOR PURDGE DQ 29106603 ST R2,SRBRMTR SAVE RMTR ADDR IN SRB 29107503 SPACE 2 29108003 */* D (NO,SPCRJSTR,YES,) IS LOCAL LOCK HELD */ 29108503 SPACE 2 29109003 SETLOCK TEST,TYPE=LOCAL,BRANCH=(NOTHELD,SPCRJSTR) 29109503 SPACE 2 29110003 */* P (,SPCRJSTR) TURN ON LOCAL LOCK HELD BIT IN SRB */ 29110503 SPACE 2 29111003 OI SSRBFLG1,SSRBLLH INDICATE LOCAL LOCK HELD 29111503 B SPCRJSTR PERFORM JST AND CPU CLEAN UP 29112003 DS 0D 29112503 SPCRHITM DC X'7FFFFFFFFFFFFFFF' HIGH CPU TIMER VALUE> 29113003 SPCRSPID DC X'7FFFFFFF' SUSPEND ID FOR LOCAL LOCK 29113503 ARMTRRTN DC V(IEAVEFRE) SUSPEND SRBS' RMTR RTN 29114003 SPCRJSTA DC V(DSJSTCSR) ENTRY TO JOB STEP TIMING RTN 29114503 EJECT 29115003 *********************************************************************** 29115503 ***** LOCK MANAGER RESOURCE CLEAN-UP ON MEMORY TERMINATION ***** 29116003 *********************************************************************** 29116503 SPACE 2 29117003 */*IEAVELRM: E RESOURCE MANAGER */ 29117503 SPACE 2 29118003 ENTRY IEAVELRM 29118503 IEAVELRM DS 0H 29119003 SPACE 2 29119503 */* P SAVE REGS USED */ 29120003 */* P GET SUSPEND QUEUE HEADER */ 29120503 SPACE 2 29121003 STM REG14,REG12,TWELVE(REG13) SAVE AREA PROVIDED BY MEM TERM 29121503 BALR REG9,ZERO ESTABLISH ADDRESSABILITY 29122003 USING *,REG9 29122503 L REG2,ZERO(REG1) ADDR OF MEM TERM'S PARM LIST 29123003 L REG6,RMPLASCB-RMPL(REG2) GET ADDR OF TERMINATING MEMORY 29123503 L REG5,ASCBLSQH-ASCB(REG6) LOCAL LK SPND Q HEADER @Z40FPXJ 29124040 SPACE 2 29124503 */*LRMSQCHK: D (NO,LRMSQEND,YES,) ANY SRBS ON QUEUE? */ 29125003 SPACE 2 29125503 LRMSQCHK DC 0H'0' 29126003 LTR REG5,REG5 HAS LAST ELEMENT ON QUEUE BEEN 29126503 * PROCESSED? 29127003 BZ LRMSQEND EXIT TO MEM TERM 29127503 SPACE 2 29128003 */* L SCHEDULE: SCHEDULE SRB TO LSMQ */ 29128503 SPACE 2 29129003 LA REG1,ZERO(REG5) PLACE SRB ADDRESS IN REG 1. 29129503 L REG5,SRBFLNK-SRB(REG5) GET NEXT SRB ON QUEUE IF ANY. 29130003 SCHEDULE SRB=(1) 29130503 SPACE 2 29131003 */* P (,LRMSQCHK) GO SEE IF ANY MORE */ 29131503 SPACE 2 29132003 B LRMSQCHK GO TEST FOR LAST SRB 29132503 SPACE 2 29133003 */*LRMSQEND: P RESTORE SAVED REGS */ 29133503 SPACE 2 29134003 LRMSQEND DC 0H'0' 29134503 LM REG14,REG12,TWELVE(REG13) RELOAD REGS 29135003 SPACE 2 29135503 */* P SET RC=0 */ 29136003 */* R RETURN TO CALLER */ 29136503 SPACE 2 29137003 LA REG15,ZERO SET RETURN CODE 29137503 BR REG14 RETURN 29138003 *********************************************************************** 29138503 ***** CONSTANTS & EXTERNAL ADDRESSES ***** 29139003 *********************************************************************** 29139503 ZEROS DC A(0) COMPARISON VALUE - FW OF ZEROS 29140003 LLUOBS DC A(LLUOBT) LOCAL UNCOND ADDR 29140503 GSLMUOBS DC A(GSLMUOBT) MULT UNCOND ADDR 29141003 GSLSUOBS DC A(GSLSUOBT) SINGLE UNCOND ADDR 29141503 GSLSDISB DC A(GSLSDISP) DISP LOCK RTN ADDR 29142003 ADISPLCK DC V(DISPLOCK) ADDRESS OF DISPATCHER LOCK 29142503 ASALCLCK DC V(SALCLOCK) ADDRESS OF SALLOC LOCK 29143003 ACMSLOCK DC V(CMSLOCK) ADDRESS OF CMS LOCK 29143503 LOCKASVT DC V(IEAVLKRR) SETLOCK FRR ADDRESS @ZA28255 29143740 SUPMASK DC AL1(255-PSALOCK),3AL1(255) MASK TO CHECK SUP BYTES 29144003 NOCPUAFF DC X'FFFFFFFF' MASK FOR NO CPU AFFINITY 29144503 INTERTID DC X'FFFFFFFF' INTERRUPT ID FOR LOCKWORD 29145003 ACMSSQH DC V(CMSSQH) CMS SPND Q SRB 1ST PTR @Z40FPXJ 29146040 * CMS REQUESTOR, NON-SRB MODE 29147503 SUSPNDID DC X'7FFFFFFF' SUSPEND ID FOR LOCKWORD 29148003 AIEA0DS DC V(IEA0DS) DISPATCHER'S NORMAL ENTRY 29148503 AMEMSW DC V(IEAVEMS0) MEMORY SWITCH ADDRESS 29149003 LOOPCTN DC X'00000100' SPIN COUNT @Z40FPXJ 29149140 LOOPSALC DC X'00000005' SALLOC SPIN COUNT @Z40FPXJ 29149240 SRBCPID DC C'SRB',X'00' QUICKCELL CPID FOR SUSPENDED 29149503 * SRBS 29150002 CASCB DC C'ASCB' @Z40FPXJ 29155040 NOSUSPND DC XL8'00' COMPERAND TO DETERMINE IF 29160002 * SUSPEND QUEUES ARE EMPTY 29170002 LOCAL EQU 1 VALUE OF MASK FOR LOCAL LOCK 29180002 CMS EQU LOCAL*2 VALUE OF MASK FOR CMS LOCK 29190002 OPT EQU CMS*2 VALUE OF MASK FOR OPT LOCK 29200002 FRSTSPIN EQU OPT FIRST SPIN LOCK 29210002 TPACBDEB EQU OPT*2 VALUE OF MASK FOR TPACBDEB LOCK 29220002 TPDNCB EQU TPACBDEB*2 VALUE OF MASK FOR TPDNCB LOCK 29230002 TPNCB EQU TPDNCB*2 VALUE OF MASK FOR TPNCB LOCK 29240002 IOSLCH EQU TPNCB*2 VALUE OF MASK FOR IOSLCH LOCK 29250002 IOSUCB EQU IOSLCH*2 VALUE OF MASK FOR IOSUCB LOCK 29260002 IOSCAT EQU IOSUCB*2 VALUE OF MASK FOR IOSCAT LOCK 29270002 IOSYNCH EQU IOSCAT*2 VALUE OF MASK FOR IOSYNCH LOCK 29280002 SALLOC EQU IOSYNCH*2 VALUE OF MASK FOR SALLOC LOCK 29290002 ASM EQU SALLOC*2 VALUE OF MASK FOR ASM LOCK 29300002 DISP EQU ASM*2 VALUE OF MASK FOR DISP LOCK 29310002 FF EQU X'FFFF' HALFWORD OF ONES 29320002 MASKTAB DS 0F'0' MASKS FOR CLHS UPDATING(OBTAIN) 29330002 MASKDISP DC A(DISP) MASKS FOR CLHS UPDATING(OBTAIN) 29340002 DC A(ASM) MASKS FOR CLHS UPDATING(OBTAIN) 29349002 MASKSALC DC A(SALLOC) MASKS FOR CLHS UPDATING(OBTAIN) 29358002 DC A(IOSYNCH) MASKS FOR CLHS UPDATING(OBTAIN) 29367002 DC A(IOSCAT) MASKS FOR CLHS UPDATING(OBTAIN) 29376002 DC A(IOSUCB) MASKS FOR CLHS UPDATING(OBTAIN) 29385002 DC A(IOSLCH) MASKS FOR CLHS UPDATING(OBTAIN) 29394002 DC A(TPNCB) MASKS FOR CLHS UPDATING(OBTAIN) 29403002 DC A(TPDNCB) MASKS FOR CLHS UPDATING(OBTAIN) 29412002 DC A(TPACBDEB) MASKS FOR CLHS UPDATING(OBTAIN) 29421002 MASKLSPN EQU * LAST SPIN LOCK 29430002 DC A(OPT) MASKS FOR CLHS UPDATING(OBTAIN) 29439002 MASKCMS DC A(CMS) MASKS FOR CLHS UPDATING(OBTAIN) 29448002 DC A(LOCAL) MASKS FOR CLHS UPDATING(OBTAIN) 29457002 MASKTAB2 DS 0F'0' MASK FOR CLHS UPDATING(RELEASE) 29470002 MSK2DISP DC AL2(FF,FF-DISP) MASK FOR CLHS UPDATING(RELEASE) 29480002 DC AL2(FF,FF-ASM) MASK FOR CLHS UPDATING(RELEASE) 29490002 DC AL2(FF,FF-SALLOC) MASK FOR CLHS UPDATING(RELEASE) 29500002 DC AL2(FF,FF-IOSYNCH) MASK FOR CLHS UPDATING(RELEASE) 29510002 DC AL2(FF,FF-IOSCAT) MASK FOR CLHS UPDATING(RELEASE) 29520002 DC AL2(FF,FF-IOSUCB) MASK FOR CLHS UPDATING(RELEASE) 29530002 DC AL2(FF,FF-IOSLCH) MASK FOR CLHS UPDATING(RELEASE) 29540002 DC AL2(FF,FF-TPNCB) MASK FOR CLHS UPDATING(RELEASE) 29550002 DC AL2(FF,FF-TPDNCB) MASK FOR CLHS UPDATING(RELEASE) 29560002 DC AL2(FF,FF-TPACBDEB) MASK FOR CLHS UPDATING(RELEASE) 29570002 DC AL2(FF,FF-OPT) MASK FOR CLHS UPDATING(RELEASE) 29580002 DC AL2(FF,FF-CMS) MASK FOR CLHS UPDATING(RELEASE) 29590002 DC AL2(FF,FF-LOCAL) MASK FOR CLHS UPDATING(RELEASE) 29600002 NBSPIN EQU (MASKCMS-MASKDISP)/4 NUMBER OF SPIN LOCKS 29610002 SPACE 2 29640002 TITLE 'IEAVELK - SETLOCK - CVT EXPANSION' 29642002 CVT DSECT=YES,PREFIX=NO,LIST=YES 29644002 TITLE 'IEAVELK - SETLOCK - PSA EXPANSION' 29646002 IHAPSA 29648002 TITLE 'IEAVELK - SETLOCK - LCCA EXPANSION' 29648402 IHALCCA 29648802 TITLE 'IEAVELK - SETLOCK - PCCA EXPANSION' 29648902 IHAPCCA 29649002 TITLE 'IEAVELK - SETLOCK - ASCB EXPANSION' 29649202 IHAASCB 29649602 TITLE 'IEAVELK - SETLOCK - TCB EXPANSION' @Z40FPXJ 29650840 IKJTCB @Z40FPXJ 29651340 TITLE 'IEAVELK - SETLOCK - RB EXPANSION' @Z40FPXJ 29651840 IKJRB 29653202 TITLE 'IEAVELK - SETLOCK - CSD EXPANSION' 29655202 IHACSD 29655602 TITLE 'IEAVELK - SETLOCK - SSRB EXPANSION' 29656002 IHASSRB 29656402 TITLE 'IEAVELK - SETLOCK - IHSA EXPANSION' 29656502 IHAIHSA 29656602 TITLE 'IEAVELK - SETLOCK - ASXB EXPANSION' 29657702 IHAASXB 29658102 TITLE 'IEAVELK - SETLOCK - FRR EXPANSION' 29658502 IHAFRRS 29658602 TITLE 'IEAVELK - SETLOCK - WSAC EXPANSION' 29658702 IHAWSAVT CLASS=CPU 29658802 TITLE 'IEAVELK - SETLOCK - WSAG EXPANSION' 29661602 IHAWSAVT DSECT=YES,CLASS=GLOBAL 29663602 TITLE 'IEAVELK - SETLOCK - RMPL EXPANSION' 29664002 IHARMPL 29664102 IHARRRA UNCONDITIONAL LOCAL AND CMS 29664440 * LOCK REQUESTS CAUSE FRRS TO BE 29664840 * SET ACROSS THE GETMAINS AND 29665240 * FREEMAINS FOR SSRBS @ZA28255 29665640 */* FOOTING 29666440 */* 29667202 */* */ 29670002 */*IEAVELK: END SETLOCK */ 29680002 SPACE 2 29690002 END IEAVELK 29700002