Message ID | 20200624075226.92728-6-frankja@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | pc-bios: s390x: Cleanup part 1 | expand |
On 24/06/2020 09.52, Janosch Frank wrote: > jump_to_low_kernel() and the functions that it calls will already or > 64 bit addressing into the reset psw mask when executing > jump_to_IPL_2() after the diag308 subcode 1. Hmm, the jump_to_IPL_code() also sets the 64-bit addressing bits ... but jump_to_low_kernel() has some logic that tests for the bits before that function is called: /* Trying to get PSW at zero address */ if (*((uint64_t *)0) & RESET_PSW_MASK) { jump_to_IPL_code((*((uint64_t *)0)) & 0x7fffffff); } Could it be that the code in dasd-ipl.c has been written with that if-statement in mind? Thomas > The kernel proper is then branched to rather than doing a full PSW > change. > > Signed-off-by: Janosch Frank <frankja@linux.ibm.com> > --- > pc-bios/s390-ccw/dasd-ipl.c | 3 --- > 1 file changed, 3 deletions(-) > > diff --git a/pc-bios/s390-ccw/dasd-ipl.c b/pc-bios/s390-ccw/dasd-ipl.c > index 0fc879bb8e..e8f2846740 100644 > --- a/pc-bios/s390-ccw/dasd-ipl.c > +++ b/pc-bios/s390-ccw/dasd-ipl.c > @@ -206,7 +206,6 @@ static void run_ipl2(SubChannelId schid, uint16_t cutype, uint32_t addr) > */ > void dasd_ipl(SubChannelId schid, uint16_t cutype) > { > - PSWLegacy *pswl = (PSWLegacy *) 0x00; > uint32_t ipl2_addr; > > /* Construct Read IPL CCW and run it to read IPL1 from boot disk */ > @@ -229,7 +228,5 @@ void dasd_ipl(SubChannelId schid, uint16_t cutype) > run_ipl2(schid, cutype, ipl2_addr); > > /* Transfer control to the guest operating system */ > - pswl->mask |= PSW_MASK_EAMODE; /* Force z-mode */ > - pswl->addr |= PSW_MASK_BAMODE; /* ... */ > jump_to_low_kernel(); > } >
On 25/06/2020 12.57, Thomas Huth wrote: > On 24/06/2020 09.52, Janosch Frank wrote: >> jump_to_low_kernel() and the functions that it calls will already or >> 64 bit addressing into the reset psw mask when executing >> jump_to_IPL_2() after the diag308 subcode 1. > > Hmm, the jump_to_IPL_code() also sets the 64-bit addressing bits ... but > jump_to_low_kernel() has some logic that tests for the bits before that > function is called: > > /* Trying to get PSW at zero address */ > if (*((uint64_t *)0) & RESET_PSW_MASK) { > jump_to_IPL_code((*((uint64_t *)0)) & 0x7fffffff); > } > > Could it be that the code in dasd-ipl.c has been written with that > if-statement in mind? ... in that case, the code in dasd-ipl.c should maybe rather call jump_to_IPL_code((*((uint64_t *)0)) & 0x7fffffff) directly instead of going through jump_to_low_kernel(), I guess. Jason, do you remember the intention here? Thomas
diff --git a/pc-bios/s390-ccw/dasd-ipl.c b/pc-bios/s390-ccw/dasd-ipl.c index 0fc879bb8e..e8f2846740 100644 --- a/pc-bios/s390-ccw/dasd-ipl.c +++ b/pc-bios/s390-ccw/dasd-ipl.c @@ -206,7 +206,6 @@ static void run_ipl2(SubChannelId schid, uint16_t cutype, uint32_t addr) */ void dasd_ipl(SubChannelId schid, uint16_t cutype) { - PSWLegacy *pswl = (PSWLegacy *) 0x00; uint32_t ipl2_addr; /* Construct Read IPL CCW and run it to read IPL1 from boot disk */ @@ -229,7 +228,5 @@ void dasd_ipl(SubChannelId schid, uint16_t cutype) run_ipl2(schid, cutype, ipl2_addr); /* Transfer control to the guest operating system */ - pswl->mask |= PSW_MASK_EAMODE; /* Force z-mode */ - pswl->addr |= PSW_MASK_BAMODE; /* ... */ jump_to_low_kernel(); }
jump_to_low_kernel() and the functions that it calls will already or 64 bit addressing into the reset psw mask when executing jump_to_IPL_2() after the diag308 subcode 1. The kernel proper is then branched to rather than doing a full PSW change. Signed-off-by: Janosch Frank <frankja@linux.ibm.com> --- pc-bios/s390-ccw/dasd-ipl.c | 3 --- 1 file changed, 3 deletions(-)