From memories of 30-ish years ago...

I worked on MDF (Multiple Domain Facility -- What IBM came to call PR/SM and domains got called LPARs) at Amdahl.

So let me elaborate on what Seymour said just based on the Amdahl MVS Structure and Flow class I had (2 weeks of in depth teaching).

When you hit the blue LOAD button (as I recall that was the color), the system went into IPL mode/state (I've forgotten which is the formal name) and fetched from a specific volume the IPL TEXT.

Now we summarize all the fun from that.

Page Frame 0 for that DOMAIN/LPAR is *the INITIAL* PSA (PSA 0) while in IPL mode/state. This is all done in REAL mode. So you get all of the IRIM and RIMs done (Initial Resource Initialization Module, and Resource INIT module -- I didn't come up with those names, IBM did) and you are now preparing for MP INIT (or DP if you only have a Dyadic machine), so, you point some register (not 0) at this PSA you are about to build, doing a copy from the PSA 0 to this PSA being built and now you load your prefix reg with this address. Now R0 is pointing to this new PSA and no longer to PSA 0.

Why did we do this? Because PSA 0 now has all of the NEW/PSWs set to point to the xxx Interrupt FLIHs (First Level Interrupt Handlers). And it has all the other stuff that has to be anchored in the PSA stored at the specified positions.

I have forgotten when RSM (Real Storage Manager) has been done, and VSM, etc. are init-ed, but DAT should now be active.

We can now do "MP" INIT. For each CPU we have to get the storage for its PSA and copy PSA 0 to it to init it -- You may need to make a change in that PSA, so you have to address it with something other than R0. Once that is done, a SIGP RESTART is done for that CPU. Now that CPU goes through all the stuff it must to get to a dispatchable state for the dispatcher to control it. And that may be a very short # of items.

Rinse repeat for each CPU defined for this domain/LPAR.

That's one use of addressing a PSA where you can't use R0.

ACR -- Alternate CPU recovery may be another.

MCK -- Machine check handler. It may have to look at a dead CPU (MCK PD comes to mind, and PI loop is another -- but that may be done in ACR) and so it has to use something other than R0 to look at that processor's PSA.

Now you know some of the reasons for using other than R0 to address a PSA.

Again, it has been 30 years now since I worked at that level and MVS has changed a lot since then.

Regards,
Steve Thompson


On 11/12/19 2:01 PM, Seymour J Metz wrote:
No, it's not a waste of resources. There is a valid use case regardless of 
whether you can conceive of it.


--
Shmuel (Seymour J.) Metz
http://mason.gmu.edu/~smetz3


________________________________________
From: IBM Mainframe Assembler List <ASSEMBLER-LIST@LISTSERV.UGA.EDU> on behalf of 
John McKown <john.archie.mck...@gmail.com>
Sent: Tuesday, November 12, 2019 8:13 AM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: Questionable Instructions in Obtaining EAX documentation

On Tue, Nov 12, 2019 at 6:56 AM Peter Relson <rel...@us.ibm.com> wrote:

<snip>
What if R9 is not supposed to be zero? Maybe the code is looking at the
PSA
of another processor.
</snip>

The normal way to accomplish that is
          USING PSA,R9
rather than leaving a time-bomb for those who come after by using "0".


I cannot fathom the reason to use _any_ base for the PSA other than GPR0.
It is simply wasteful of a scarce resource.



Peter Relson
z/OS Core Technology Design



--
People in sleeping bags are the soft tacos of the bear world.
Maranatha! <><
John McKown

Reply via email to