.TITLE EXECUTIVE PATCH AREA .IDENT "V02.0" ; PATCH TO FORCE CHECKPOINTING OF TASK IN SUSPENDED STATE ; GTEPT0:: CMPB R4,K.RP(R5) ;IS TASK POTENTIALLY CHECKPOINTABLE? ;(REPLACEMENT) BLO 6$ ;NO--THEN NO MORE TASKS CAN BE BR 2$ ;YES--(BRANCH IF P1=P2 OR LESS) 1$: JMP @#.FCKPT+34 ;BACK TO MAIN CODE 2$: CMPB #TS.SUS,K.TS(R5);IS TASK SUSPENDED? BEQ 1$ ;YES--FORCE CHECKPOINTING JMP @#.FCKPT+14 ;GET NEXT ENTRY 6$: RETURN ; ; ; PATCH TO LEAVE TASK ON MRL IF IT IS IN SUSPEND STATE ; GTEPT1:: CMPB A.CS(R4),#TS.SUS;IS TASK SUSPENDED? BEQ 2$ ;YES--BRANCH MOV A.TD(R4),R1 ;GET STD ADDRES (REPLACEMENT) JMP @#.ACTK+22 ;BACK TO MAIN LINE 2$: MOV (R4),R4 ;GET NEXT "MRL" NODE CMP @T.RB(R3),R4 ;ANY ENTRIES LEFT? BNE GTEPT1 ;YES--BRANCH JMP @#.ACTK+10 ;NO TASKS REQUIRE MEMORY IN PARTITION ; ; PATCH TO .TSKRS (CALLED BY RESUME DIRECTIVE) ; TO ATTEMPT ACTIVATION OF TASK. ; GTEPT2:: MOVB #TS.RUN,A.CS(R4);CHANGE TASK STATUS TO RUN (REPLACEMENT) MOV R1,-(SP) ;SAVE REGS R1-R5 MOV R2,-(SP) MOV R3,-(SP) MOV R4,-(SP) MOV R5,-(SP) MOV A.PD(R4),R3 ;PICK UP TPD ADDRESS OF TASKTO RESUME CALL @#.ACTK ;ATTEMPT TASK ACTIVATION MOV (SP)+,R5 ;RESTORE REGS R5-R1 MOV (SP)+,R4 MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 CLC ;RETURN SUCESS CODE RETURN ;RETURN ; ; PATCH TO SUSPEND DIRECTIVDE ; TASK WILL CHECKPOINT ITSELF IF ENTRY ON MRL OF EQUAL ; PRIORITY IN A STATE OTHER THAN TS.SUS. ; GTEPT3:: MOVB #TS.SUS,A.TS(R0); SET TASK STATE TO SUSPEND BIT #SF.XC,S.FW(R4) ; IS TASK INSTALLED AS CHECKPOINTABLE? BNE 2$ ;NO--BRANCH BITB #AF.CD,A.TF(R0) ;IS CHECKPOINTING ENABLED? BNE 2$ ;NO--BRANCH MOV A.PD(R0),R4 ;CHECKPOINT IF POSSIABLE ADD #T.RF,R4 ;FIND THE TPD CMP (R4),R4 ;IS THERE AN ENTRY IN THE MRL? BEQ 2$ ; NO--BRANCH MOV (R4),R4 ;YES--TRY TO CHECKPOINT MOV A.PD(R4),R3 ;GET TPD ENTRY ADDRESS MOV A.RP(R4),R4 ;GET RUN PRIORITY JSR PC,@#.FCKPT ;FORCE CHECKPOINTING 2$: JMP @#.D.SUS+6 ;BACK TO MAINLINE SUSPEND .BLKW 20. ;PATCH SPACE .END