CAC 2015-07-22

using syserr

"Probably the easiest thing is to add calls to syserr with a severity of 5—that's a non-blocking call so a storm of them won't fill up the log, extras will just get dropped if the wired buffer overflows. There's probably a defined constant for that in syserr_something.incl.pl1. It's completely safe to call syserr from just about anywhere, including interrupt-side device I/O handlers.

"If you're working in ALM code, you can call syserr from there, but it might be easier to make a no-argument PL/I wrapper procedure that makes the call, and call your wrapper from ALM instead."

dcl syserr$error_code ext entry options (variable);

call syserr$error_code (4, code, "makestack: error appending ^a", stack_name);

syserr_constants.incl.pl1

     SYSERR_CRASH_SYSTEM      init (1),
     CRASH                    init (1),                     /* Crash the system, and bleat plaintively. */

     SYSERR_TERMINATE_PROCESS init (2),
     TERMINATE_PROCESS        init (2),                     /* Terminate the process, print the message, and beep. */

     SYSERR_PRINT_WITH_ALARM  init (3),
     BEEP                     init (3),                     /* Beep and print the message on the console. */

     SYSERR_PRINT_ON_CONSOLE  init (0),
     ANNOUNCE                 init (0),                     /* Just print the message on the console. */

     SYSERR_LOG_OR_PRINT      init (4),
     LOG                      init (4),                     /* Log the message, or print it if it can't be logged */

     SYSERR_LOG_OR_DISCARD    init (5),
     JUST_LOG                 init (5),                     /* Just try to log the message, and discard it if it can't be */
ls -a -pri -sort nm
dcl       Channel                uns fixed bin (9) parameter;
dcl       Data_word              bit (36) aligned parameter;
dcl       chx                    fixed bin;

call syserr (0, "report chan ^d word ^w", Channel, Data_word);

          chx = 0;

          if (Channel >= lbound (iom_data.per_iom.chantab, 2)) & (Channel <= hb
\cound (iom_data.per_iom.chantab, 2)) then
cp >ldd>sl1>s>bound_iom_support.s.archive
ac x bound_iom_support.s.archive iom_overhead.pl1
<edit>
pl1 iom_overhead    
cp >ldd>sl1>o>bound_iom_support.archive
ac r bound_iom_support iom_overhead
bind bound_iom_support
copy >ldd>sl1>info>hardcore.(search header) cac.=
edm cac.search
Edit.
i >user_dir_dir>SysEng>Anthony
w
q

On the console

admin
cwd >user_dir_dir>SysEng>Anthony
generate_mst cac trace -dr

Reboot

alv oldsve
1135.3  RCP: Mount logical volume oldsve for Anthony.User.a
<oldsve.dsk>
1 fileref 0xa2eb50 filename sve.rpv.dsk
2 fileref (nil) filename (null)
special interupt chan 13 devcode 2chanloc 1430
writing special status 413002100001 @ 00001320
1135.3  report chan 11 word 413002100001

kewl…

cp >ldd>sl1>s>bound_page_control.s.archive
ac x bound_page_control.s.archive disk_control.pl1
<edit>
pl1 disk_control    
cp >ldd>sl1>o>bound_page_control.archive
ac r bound_page_control disk_control
bind bound_page_control
check_special_stat:
     proc;
call syserr (0, "check_special_status");

          io_special_status_ptr = addr (stat);              /* base our templat
\ces */
          if ^io_special_status.t then
               return;

On the console

admin
cwd >user_dir_dir>SysEng>Anthony
generate_mst cac trace -dr

Reboot

alv oldsve
1809.5  report chan 11 word 413002100001
1809.5  check_special_status
1821.5  report chan 11 word 413002100001
1821.5  check_special_status
1821.5  .t ok
1821.5  dev 2
1821.5  dev ok
1821.5  pvtx ok
1821.5  is storage system

That's unexpected; shouldn't be storage system. "udsk" in the config deck?

udsk didn't help; it appears to take it out of RDP's usage; you are no longer able to do an 'sdu'

M-> sdu dska_02 io
1919.2  RCP: Acquired dska_02 from storage system.
1919.7  ioi_special

Closer…

