diff options
Diffstat (limited to 'arch/powerpc/kvm/book3s_pr_papr.c')
-rw-r--r-- | arch/powerpc/kvm/book3s_pr_papr.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/arch/powerpc/kvm/book3s_pr_papr.c b/arch/powerpc/kvm/book3s_pr_papr.c index 4efa4a4f3722..b24309c6c2d5 100644 --- a/arch/powerpc/kvm/book3s_pr_papr.c +++ b/arch/powerpc/kvm/book3s_pr_papr.c | |||
@@ -227,6 +227,13 @@ static int kvmppc_h_pr_put_tce(struct kvm_vcpu *vcpu) | |||
227 | return EMULATE_DONE; | 227 | return EMULATE_DONE; |
228 | } | 228 | } |
229 | 229 | ||
230 | static int kvmppc_h_pr_xics_hcall(struct kvm_vcpu *vcpu, u32 cmd) | ||
231 | { | ||
232 | long rc = kvmppc_xics_hcall(vcpu, cmd); | ||
233 | kvmppc_set_gpr(vcpu, 3, rc); | ||
234 | return EMULATE_DONE; | ||
235 | } | ||
236 | |||
230 | int kvmppc_h_pr(struct kvm_vcpu *vcpu, unsigned long cmd) | 237 | int kvmppc_h_pr(struct kvm_vcpu *vcpu, unsigned long cmd) |
231 | { | 238 | { |
232 | switch (cmd) { | 239 | switch (cmd) { |
@@ -246,6 +253,13 @@ int kvmppc_h_pr(struct kvm_vcpu *vcpu, unsigned long cmd) | |||
246 | clear_bit(KVM_REQ_UNHALT, &vcpu->requests); | 253 | clear_bit(KVM_REQ_UNHALT, &vcpu->requests); |
247 | vcpu->stat.halt_wakeup++; | 254 | vcpu->stat.halt_wakeup++; |
248 | return EMULATE_DONE; | 255 | return EMULATE_DONE; |
256 | case H_XIRR: | ||
257 | case H_CPPR: | ||
258 | case H_EOI: | ||
259 | case H_IPI: | ||
260 | if (kvmppc_xics_enabled(vcpu)) | ||
261 | return kvmppc_h_pr_xics_hcall(vcpu, cmd); | ||
262 | break; | ||
249 | case H_RTAS: | 263 | case H_RTAS: |
250 | if (list_empty(&vcpu->kvm->arch.rtas_tokens)) | 264 | if (list_empty(&vcpu->kvm->arch.rtas_tokens)) |
251 | return RESUME_HOST; | 265 | return RESUME_HOST; |