]> xenbits.xensource.com Git - qemu-xen.git/commitdiff
target-s390x: PER instruction-fetch nullification event support
authorAurelien Jarno <aurelien@aurel32.net>
Fri, 12 Jun 2015 22:46:02 +0000 (00:46 +0200)
committerAlexander Graf <agraf@suse.de>
Wed, 17 Jun 2015 10:40:52 +0000 (12:40 +0200)
For the instruction-fetch nullification event, we just reuse the
existing instruction-fetch code and trigger the exception immediately
in that case.

There is no need to save the CPU state in the TCG code as it has been
saved by the previous instruction before calling the per_check_exception
helper.

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Alexander Graf <agraf@suse.de>
target-s390x/misc_helper.c

index 73d01935be1ce101821aa50645b5b555a03c7cf5..8eac0e12b99403bc535ab063d989be6795abf844 100644 (file)
@@ -625,6 +625,18 @@ void HELPER(per_ifetch)(CPUS390XState *env, uint64_t addr)
     if ((env->cregs[9] & PER_CR9_EVENT_IFETCH) && get_per_in_range(env, addr)) {
         env->per_address = addr;
         env->per_perc_atmid = PER_CODE_EVENT_IFETCH | get_per_atmid(env);
+
+        /* If the instruction has to be nullified, trigger the
+           exception immediately. */
+        if (env->cregs[9] & PER_CR9_EVENT_NULLIFICATION) {
+            CPUState *cs = CPU(s390_env_get_cpu(env));
+
+            env->int_pgm_code = PGM_PER;
+            env->int_pgm_ilen = get_ilen(cpu_ldub_code(env, addr));
+
+            cs->exception_index = EXCP_PGM;
+            cpu_loop_exit(cs);
+        }
     }
 }
 #endif