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