diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2012-09-12 16:57:16 +0000 |
---|---|---|
committer | Alexander Graf <agraf@suse.de> | 2012-10-04 15:54:17 +0200 |
commit | 1dd088946cf464a994bc93945a360aef049493af (patch) | |
tree | b07d015c953fbb9c60917e415e748df91f5c619f /hw/spapr_hcall.c | |
parent | 256b408abea2cfe18d8c0278e5b46213509db271 (diff) | |
download | qemu-1dd088946cf464a994bc93945a360aef049493af.zip qemu-1dd088946cf464a994bc93945a360aef049493af.tar.gz qemu-1dd088946cf464a994bc93945a360aef049493af.tar.bz2 |
pseries: Small cleanup to H_CEDE implementation
The H_CEDE hypercall implementation for the pseries machine doesn't trigger
quite the right path in the main cpu exec loop. We should set exit_request
to pop up one extra level and recheck state, and we should set the
exception_index to EXCP_HLT (H_CEDE is roughly equivalent to the hlt
instruction on x86).
In practice, this doesn't really matter except for KVM, and KVM implements
H_CEDE internally so we never hit this code path. But we might as well
get it right, just in case it matters some day.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'hw/spapr_hcall.c')
-rw-r--r-- | hw/spapr_hcall.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/hw/spapr_hcall.c b/hw/spapr_hcall.c index abd847f..2df94d1 100644 --- a/hw/spapr_hcall.c +++ b/hw/spapr_hcall.c @@ -544,6 +544,8 @@ static target_ulong h_cede(CPUPPCState *env, sPAPREnvironment *spapr, hreg_compute_hflags(env); if (!cpu_has_work(env)) { env->halted = 1; + env->exception_index = EXCP_HLT; + env->exit_request = 1; } return H_SUCCESS; } |