From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44437) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z3XiS-0005sZ-P5 for qemu-devel@nongnu.org; Fri, 12 Jun 2015 18:46:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z3XiR-0004hI-76 for qemu-devel@nongnu.org; Fri, 12 Jun 2015 18:46:24 -0400 Received: from hall.aurel32.net ([2001:bc8:30d7:101::1]:35150) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z3XiQ-0004eo-VU for qemu-devel@nongnu.org; Fri, 12 Jun 2015 18:46:23 -0400 From: Aurelien Jarno Date: Sat, 13 Jun 2015 00:46:01 +0200 Message-Id: <1434149163-16639-14-git-send-email-aurelien@aurel32.net> In-Reply-To: <1434149163-16639-1-git-send-email-aurelien@aurel32.net> References: <1434149163-16639-1-git-send-email-aurelien@aurel32.net> Subject: [Qemu-devel] [PATCH 13/15] target-s390x: PER store-using-real-address event support List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Alexander Graf , Aurelien Jarno , Richard Henderson This PER event happens each time the STURA or STURG instructions are used. As they use helpers, we can just save the event in the PER code there, if enabled. Cc: Richard Henderson Cc: Alexander Graf Signed-off-by: Aurelien Jarno --- target-s390x/mem_helper.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/target-s390x/mem_helper.c b/target-s390x/mem_helper.c index d03f9fd..3ccbeb9 100644 --- a/target-s390x/mem_helper.c +++ b/target-s390x/mem_helper.c @@ -1105,6 +1105,14 @@ void HELPER(stura)(CPUS390XState *env, uint64_t addr, uint64_t v1) CPUState *cs = CPU(s390_env_get_cpu(env)); stl_phys(cs->as, get_address(env, 0, 0, addr), (uint32_t)v1); + + if ((env->psw.mask & PSW_MASK_PER) && + (env->cregs[9] & PER_CR9_EVENT_STORE) && + (env->cregs[9] & PER_CR9_EVENT_STORE_REAL)) { + /* PSW is saved just before calling the helper. */ + env->per_address = env->psw.addr; + env->per_perc_atmid = PER_CODE_EVENT_STORE_REAL | get_per_atmid(env); + } } void HELPER(sturg)(CPUS390XState *env, uint64_t addr, uint64_t v1) @@ -1112,6 +1120,14 @@ void HELPER(sturg)(CPUS390XState *env, uint64_t addr, uint64_t v1) CPUState *cs = CPU(s390_env_get_cpu(env)); stq_phys(cs->as, get_address(env, 0, 0, addr), v1); + + if ((env->psw.mask & PSW_MASK_PER) && + (env->cregs[9] & PER_CR9_EVENT_STORE) && + (env->cregs[9] & PER_CR9_EVENT_STORE_REAL)) { + /* PSW is saved just before calling the helper. */ + env->per_address = env->psw.addr; + env->per_perc_atmid = PER_CODE_EVENT_STORE_REAL | get_per_atmid(env); + } } /* load real address */ -- 2.1.4