Skip to content

Commit

Permalink
s390x/kvm: pass the SIGP instruction parameter to the SIGP handler
Browse files Browse the repository at this point in the history
The parameter of the SIGP instruction will be neded in the future. Let's read it
out and store it in the struct sigp_info, so it can be passed to the sigp
handlers.

Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Message-Id: <1424783731-43426-4-git-send-email-jfrei@linux.vnet.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
  • Loading branch information
David Hildenbrand authored and borntraeger committed Mar 10, 2015
1 parent 6eb8f21 commit 22740e3
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions target-s390x/kvm.c
Expand Up @@ -1113,6 +1113,7 @@ static int handle_diag(S390CPU *cpu, struct kvm_run *run, uint32_t ipb)

typedef struct SigpInfo {
S390CPU *cpu;
uint64_t param;
int cc;
uint64_t *status_reg;
} SigpInfo;
Expand Down Expand Up @@ -1174,10 +1175,11 @@ static void sigp_cpu_reset(void *arg)
}

static int handle_sigp_single_dst(S390CPU *dst_cpu, uint8_t order,
uint64_t *status_reg)
uint64_t param, uint64_t *status_reg)
{
SigpInfo si = {
.cpu = dst_cpu,
.param = param,
.status_reg = status_reg,
};

Expand Down Expand Up @@ -1218,13 +1220,15 @@ static int handle_sigp(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1)
int ret;
uint8_t order;
uint64_t *status_reg;
uint64_t param;
S390CPU *dst_cpu = NULL;

cpu_synchronize_state(CPU(cpu));

/* get order code */
order = decode_basedisp_rs(env, run->s390_sieic.ipb) & SIGP_ORDER_MASK;
status_reg = &env->regs[r1];
param = (r1 % 2) ? env->regs[r1] : env->regs[r1 + 1];

switch (order) {
case SIGP_SET_ARCH:
Expand All @@ -1235,7 +1239,7 @@ static int handle_sigp(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1)
default:
/* all other sigp orders target a single vcpu */
dst_cpu = s390_cpu_addr2state(env->regs[r3]);
ret = handle_sigp_single_dst(dst_cpu, order, status_reg);
ret = handle_sigp_single_dst(dst_cpu, order, param, status_reg);
}

if (ret >= 0) {
Expand Down

0 comments on commit 22740e3

Please sign in to comment.