admin
ed_installation_parms
change auto on
w
q

No help….

bound_page_control.s.archive/disk_control.pl1

ioi_special:
               call ioi_masked$interrupt ((chantab.ioi_ctx), level, stat);

./bound_io_wired.s.archive/ioi_masked.pl1

cp >ldd>sl1>s>bound_io_wired.s.archive
ac x bound_io_wired.s ioi_masked.pl1
qedx
r ioi_masked.pl1
285
          if level = IO_SPECIAL_INTERRUPT_LEVEL then do;    /* special status, 
\cnot necessarily in response to I/O */
a
call syserr (0, "ioi_masked special");
\f
w
q
pl1 ioi_masked
cp >ldd>sl1>o>bound_io_wired.archive

Generate mst, reboot; hmm … sdu isn't sticking?

Didn't see "ioi_masked special" message

call syserr (0, "ioi_special level ^d", level);

Oops, didn't bind the archive.

pl1 disk_control
ac r bound_page_control disk_control
bind bound_page_control
bind bound_io_wired

Generate, reboot, sdu, test….

Ok, saw the message this time…

qedx
r ioi_masked.pl1
/wakeup_user/
                              call wakeup_user;
i
call syserr (0, "wakeup user ^w", dte.process_id);
\f
w
q
pl1 ioi_masked
ac r bound_io_wired ioi_masked
bind bound_io_wired

Generate, reboot, sdu, test….

So wakeup_user is never getting called…

[code]]
if level = IO_SPECIAL_INTERRUPT_LEVEL then do; /* special status, not necessarily in response to I/O */
io_special_status_ptr = addr (status); /* base the proper structure */
imp = addr (message); /* build the message for any wakeups we send */
string (imess) = ""b;
imess.st = "1"b;
imess.level = bit (level, 3);
imess.status = status;

broadcast = /* tell everyone on this group if… */
^io_special_status.t | ^gte.mplex /* it's invalid (?) or not multiplexed */
| (substr (io_special_status.byte2, 1, 1) & (io_special_status.device = "00"b3));
/* or it's a controller interrupt */
do gtx = 1 to ioi_data.ngt;
gtep = addr (ioi_data.gt (gtx));
if special_could_come_from_channel (gtep, ctep) then do;
begin;

dcl done bit (1) aligned;

call lock_gte;
done = "0"b; /* so loop will loop */
do dtep = ptr (idp, gte.dtep) repeat ptr (idp, dte.next_dtep) while (^done);
if (dte.process_id ^= ""b) & (broadcast | (dte.device = io_special_status.device))
then do;
dte.special_status = status;
dte.special_interrupt = "1"b;
call wakeup_user;
end;
done = (dte.next_dtep = gte.dtep);
end;
call unlock_gte;
end;
end;
end;
end;
[[/code]]

qedx
r ioi_masked.pl1
/broadcast/
dcl       broadcast              bit (1) aligned;
/broadcast/
               broadcast =                                  /* tell everyone on
\c this group if... */
i
call syserr (0, "io_special_status.t ^w", io_special_status.t);
call syserr (0, "gte.mplex ^w", gte.mplex);
call syserr (0, "substr (io_special_status.byte2, 1, 1) ^w", substr (io_special_status.byte2, 1, 1));
call syserr (0, "io_special_status.device ^w", io_special_status.device);
\f
w
q
pl1 ioi_masked
ac r bound_io_wired ioi_masked
bind bound_io_wired

Generate, reboot, sdu, test….

1132.4  RCP: Mount logical volume oldsve for Anthony.SysEng.a
<oldsve.dsk>
1 fileref 0x1a879d0 filename sve.rpv.dsk
2 fileref (nil) filename (null)
1132.4  report chan 11 word 413002100001
1132.4  check_special_status
1132.4  .t ok
1132.4  dev 2
1132.4  dev ok
1132.4  pvtx ok
1132.4  ioi_special level 7
1132.4  ioi_masked special
1132.4  io_special_status.t 413002100001
1132.4  gte.mplex 004240000000
1132.4  substr (io_special_status.byte2, 1, 1) 000000000000
1132.4  io_special_status.device 413002100001

Not broadcast; good.

