1*da49e291SNina Schoetterl-Glausch /* SPDX-License-Identifier: GPL-2.0-only */ 2*da49e291SNina Schoetterl-Glausch /* 3*da49e291SNina Schoetterl-Glausch * Functionality for exiting the snippet. 4*da49e291SNina Schoetterl-Glausch * 5*da49e291SNina Schoetterl-Glausch * Copyright IBM Corp. 2023 6*da49e291SNina Schoetterl-Glausch */ 7*da49e291SNina Schoetterl-Glausch 8*da49e291SNina Schoetterl-Glausch #ifndef _S390X_SNIPPET_LIB_EXIT_H_ 9*da49e291SNina Schoetterl-Glausch #define _S390X_SNIPPET_LIB_EXIT_H_ 10*da49e291SNina Schoetterl-Glausch 11*da49e291SNina Schoetterl-Glausch #include <asm/arch_def.h> 12*da49e291SNina Schoetterl-Glausch #include <asm/barrier.h> 13*da49e291SNina Schoetterl-Glausch force_exit(void)14*da49e291SNina Schoetterl-Glauschstatic inline void force_exit(void) 15*da49e291SNina Schoetterl-Glausch { 16*da49e291SNina Schoetterl-Glausch mb(); /* host may read any memory written by the guest before */ 17*da49e291SNina Schoetterl-Glausch diag44(); 18*da49e291SNina Schoetterl-Glausch mb(); /* allow host to modify guest memory */ 19*da49e291SNina Schoetterl-Glausch } 20*da49e291SNina Schoetterl-Glausch force_exit_value(uint64_t val)21*da49e291SNina Schoetterl-Glauschstatic inline void force_exit_value(uint64_t val) 22*da49e291SNina Schoetterl-Glausch { 23*da49e291SNina Schoetterl-Glausch mb(); /* host may read any memory written by the guest before */ 24*da49e291SNina Schoetterl-Glausch diag500(val); 25*da49e291SNina Schoetterl-Glausch mb(); /* allow host to modify guest memory */ 26*da49e291SNina Schoetterl-Glausch } 27*da49e291SNina Schoetterl-Glausch 28*da49e291SNina Schoetterl-Glausch #endif /* _S390X_SNIPPET_LIB_EXIT_H_ */ 29