Commit cc7bed1b authored by Janosch Frank's avatar Janosch Frank
Browse files

s390x: Add custom pgm cleanup function



Sometimes we need to do cleanup which we don't necessarily want to add
to interrupt.c, so let's add a way to register a cleanup function.

Signed-off-by: default avatarJanosch Frank <frankja@linux.ibm.com>
Reviewed-by: default avatarClaudio Imbrenda <imbrenda@linux.ibm.com>
Reviewed-by: default avatarThomas Huth <thuth@redhat.com>
Reviewed-by: default avatarCornelia Huck <cohuck@redhat.com>
Message-Id: <20200807111555.11169-2-frankja@linux.ibm.com>
Signed-off-by: default avatarJanosch Frank <frankja@linux.ibm.com>
parent 1b53866b
......@@ -15,6 +15,7 @@
#define EXT_IRQ_EXTERNAL_CALL 0x1202
#define EXT_IRQ_SERVICE_SIG 0x2401
void register_pgm_cleanup_func(void (*f)(void));
void handle_pgm_int(void);
void handle_ext_int(void);
void handle_mcck_int(void);
......
......@@ -16,6 +16,7 @@
static bool pgm_int_expected;
static bool ext_int_expected;
static void (*pgm_cleanup_func)(void);
static struct lowcore *lc;
void expect_pgm_int(void)
......@@ -51,6 +52,11 @@ void check_pgm_int_code(uint16_t code)
lc->pgm_int_code);
}
void register_pgm_cleanup_func(void (*f)(void))
{
pgm_cleanup_func = f;
}
static void fixup_pgm_int(void)
{
switch (lc->pgm_int_code) {
......@@ -115,7 +121,11 @@ void handle_pgm_int(void)
}
pgm_int_expected = false;
fixup_pgm_int();
if (pgm_cleanup_func)
(*pgm_cleanup_func)();
else
fixup_pgm_int();
}
void handle_ext_int(void)
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment