aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Blaschka <blaschka@linux.vnet.ibm.com>2014-10-18 06:24:12 +0200
committerCornelia Huck <cornelia.huck@de.ibm.com>2014-11-05 16:35:55 +0100
commit80765f0734e08fe4d52e9be10e0cfb47b3cf43e3 (patch)
treee12011779c74f5a2e9c7ddea10cc1206c7abea7c
parent6e76d125f244e10676b917208f2a074729820246 (diff)
s390x/kvm: Fix opcode decoding for eb instruction handler
The second byte of the opcode is encoded in the lowest byte of the ipb field, not the lowest byte of the ipa field. Signed-off-by: Frank Blaschka <blaschka@linux.vnet.ibm.com> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com> Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
-rw-r--r--target-s390x/kvm.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index 5b10a255ed..690cb7198a 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -827,18 +827,18 @@ static int handle_b9(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1)
return r;
}
-static int handle_eb(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1)
+static int handle_eb(S390CPU *cpu, struct kvm_run *run, uint8_t ipbl)
{
int r = 0;
- switch (ipa1) {
+ switch (ipbl) {
case PRIV_EB_SQBS:
/* just inject exception */
r = -1;
break;
default:
r = -1;
- DPRINTF("KVM: unhandled PRIV: 0xeb%x\n", ipa1);
+ DPRINTF("KVM: unhandled PRIV: 0xeb%x\n", ipbl);
break;
}
@@ -1039,7 +1039,7 @@ static int handle_instruction(S390CPU *cpu, struct kvm_run *run)
r = handle_b9(cpu, run, ipa1);
break;
case IPA0_EB:
- r = handle_eb(cpu, run, ipa1);
+ r = handle_eb(cpu, run, run->s390_sieic.ipb & 0xff);
break;
case IPA0_DIAG:
r = handle_diag(cpu, run, run->s390_sieic.ipb);