Opened 4 years ago
Closed 4 years ago
#287 closed defect (fixed)
Unexpected Fault condition during BCE reinit.
| Reported by: | canthony | Owned by: | Eric Swenson |
|---|---|---|---|
| Priority: | minor | Milestone: | MR12.8 |
| Component: | Hardcore | Version: | MR12.7 |
| Keywords: | Cc: |
Description
Rarely, an Unexpected Fault condition will occur during the execution of the BCE "reinit" command.
Reissuing the command succeeds and operations can proceed without after-effects.
Instrumenting the simulator shows that the problem is a Timer Runout interrupt during execution of "initialize_faults". "initialize_faults" has two distinct steps; first, set all fault/interrupt vectors to a minimal state and second, set specific vectors to operational state.
If a timer runout interrupt occurs between the first step's setting of the TRO vector to "unexpected" and the second steps's setting it to the BCE TRO handler, an Unexpected Interrupt condition will result.
When "initialize_faults: is called during normal boot operations, the Timer Register has been set to a maximum value to allow initialization to proceed without any TROs.
The BCE "reinit" command backs the boot phase to before the "initialize_faults" invocation, causing it to be rerun as part of the reinitialation process.
But BCE will have started pxss before the "reinit" command. pxss sets the timer register to 1/8 of a second as part of its page event handling. This means that sometime during the re-initialization, the timer may run out and cause an interrupt, possibly during the "initialize_faults" unexpected fault handler state.
This is a very narrow race window, and it may be the simulator's low quality timer register regime is making that window larger, increasing the chances of the failure; this may explain why the problem went unnoticed back in the day.
However, since the reinit command would be used relatively rarely, it is also possible that the failure never occurred, or since re-running the command would succeed that the failure was filed under can't reproduce; non-fatal.
My proposed fix is to reset the Timer Register to it's maximum value as part of the "reinit" command.
In In bce_get_to_command_level.pl1:
`
sys_info$collection_1_phase = EARLY_INITIALIZATION; /* makes next phase boot phase */
toehold$.memory_state = At_bceearly;
go to Boot_label;
`
Add:
`
call privileged_mode_ut$ldt (-1);
`
This will allow enough time for the re-initialization process to proceed to the point where pxss is restarted and its timer register discipline is established.
Change History (4)
comment:1 by , 4 years ago
comment:2 by , 4 years ago
| Summary: | Unexpected Fault conditon during BCE reinit. → Unexpected Fault condition during BCE reinit. |
|---|
comment:3 by , 4 years ago
| Milestone: | → MR12.8 |
|---|---|
| Status: | new → assigned |
| Version: | → MR12.7 |
comment:4 by , 4 years ago
| Resolution: | → fixed |
|---|---|
| Status: | assigned → closed |
Fixed with MR12.8-1036: MR12.8g

https://s3.amazonaws.com/eswenson-multics/public/mcrs/MCR10119.pdf