qedx
r ioi_masked.pl1
/^interrupt:/
interrupt:
/gtep/
          gtep = ptr (idp, cte.gtep);                       /* and its gte */
/gtep/
                    gtep = addr (ioi_data.gt (gtx));
a
call syserr (0, "gtx ^d special_could_come_from_channel ^w", gtx, special_could_come_from_channel (gtep, ctep));
\f
w
q
pl1 ioi_masked
ac r bound_io_wired ioi_masked
bind bound_io_wired
logout

Generate, reboot, sdu, test….

1235.3  gtx 1 special_could_come_from_channel 400000000000
1235.3  gtx 2 special_could_come_from_channel 000000000000
1235.3  gtx 3 special_could_come_from_channel 000000000000
1235.3  gtx 4 special_could_come_from_channel 000000000000
qedx
r ioi_masked.pl1
304
                    gtep = addr (ioi_data.gt (gtx));
/dtep/
                              do dtep = ptr (idp, gte.dtep) repeat ptr (idp, dt
\ce.next_dtep) while (^done);
a
call syserr (0, "dte.process_id ^w dte.device ^w io_special_status.device ^w", dte.process_id, dte.device, io_special_status.device);
\f
w
q
pl1 ioi_masked
ac r bound_io_wired ioi_masked
bind bound_io_wired
logout

Generate, reboot, sdu, test….

Use teh source:

  6) change(86-11-17,Farley), approve(86-11-20,MECR0002),
     audit(86-11-19,Fawcett), install(86-11-20,MR12.0-1222):
     Changed timer code to not operate on unassigned devices (dte.process_id =
     ""b).

Back to the RCP instructions….

ar disk_drive -dv dska_02
assign_resource: Resource not accessible to the requesting process. Error assig
\cning disk_drive device dska_02
r 20:03 0.095 3

ar disk_drive 
assign_resource: Resource not accessible to the requesting process. Error assig
\cning disk_drive device
r 20:03 0.045 0

ar disk_drive -vol oldsve
assign_resource: Resource not accessible to the requesting process. Error assig
\cning disk_drive device
M-> ed_installation_parms
type M-> p rsc_mgmt_enabled

rsc_mgmt_enabled:   off
type M-> c rsc_mgmt_enabled on
type M-> w
type M-> q
bce (boot) 2022.0: M-> [auto-input] boot star

Multics cac - 07/24/90  2022.3 pdt Tue
 2022   as   as_init_: No "tcd" card in the config deck.  Assuming APT size of 1
\c000.
2022.4  Loading FNP d, >system_library_unbundled>site_mcs 7.6c
Received BOOTLOAD command...
2022.4  FNP d loaded successfully
CONSOLE: ALERT
2022.4  rcprm_verify_registries_: >system_control_1>rcp>tape_vol.rcpr Entry not 
\cfound.
CONSOLE: ALERT
2022.4  rcprm_verify_registries_: >system_control_1>rcp>tape_drive.rcpr Entry no
\ct found.
CONSOLE: ALERT
2022.4  rcprm_verify_registries_: >system_control_1>rcp>punch.rcpr Entry not fou
\cnd.
CONSOLE: ALERT
2022.4  rcprm_verify_registries_: >system_control_1>rcp>reader.rcpr Entry not fo
\cund.
CONSOLE: ALERT
2022.4  rcprm_verify_registries_: >system_control_1>rcp>console.rcpr Entry not f
\cound.
CONSOLE: ALERT
2022.4  rcprm_verify_registries_: >system_control_1>rcp>printer.rcpr Entry not f
\cound.
CONSOLE: ALERT
2022.4  rcprm_verify_registries_: >system_control_1>rcp>disk_vol.rcpr Entry not 
\cfound.
CONSOLE: ALERT
2022.4  rcprm_verify_registries_: >system_control_1>rcp>disk_drive.rcpr Entry no
\ct found.
CONSOLE: ALERT
2022.4  rcprm_verify_registries_: >system_control_1>rcp>mca.rcpr Entry not found
\c.
CONSOLE: ALERT
2022.4  rcprm_verify_registries_: >system_control_1>rcp>special.rcpr Entry not f
\cound.
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License