diff options
Diffstat (limited to 'arch/powerpc/kvm/book3s_pr_papr.c')
-rw-r--r-- | arch/powerpc/kvm/book3s_pr_papr.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/arch/powerpc/kvm/book3s_pr_papr.c b/arch/powerpc/kvm/book3s_pr_papr.c index 60ac0e793476..3ff9013d6e79 100644 --- a/arch/powerpc/kvm/book3s_pr_papr.c +++ b/arch/powerpc/kvm/book3s_pr_papr.c | |||
@@ -15,6 +15,8 @@ | |||
15 | * published by the Free Software Foundation. | 15 | * published by the Free Software Foundation. |
16 | */ | 16 | */ |
17 | 17 | ||
18 | #include <linux/anon_inodes.h> | ||
19 | |||
18 | #include <asm/uaccess.h> | 20 | #include <asm/uaccess.h> |
19 | #include <asm/kvm_ppc.h> | 21 | #include <asm/kvm_ppc.h> |
20 | #include <asm/kvm_book3s.h> | 22 | #include <asm/kvm_book3s.h> |
@@ -211,6 +213,20 @@ static int kvmppc_h_pr_protect(struct kvm_vcpu *vcpu) | |||
211 | return EMULATE_DONE; | 213 | return EMULATE_DONE; |
212 | } | 214 | } |
213 | 215 | ||
216 | static int kvmppc_h_pr_put_tce(struct kvm_vcpu *vcpu) | ||
217 | { | ||
218 | unsigned long liobn = kvmppc_get_gpr(vcpu, 4); | ||
219 | unsigned long ioba = kvmppc_get_gpr(vcpu, 5); | ||
220 | unsigned long tce = kvmppc_get_gpr(vcpu, 6); | ||
221 | long rc; | ||
222 | |||
223 | rc = kvmppc_h_put_tce(vcpu, liobn, ioba, tce); | ||
224 | if (rc == H_TOO_HARD) | ||
225 | return EMULATE_FAIL; | ||
226 | kvmppc_set_gpr(vcpu, 3, rc); | ||
227 | return EMULATE_DONE; | ||
228 | } | ||
229 | |||
214 | int kvmppc_h_pr(struct kvm_vcpu *vcpu, unsigned long cmd) | 230 | int kvmppc_h_pr(struct kvm_vcpu *vcpu, unsigned long cmd) |
215 | { | 231 | { |
216 | switch (cmd) { | 232 | switch (cmd) { |
@@ -222,6 +238,8 @@ int kvmppc_h_pr(struct kvm_vcpu *vcpu, unsigned long cmd) | |||
222 | return kvmppc_h_pr_protect(vcpu); | 238 | return kvmppc_h_pr_protect(vcpu); |
223 | case H_BULK_REMOVE: | 239 | case H_BULK_REMOVE: |
224 | return kvmppc_h_pr_bulk_remove(vcpu); | 240 | return kvmppc_h_pr_bulk_remove(vcpu); |
241 | case H_PUT_TCE: | ||
242 | return kvmppc_h_pr_put_tce(vcpu); | ||
225 | case H_CEDE: | 243 | case H_CEDE: |
226 | kvm_vcpu_block(vcpu); | 244 | kvm_vcpu_block(vcpu); |
227 | clear_bit(KVM_REQ_UNHALT, &vcpu->requests); | 245 | clear_bit(KVM_REQ_UNHALT, &vcpu->requests); |