@@ -250,19 +250,6 @@ static void set_prefix_key_1(uint32_t *prefix_ptr)
);
}
-/*
- * We remapped page 0, making the lowcore inaccessible, which breaks the normal
- * handler and breaks skipping the faulting instruction.
- * Just disable dynamic address translation to make things work.
- */
-static void dat_fixup_pgm_int(void)
-{
- uint64_t psw_mask = extract_psw_mask();
-
- psw_mask &= ~PSW_MASK_DAT;
- load_psw_mask(psw_mask);
-}
-
#define PREFIX_AREA_SIZE (PAGE_SIZE * 2)
static char lowcore_tmp[PREFIX_AREA_SIZE] __attribute__((aligned(PREFIX_AREA_SIZE)));
@@ -318,7 +305,13 @@ static void test_set_prefix(void)
report(get_prefix() == old_prefix, "did not set prefix");
report_prefix_pop();
- register_pgm_cleanup_func(dat_fixup_pgm_int);
+ /*
+ * Page 0 will be remapped, making the lowcore inaccessible, which
+ * breaks the normal handler and breaks skipping the faulting
+ * instruction. Disable dynamic address translation for the
+ * interrupt handler to make things work.
+ */
+ lowcore.pgm_new_psw.mask &= ~PSW_MASK_DAT;
report_prefix_push("remapped page, fetch protection");
set_prefix(old_prefix);
@@ -356,7 +349,7 @@ static void test_set_prefix(void)
report_prefix_pop();
ctl_clear_bit(0, CTL0_FETCH_PROTECTION_OVERRIDE);
- register_pgm_cleanup_func(NULL);
+ lowcore.pgm_new_psw.mask |= PSW_MASK_DAT;
report_prefix_pop();
set_storage_key(pagebuf, 0x00, 0);
report_prefix_pop();