Trace: debug-shutdown-console-read.log Source: MPE-UMIT Shutdown starts in PROGEN's CONTROL-A loop [S09, 4352] [S09, 4364] TOS:=ATTACHIO(CONSOLELDEV,0,0,@BUF,0,-70,5,0,%401) [S09, 4365] DELB and CNT := -TOS is 00.155216 DELB,NEG [S09, 4367] LOG15(-CNT,@BBUF,CNT,15) is 00.155225 PCAL 54 [S09, 4403] OK := CONSSHUTDOWN(BP1) is 00.155376 PCAL 27 [S09, 2087] CONSSHUTDOWN [S09, 2181] SCAN PARMS WHILE %6440 is 00.161022 SCW 2 [S09, 2198] ATTACHIO(CONSOLELDEV,0,0,0,31,0,0,0,%11) is 00.161063 PCAL 53 [7,724] ******************************************************************************** -- in the later sources there is a merge line here: ABORTIO (CONSOLELDEV); <> this will abort the read BEFORE the ALL JOBS LOGGED OFF write is done! ******************************************************************************** [S09, 2199] EXCHANGEDB(JMATDST) is 00.161066 PCAL 75 [12,307] [S09, 2203] JMATJLIMIT := 0 is 00.161102 ZERO,NOP [S09, 2231] DELAY(5000D) is 00.161167 PCAL 107 [13,015] [S92, 4172] PROCEDURE DELAY(INTERVAL) is 00.110646 ADDS 2 [S92, 4193] TOS:=TIMEREQ(5,PCBPT,INTERVAL) is 00.110665 PCAL 171 [13,115] [S92, 4200] IMPEDE(0) is 00.110667 PCAL 67 [13,456] [S92, 4201] ENABLE is 00.110670 SED 1 [41,852, after 51 clock ticks] [S09, 2240] GENMSG(1,206,,,,,,,0) is 00.161215 PCAL 52 [42,331] -- this is the ALL JOBS LOGGED OFF message ** >>ATCD cmds: Output data is send | sync | 3577 [176,529] [S09, 2242] STOP'ALL'USERLOGS is 00.161217 PCAL 111 [177,875] [S09, 2244] IF LOGICAL (RESULT) THEN is 00.161220 LOAD Q-5 [178,273] [S09, 2253] LOG6 (*, *, *, 6) is 00.161235 PCAL 112 [178,280] [S09, 2256] MOVE STOPBUF(0) := (" ,STOP,RESET", %15 ) is 00.161253 MVB PB,3 [180,609] -- actually is MOVE STOPBUF := (" ,STOP, DEFER", %15) from MPE V-P -- STOPSPOOLERS (OUTPUTSPOOLER) 00.161256 BR P-365 [180,663] ** >>ATCD xfer: Channel 0 sync character sent [181,696] -- MOVE STOPBUF (9) := "DELETE" is 00.161270 MVB PB,3 [183,809] -- STOPSPOOLERS (INPUTSPOOLER) is 00.161273 BR P+1,I [183,833] [S09, 2261] SETSYSDB is 00.161276 PCAL 100 [185,511] [S09, 2264] WHILE S0 < NUMSTOPS DO is 00.161300 DUP,NOP [183,626] [S09, 2266] CURRENTSTOP := STOPS(S0) is 00.161304 LDD DB+304,X -- 1st stop is DEVREC (S08) -- stack params are %240, %20, %2 (PCBPT,WAKECODE,WAITFLAGS) -- STOPBIT is 2 -- sets 00.001300 to 020000 [S09, 2280] AWAKE (*, *, *) is 00.161334 PCAL 46 [185,668] NOTE: MPE V-P! [S92, 4081] PROCEDURE AWAKE (PCBPT,WAKECODE,WAITFLAGS) [S92, 4117] EVENTMASK:=WAKECODE&CSL(4) is 00.111270 LOAD Q-5 [185,732] -- EVENTMASK is %400 (JNK) [S92, 4125] IF (WAKEMASK LAND EVENTMASK) = 0 THEN is 00.111335 LOAD DB+4,X -- WAKEMASK is %2400 (IO + JNK) for read, %401 (JNK + MEM) for no read [S92, 4150] BEGIN <> is 00.111413 LOAD Q-1 [185,808] [S92, 4157] WAKEMASK:=WAKEMASK LAND TOS is 00.111433 LOAD DB+4,X -- WAKEMASK is %2000 (IO) for read, %1 (MEM) for no read [S92, 4157] THEN WAKEMASK.NONCRITEVENTFIELD:=0 is 00.111442 LOAD DB+4,X -- WAKEMASK is %0 for read, %1 (MEM) for no read [S92, 4162] THEN QUEUEPROC(X,DISPATCHINGQ,ENDOFCLASS) is 00.111457 PCAL 73 [185,887] -- parameters are (010534, 000001, 000000) [S92, 4163] IF WAITFLAGS <> 0 THEN is 00.111460 LOAD Q-4 [186,117] -- WAITFLAGS is 2 for read and no read [S92, 4168] WAIT(WAITFLAGS,NOINFO) is 00.111467 PCAL 71 [186,136] [S92, 3927] PROCEDURE WAIT(EVENTMASK,SPECIALINFO) is 00.111643 ADDS 4 [S92, 4052] EVENTFLAGS := 0 is 00.112130 ZERO,NOP [S92, 4060] ASMB (DISP) is 00.112157 DISP [186,288] -- dispatcher exit is 00.067710 IXIT [187,808] [S92, 4078] END <> is 00.112254 EXIT 2 [187,857] -- exit is from WAIT call in SYSIOPROC (SA8) [SA8, 3820] GOTO LOOP is 00.040305 BR P-21 [187,870] [SA8, 3807] @DITP := DEQUEUE(DLINK,IOPROCQN) is 00.040270 PCAL 41 [SA8, 3450] INTEGER PROCEDURE DEQUEUE -- the head of the queue is %002434 -- the next element in the queue is %177777 [SA8, 3808] X := @DITP is 00.040272 LOAD Q+1 [187,943] -- X is %002434 [SA8, 3812] AWAKEIO(DITP,IMPEDABLE) is 00.040300 PCAL 31 [187,957] [SA8, 3730] PROCEDURE AWAKEIO [SA8, 3757] ASMB( BR * +1, X) is 00.040320 BR P+1,X [187,999] -- X is 6, so branch is to CALLMNTR [SA8, 3793] ASMB( PCAL 0 ) is 00.040377 PCAL 0 [188,018] -- label is %101134, which is IOTERM0 / TERMIOM [S22, 728] PROCEDURE TERMIOM(DITP,FLAGS) is 01.017017 ADDS 52 -- DITP is %002434, FLAGS is 4 [S22, 1361] TOS := DITP is 01.017050 LOAD Q-5,I [188,121] -- TOS is %140600, so ACTIVE flag is not set [S22, 1393] IF <> THEN << USER REQUEST PENDING >> is 01.017105 BE P+7 -- RQSTATE is %44, FUNCTION is 0 [S22, 1433] IF = THEN GOTO CHKABORT is 01.017171 LDX Q+62,I [188,199] -- TOS is 0 [S22, 1463] CHKABORT: is 01.017252 LDX Q+56 -- @IOQP is %013544 [S22, 1470] IF QMISCPL.NOSTOP THEN GOTO RSWITCH is 01.017255 LOAD Q+57,I -- NOSTOP is 1 [S22, 1557] DMONITOR(DITP,%10,QPAR1P CAT IOQP(QFUNC) (0:9:7), -1) is 01.017534 PCAL 31 [188,243] [S55, 1215] PROCEDURE DMONITOR(DITP,ID,P1,P2) is 00.064724 LDXI 41 [188,263] -- DITP is %002434, ID is %10, P1 is 1, P2 is %177777 [S55, 1226] IF = THEN RETURN -- caller is not monitored, so DMONITOR returns [S22, 1572] ASMB( LOAD RQTABLE,X; ADAX; BR RQTABLE,X) is 01.017561 LOAD Q+46 -- X is 4, so branch is to STOPPEDL [S22, 1712] ASMB( LOAD STOPTAB,X; ADAX; BR STOPTAB,X) is 01.020167 LOAD P+3,X [188,377] -- QMISCP.READSTOP is 3 -- X is 2, so branch is to PRMPTSTOP [S22, 1718] PRMPTSTOP: is 01.020200 LRA P+3 [188,384] [S22, 829] SUBROUTINE RETURNBUFS is 01.015324 LOAD Q-5 -- there are no buffers to return [S22, 1721] GOTO AGAIN is 01.020205 BR P+1,I [188,529] [S22, 1382] AGAIN is 01.017075 SED 0 [S22, 1393] IF <> THEN << USER REQUEST PENDING >> is 01.017105 BE P+7 -- RQSTATE is 0, FUNCTION is 0 [S22, 1433] IF = THEN GOTO CHKABORT is 01.017171 LDX Q+62,I [188,604] -- TOS is 0 [S22, 1463] CHKABORT: is 01.017252 LDX Q+56 -- @IOQP is %013544 [S22, 1470] IF QMISCPL.NOSTOP THEN GOTO RSWITCH is 01.017255 LOAD Q+57,I -- NOSTOP is 0 [S22, 1471] IF READABORTED THEN GOTO GOWAIT is 01.017260 ZERO,NOP [188,626] -- return is FALSE [S22, 1473] IF DITP.DSTATE=WRITING AND is 01.017270 LOAD Q-5,I -- DSTATE is 0 (NULL), so test is false [S22, 1489] X := IOQP is 01.017331 LDX Q+56,I -- X is %004000 and bit 0 is 0, so abort not requested [S22, 1512] X := DMODEMP is 01.017372 LDX Q+64,I [188,666] -- X is %100000 [S22, 1513] IF < AND NOT QMISCPL.NOPREMPT THEN is 01.017373 BGE P+27,I -- CCL and NOPREMPT is 0 -- @THISP is 013544, NPL is 0 [S22, 1516] WHILE <> DO << FIND MOST PREMPTIVE >> is 01.017403 BE P+37 [188,691] -- THISP.RPLEVEL is 0 [S22, 1527] @LASTP := @THISP; @THISP := THISP(QLINK) is 01.017434 LOAD Q+40 [188,717] -- @LASTP is 013544, @THISP is 013633, while loop continues [S22, 1516] WHILE <> DO << FIND MOST PREMPTIVE >> is 01.017403 BE P+37 [188,736] -- THISP.RPLEVEL is 3 [S22, 1522] ELSE IF IFLAG>NPL THEN is 01.017424 LOAD Q+45 [188,752] -- IFLAG is 3, NPL is 0 [S22, 1527] @LASTP := @THISP; @THISP := THISP(QLINK) is 01.017434 LOAD Q+40 [188,777] -- @LASTP is 013633, @THISP is 000000, drops out of while loop [S22, 1534] IF TOS>IOQP.RPLEVEL THEN is 01.017450 LOAD Q+56,I [188,803] -- TOS is 3, IOQP.RPLEVEL is 0 -- QMISCP.RSTATE is 0 [S22, 1539] IF DITP.DSTATE=STARTREAD THEN SENDSYNC(NULL,DITP) is 01.017463 LOAD Q-5,I -- DSTATE is 0, STARTREAD is 16 [S22, 1540] QMISCP := 0; << FORCE RESTART OF REQUEST >> is 01.017472 ZERO,NOP [188,834] -- is this why SYNC is sent a second time before start of ALL LOGGED OFF message? -- does not happen when read is not present [S22, 1544] GOTO AGAIN is 01.017504 BR P+2,I [188,866] [S22, 1382] AGAIN is 01.017075 SED 0 [188,869] [S22, 1393] IF <> THEN << USER REQUEST PENDING >> is 01.017105 BE P+7 -- RQSTATE is 0, FUNCTION is 1 [S22, 1473] IF DITP.DSTATE=WRITING AND is 01.017270 LOAD Q-5,I [188,985] -- DSTATE is 0 (NULL), so test is false [S22, 1512] X := DMODEMP is 01.017372 LDX Q+64,I [189,003] -- X is %100000 [S22, 1513] IF < AND NOT QMISCPL.NOPREMPT THEN is 01.017373 BGE P+27,I -- CCL and NOPREMPT is 0 -- @THISP is 013633, NPL is 0 [S22, 1516] WHILE <> DO << FIND MOST PREMPTIVE >> is 01.017403 BE P+37 [189,028] -- THISP.RPLEVEL is 3 [S22, 1522] ELSE IF IFLAG>NPL THEN is 01.017424 LOAD Q+45 [189,046] -- IFLAG is 3, NPL is 0 [S22, 1527] @LASTP := @THISP; @THISP := THISP(QLINK) is 01.017434 LOAD Q+40 [189,071] -- @LASTP is 013633, @THISP is 013544, while loop continues [S22, 1516] WHILE <> DO << FIND MOST PREMPTIVE >> is 01.017403 BE P+37 [189,088] -- THISP.RPLEVEL is 0 [S22, 1527] @LASTP := @THISP; @THISP := THISP(QLINK) is 01.017434 LOAD Q+40 [189,114] -- @LASTP is 013544, @THISP is 000000, drops out of while loop [S22, 1534] IF TOS>IOQP.RPLEVEL THEN is 01.017450 LOAD Q+56,I [189,140] -- TOS is 3, IOQP.RPLEVEL is 3 [S22, 1557] DMONITOR(DITP,%10,QPAR1P CAT IOQP(QFUNC) (0:9:7), -1) is 01.017534 PCAL 31 [189,172] [S55, 1215] PROCEDURE DMONITOR(DITP,ID,P1,P2) is 00.064724 LDXI 41 [189,192] -- DITP is %002434, ID is %10, P1 is 1, P2 is %177777 [S55, 1226] IF = THEN RETURN -- caller is not monitored, so DMONITOR returns [S22, 1559] IF FUNCTION<=WRITING THEN is 01.017535 LOAD Q+47 [189,222] -- FUNCTION is 1, WRITING is 1 [S22, 1572] ASMB( LOAD RQTABLE,X; ADAX; BR RQTABLE,X) is 01.017561 LOAD Q+46 [189,282] -- X is 0, so branch is to NEWL [S22, 1592] IF FLAG OR IOQP.RPLEVEL<>DMODEMP.LPLEVEL is 01.017643 LOAD Q+45 [189,343] -- FLAG is 0, IOQP.RPLEVEL is 3, DMODEMP.LPLEVEL is 0 [S22, 1595] IF DITP.DSTATE<>NULL THEN GOTO GOWAIT is 01.017662 LOAD Q-5,I [189,364] -- DSTATE is 0 [S22, 1597] IF FUNCTION<>WRITING OR FLAG THEN -- FUNCTION is 1, WRITING is 1, FLAG is 0 [S22, 1597] IF IOQP.RPLEVEL>DMODEMP.LPLEVEL AND NOT DITPL.NEWLINE THEN -- IOQP.RPLEVEL is 3, DMODEMP.LPLEVEL is 0, DITPL.NEWLINE is 1 [S22, 1624] GOTO RSWITCH is 01.017752 BR P-226 [189,454] [S22, 1572] ASMB( LOAD RQTABLE,X; ADAX; BR RQTABLE,X) is 01.017561 LOAD Q+46 [189,587] -- X is 1, so branch is to NOTNEWL [S22, 1633] ASMB( LOAD FTABEND,X; ADAX; BR FTABEND,X) is 01.017755 LDX Q+47 [189,601] -- X is 1, so branch to WRITEL [S22, 1882] MOVEDATA( DATA'ADR(IOQP), BCNT-DXCNTP, DXCNTP ) is 01.020651 PCAL 3 [189,689] -- calls PROCEDURE DATA'ADR, which returns because the data segment is already present [S22, 1049] SUBROUTINE MOVEDATA(BUFADR,COUNT,OFFSET) is 01.015775 LDXI 3 [189,781] -- return is at 190,443 with CCE [S22, 1893] IF NOT IOQPL(QPAR2) THEN << POST SPACE >> is 01.020675 LDXI 11 [190,456] -- IOQPL(QPAR2) is 0 [S22, 1897] DOSPACE is 01.020705 BR P+1,I [190,477] -- adds CR and LF to the output buffer -- return is at 191,017 with CCE [S22, 1906] STARTWRITE is 01.020724 BR P+1,I [191,036] -- calls SENDSYNC at 191,062 ** >>ATCD cmds: Output data is send | sync | 3577 [191,214] -- return is at 191,254 [S22, 1913] IF RQSTATE=RESET31 THEN is 01.020726 LOAD Q+46 [191,257] -- RQSTATE is %33, RESET31 is 6 [S22, 1935] IOQP(QSTAT).IOSTAT := TOS; << SET COMPLETION STATUS >> is 01.021013 LDXI 12 [191,352] -- IOSTAT is set to 1 [S22, 1955] GOTO AGAIN is 01.021074 BR P+1,I [191,431] [S22, 1382] AGAIN is 01.017075 SED 0 [191,434] [S22, 1393] IF <> THEN << USER REQUEST PENDING >> is 01.017105 BE P+7 -- RQSTATE is 0, FUNCTION is 0 [S22, 1473] IF DITP.DSTATE=WRITING AND is 01.017270 LOAD Q-5,I [191,558] -- DSTATE is 1, WRITING is 1, XONWAIT is 0, ACKWAIT is 0, so test fails [S22, 1513] IF < AND NOT QMISCPL.NOPREMPT THEN is 01.017373 BGE P+27,I -- CCL and NOPREMPT is 0 -- @THISP is 013544, NPL is 0 [S22, 1516] WHILE <> DO << FIND MOST PREMPTIVE >> is 01.017403 BE P+37 [191,623] -- THISP.RPLEVEL is 0 [S22, 1527] @LASTP := @THISP; @THISP := THISP(QLINK) is 01.017434 LOAD Q+40 [191,649] -- @LASTP is 013544, @THISP is 000000, while loop exits [S22, 1532] IF = THEN DMODEMP.PREMPT := 0 is 01.017443 LOAD Q+44 [191,670] -- NPL is 0, so test succeeds [S22, 1559] IF FUNCTION<=WRITING THEN is 01.017535 LOAD Q+47 [191,767] -- FUNCTION is 0, WRITING is 1 [S22, 1572] ASMB( LOAD RQTABLE,X; ADAX; BR RQTABLE,X) is 01.017561 LOAD Q+46 [191,827] -- X is 0, so branch is to NEWL [S22, 1592] IF FLAG OR IOQP.RPLEVEL<>DMODEMP.LPLEVEL is 01.017643 LOAD Q+45 [191,888] -- FLAG is 0, IOQP.RPLEVEL is 0, DMODEMP.LPLEVEL is 3, so test succeeds [S22, 1595] IF DITP.DSTATE<>NULL THEN GOTO GOWAIT is 01.017662 LOAD Q-5,I [189,364] -- DSTATE is 1 [S22, 1369] GOWAIT: is 01.017057 LDX Q+70,I [191,920] [S22, 1370] TOS.ACTIVE := 0 is 01.017072 TRBC #2 [191,944] -- changes DITP from %161601 to %141601 -- exits from TERMIOM to AWAKEIO (SA8) -- exits from AWAKEIO to SYSIOPROC (SA8) [SA8, 3820] GOTO LOOP is 00.040305 BR P-21 [191,972] [SA8, 3807] @DITP := DEQUEUE(DLINK,IOPROCQN) is 00.040270 PCAL 41 [SA8, 3450] INTEGER PROCEDURE DEQUEUE -- the head of the queue is %177777, so queue is empty [SA8, 3808] X := @DITP is 00.040272 LOAD Q+1 [192,023] -- X is %177777 [SA8, 3819] ELSE WAIT(-JUNKWAIT,NULL); << NOTHING TO DO >> is 00.040304 PCAL 160 [192,034] [S92, 3927] PROCEDURE WAIT(EVENTMASK,SPECIALINFO) is 00.111643 ADDS 4 [S92, 3983] IF EVENTMASK < 0 THEN is 00.111731 LOAD Q-5 [192,113] -- EVENTMASK is %177760 [S92, 4002] IF EVENTFLAGS.WWS <> 0 -- WWS is 0 [S92, 4052] EVENTFLAGS := 0 is 00.112130 ZERO,NOP [S92, 4060] ASMB (DISP) is 00.112157 DISP [192,209] -- dispatcher exit is 00.067710 IXIT [193,745] [S92, 4078] END <> is 00.112254 EXIT 2 [193,794] -- exit is from WAIT call in IOMSGPROC (S62, 1608) [S62, 1371] if SHUTDOWN.(3:1) then is 01.012050 LOAD P+101 [193,810] -- value is 0 [S62, 1380] while PORTSTATUS(0) do is 01.012066 DZRO,NOP [193,822] -- PORTSTATUS returns %177777 [S62, 1383] RECEIVEMSG(0,4,0) is 01.012101 PCAL 77 [194,025] -- RECEIVEMSG returns CCE, [S - 3] is 2 [S62, 1380] while PORTSTATUS(0) do is 01.012066 DZRO,NOP [194,648] -- PORTSTATUS returns %000000 [S62, 1558] while (CURRENT'INDEX:=CURRENT'INDEX+1) <= LAST'ENTRY do is 01.012614 INCM Q+6 [194,806] -- CURRENT'INDEX is 0, LAST'ENTRY is 0, so loop executes [S62, 1560] IOSTATUS(IOQ'ARRAY(CURRENT'INDEX)) is 01.012623 PCAL 120 [194,827] [SA8, 1520] IF LOGICAL(IOQP).COMPLETED THEN is 00.046406 LOAD Q+6,I [194,895] -- COMPLETED is 1 [SA8, 1528] RETURNIOQ(IOQP) is 00.046430 PCAL 67 [194,941] -- IOQP is %013633 -- return is at 195,254 [SA8, 1537] END; << I/O STATUS >> is 00.046441 EXIT 1 [195,286] -- RSTATUS is 7, CCE [S62, 1562] MAKE'BUFFER'AVAIL; << I/O has completed >> is 01.012627 BR P+1,I [195,307] -- return is at 196,117 [S62, 1608] WAIT(-(%114)<>,0) is 01.012740 PCAL 123 [196,171] ** >>ATCD xfer: Channel 0 sync character sent [196,305] ** 00.070027 000007 external interrupt [196,768] ** >>ATCD cmds: Output data is send | 3661 [196,996] -- exit is from WAIT call in DEVREC outer block (S08, 711) [S08, 712] GO BICYCLE is 04.001546 BR P+1,I [198,247] [S08, 555] WHILE SERVICECNT <> 0 AND (I:=I+2) <= NDEV DO is 04.000754 LDXI 1 [198,260] -- SERVICECNT is 0 [S08, 663] I := -2 is 04.001403 LDNI 2 [198,272] [S08, 668] L := IOSTATUS(TASK(I)) is 04.001427 PCAL 4 [198,312] -- return is at 198,414, return value is 0D, CCG [S08, 683] IF PSTOP THEN is 04.001456 LOAD P+34 [198,453] -- PSTOP is 00.001300 bit 2, value is 1 (%020000) [S08, 685] WHILE (I:=0) < FTASK DO is 04.001465 CMPM DB+14 [198,472] -- FTASK is 2 (but FTASK is 0 for the no-read case, so the while loop is bypased) [S08, 687] IF TASK(I) <> -1 THEN is 04.001467 LDX DB+24 [198,447] -- TASK(I) is %000550 -- @BUF is %000034 ******************************************************* [S08, 690] ABORTIO(INDEV) is 04.001501 PCAL 7 [198,508] -- return is at 200,381 -- this aborts the ALL LOGGED OFF message! -- this call is bypassed for the no-read case ******************************************************* [S62, 876] PROCEDURE ABORTIO(LDEVICE) [S08, 691] DO IOSTATUS(TASK) UNTIL <= is 04.001503 DZRO,NOP [200,397] -- return is at 200,862, return value is %000033/0, CCE [S08, 695] AWAKE(PROGEN,2,0) is 04.001523 PCAL 10 [201,036] -- return is 203,057, so abort occurred during 1st call -- second AWAKE is 203,133 stack is the same through 4957 (no read) and 5280 (read) HARDRES (S55): -- INCLIO is SA0 -- INCLMEAS is SA5 -- INCLMIFT is SB7 -- INCLHARD is SA8