/* 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 */ #include .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