blob: d9545fff038f141a0d2995235870c2ced16d49b2 [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Intercept 112 PV snippet
*
* We setup and share a prefix at 0x0 and 0x8000 which the hypervisor
* test will try to export and then execute a SIE entry which
* should result in a 112 SIE intercept.
*
* Copyright (c) 2023 IBM Corp
*
* Authors:
* Janosch Frank <frankja@linux.ibm.com>
*/
#include <asm/asm-offsets.h>
.section .text
xgr %r0, %r0
xgr %r1, %r1
/* Let's tell the hypervisor we're ready to start */
diag 0,0,0x44
/*
* Hypervisor will export the lowcore and try a SIE entry which should
* result in a 112. It will then import the lowcore again and we
* should continue with the code below.
*/
/* Share the lowcore */
larl %r1, share
.insn rrf,0xB9A40000,0,1,0,0
xgr %r1, %r1
/* Let's tell the hypervisor we're ready to start shared testing */
diag 0,0,0x44
/* Host: icpt: PV instruction diag 0x44 */
/* Host: icpt: 112 */
/* Copy the invalid PGM new PSW to the new lowcore */
larl %r1, prfx
l %r2, 0(%r1)
mvc GEN_LC_PGM_NEW_PSW(16, %r2), GEN_LC_PGM_NEW_PSW(%r0)
/* Change the prefix to 0x8000 and re-try */
xgr %r1, %r1
xgr %r2, %r2
larl %r2, prfx
spx 0(%r2)
/* Host: icpt: PV instruction notification SPX*/
/* Host: icpt: 112 */
/* Share the new lowcore */
larl %r3, share_addr
stg %r2, 0(%r3)
larl %r2, share
.insn rrf,0xB9A40000,0,2,0,0
/* Let's tell the hypervisor we're ready to start shared testing */
diag 0,0,0x44
/* Host: icpt: PV instruction diag 0x44 */
/* Host: icpt: 112 */
/* Test re-entry */
lghi %r1, 42
diag 1,0,0x9c
/* Host: icpt: PV instruction diag 0x9c */
.align 8
share:
.quad 0x0030100000000000
.quad 0x0, 0x0, 0x0
share_addr:
.quad 0x0
.quad 0x0
.align 4
prfx:
.long 0x00008000