xref: /kvm-unit-tests/lib/s390x/sie.c (revision d75fac5f2596e49e22344d1a33c594988364d2a1)
1*d75fac5fSJanosch Frank /* SPDX-License-Identifier: GPL-2.0-only */
2*d75fac5fSJanosch Frank /*
3*d75fac5fSJanosch Frank  * Virtualization library that speeds up managing guests.
4*d75fac5fSJanosch Frank  *
5*d75fac5fSJanosch Frank  * Copyright (c) 2021 IBM Corp
6*d75fac5fSJanosch Frank  *
7*d75fac5fSJanosch Frank  * Authors:
8*d75fac5fSJanosch Frank  *  Janosch Frank <frankja@linux.ibm.com>
9*d75fac5fSJanosch Frank  */
10*d75fac5fSJanosch Frank 
11*d75fac5fSJanosch Frank #include <asm/barrier.h>
12*d75fac5fSJanosch Frank #include <libcflat.h>
13*d75fac5fSJanosch Frank #include <sie.h>
14*d75fac5fSJanosch Frank 
15*d75fac5fSJanosch Frank static bool validity_expected;
16*d75fac5fSJanosch Frank static uint16_t vir;		/* Validity interception reason */
17*d75fac5fSJanosch Frank 
18*d75fac5fSJanosch Frank void sie_expect_validity(void)
19*d75fac5fSJanosch Frank {
20*d75fac5fSJanosch Frank 	validity_expected = true;
21*d75fac5fSJanosch Frank 	vir = 0;
22*d75fac5fSJanosch Frank }
23*d75fac5fSJanosch Frank 
24*d75fac5fSJanosch Frank void sie_check_validity(uint16_t vir_exp)
25*d75fac5fSJanosch Frank {
26*d75fac5fSJanosch Frank 	report(vir_exp == vir, "VALIDITY: %x", vir);
27*d75fac5fSJanosch Frank 	vir = 0;
28*d75fac5fSJanosch Frank }
29*d75fac5fSJanosch Frank 
30*d75fac5fSJanosch Frank void sie_handle_validity(struct vm *vm)
31*d75fac5fSJanosch Frank {
32*d75fac5fSJanosch Frank 	if (vm->sblk->icptcode != ICPT_VALIDITY)
33*d75fac5fSJanosch Frank 		return;
34*d75fac5fSJanosch Frank 
35*d75fac5fSJanosch Frank 	vir = vm->sblk->ipb >> 16;
36*d75fac5fSJanosch Frank 
37*d75fac5fSJanosch Frank 	if (!validity_expected)
38*d75fac5fSJanosch Frank 		report_abort("VALIDITY: %x", vir);
39*d75fac5fSJanosch Frank 	validity_expected = false;
40*d75fac5fSJanosch Frank }
41