On 20/01/2020 19.42, Claudio Imbrenda wrote: > Fix the program interrupt handler for the case where sclp_busy is set. > > The interrupt handler will attempt to write an error message on the > console using the SCLP, and will wait for sclp_busy to become false > before doing so. If an exception happenes between setting the flag and > the SCLP call, or if the call itself raises an exception, we need to > clear the flag so we can successfully print the error message. > > Signed-off-by: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx> > --- > lib/s390x/interrupt.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/lib/s390x/interrupt.c b/lib/s390x/interrupt.c > index 05f30be..ccb376a 100644 > --- a/lib/s390x/interrupt.c > +++ b/lib/s390x/interrupt.c > @@ -106,10 +106,13 @@ static void fixup_pgm_int(void) > > void handle_pgm_int(void) > { > - if (!pgm_int_expected) > + if (!pgm_int_expected) { > + /* Force sclp_busy to false, otherwise we will loop forever */ > + sclp_handle_ext(); > report_abort("Unexpected program interrupt: %d at %#lx, ilen %d\n", > lc->pgm_int_code, lc->pgm_old_psw.addr, > lc->pgm_int_id); > + } > > pgm_int_expected = false; > fixup_pgm_int(); > Acked-by: Thomas Huth <thuth@xxxxxxxxxx>