Lines Matching refs:vcpu
23 static unsigned long get_pteg_addr(struct kvm_vcpu *vcpu, long pte_index) in get_pteg_addr() argument
25 struct kvmppc_vcpu_book3s *vcpu_book3s = to_book3s(vcpu); in get_pteg_addr()
36 static int kvmppc_h_pr_enter(struct kvm_vcpu *vcpu) in kvmppc_h_pr_enter() argument
38 long flags = kvmppc_get_gpr(vcpu, 4); in kvmppc_h_pr_enter()
39 long pte_index = kvmppc_get_gpr(vcpu, 5); in kvmppc_h_pr_enter()
47 pteg_addr = get_pteg_addr(vcpu, pte_index); in kvmppc_h_pr_enter()
49 mutex_lock(&vcpu->kvm->arch.hpt_mutex); in kvmppc_h_pr_enter()
70 hpte[0] = cpu_to_be64(kvmppc_get_gpr(vcpu, 6)); in kvmppc_h_pr_enter()
71 hpte[1] = cpu_to_be64(kvmppc_get_gpr(vcpu, 7)); in kvmppc_h_pr_enter()
76 kvmppc_set_gpr(vcpu, 4, pte_index | i); in kvmppc_h_pr_enter()
80 mutex_unlock(&vcpu->kvm->arch.hpt_mutex); in kvmppc_h_pr_enter()
81 kvmppc_set_gpr(vcpu, 3, ret); in kvmppc_h_pr_enter()
86 static int kvmppc_h_pr_remove(struct kvm_vcpu *vcpu) in kvmppc_h_pr_remove() argument
88 unsigned long flags= kvmppc_get_gpr(vcpu, 4); in kvmppc_h_pr_remove()
89 unsigned long pte_index = kvmppc_get_gpr(vcpu, 5); in kvmppc_h_pr_remove()
90 unsigned long avpn = kvmppc_get_gpr(vcpu, 6); in kvmppc_h_pr_remove()
95 pteg = get_pteg_addr(vcpu, pte_index); in kvmppc_h_pr_remove()
96 mutex_lock(&vcpu->kvm->arch.hpt_mutex); in kvmppc_h_pr_remove()
114 vcpu->arch.mmu.tlbie(vcpu, rb, rb & 1 ? true : false); in kvmppc_h_pr_remove()
117 kvmppc_set_gpr(vcpu, 4, pte[0]); in kvmppc_h_pr_remove()
118 kvmppc_set_gpr(vcpu, 5, pte[1]); in kvmppc_h_pr_remove()
121 mutex_unlock(&vcpu->kvm->arch.hpt_mutex); in kvmppc_h_pr_remove()
122 kvmppc_set_gpr(vcpu, 3, ret); in kvmppc_h_pr_remove()
145 static int kvmppc_h_pr_bulk_remove(struct kvm_vcpu *vcpu) in kvmppc_h_pr_bulk_remove() argument
151 mutex_lock(&vcpu->kvm->arch.hpt_mutex); in kvmppc_h_pr_bulk_remove()
153 unsigned long tsh = kvmppc_get_gpr(vcpu, paramnr+(2*i)); in kvmppc_h_pr_bulk_remove()
154 unsigned long tsl = kvmppc_get_gpr(vcpu, paramnr+(2*i)+1); in kvmppc_h_pr_bulk_remove()
173 kvmppc_set_gpr(vcpu, paramnr+(2*i), tsh); in kvmppc_h_pr_bulk_remove()
178 pteg = get_pteg_addr(vcpu, tsh & H_BULK_REMOVE_PTEX); in kvmppc_h_pr_bulk_remove()
202 vcpu->arch.mmu.tlbie(vcpu, rb, rb & 1 ? true : false); in kvmppc_h_pr_bulk_remove()
206 kvmppc_set_gpr(vcpu, paramnr+(2*i), tsh); in kvmppc_h_pr_bulk_remove()
208 mutex_unlock(&vcpu->kvm->arch.hpt_mutex); in kvmppc_h_pr_bulk_remove()
209 kvmppc_set_gpr(vcpu, 3, ret); in kvmppc_h_pr_bulk_remove()
214 static int kvmppc_h_pr_protect(struct kvm_vcpu *vcpu) in kvmppc_h_pr_protect() argument
216 unsigned long flags = kvmppc_get_gpr(vcpu, 4); in kvmppc_h_pr_protect()
217 unsigned long pte_index = kvmppc_get_gpr(vcpu, 5); in kvmppc_h_pr_protect()
218 unsigned long avpn = kvmppc_get_gpr(vcpu, 6); in kvmppc_h_pr_protect()
223 pteg = get_pteg_addr(vcpu, pte_index); in kvmppc_h_pr_protect()
224 mutex_lock(&vcpu->kvm->arch.hpt_mutex); in kvmppc_h_pr_protect()
247 vcpu->arch.mmu.tlbie(vcpu, rb, rb & 1 ? true : false); in kvmppc_h_pr_protect()
256 mutex_unlock(&vcpu->kvm->arch.hpt_mutex); in kvmppc_h_pr_protect()
257 kvmppc_set_gpr(vcpu, 3, ret); in kvmppc_h_pr_protect()
262 static int kvmppc_h_pr_logical_ci_load(struct kvm_vcpu *vcpu) in kvmppc_h_pr_logical_ci_load() argument
266 rc = kvmppc_h_logical_ci_load(vcpu); in kvmppc_h_pr_logical_ci_load()
269 kvmppc_set_gpr(vcpu, 3, rc); in kvmppc_h_pr_logical_ci_load()
273 static int kvmppc_h_pr_logical_ci_store(struct kvm_vcpu *vcpu) in kvmppc_h_pr_logical_ci_store() argument
277 rc = kvmppc_h_logical_ci_store(vcpu); in kvmppc_h_pr_logical_ci_store()
280 kvmppc_set_gpr(vcpu, 3, rc); in kvmppc_h_pr_logical_ci_store()
285 static int kvmppc_h_pr_put_tce(struct kvm_vcpu *vcpu) in kvmppc_h_pr_put_tce() argument
287 unsigned long liobn = kvmppc_get_gpr(vcpu, 4); in kvmppc_h_pr_put_tce()
288 unsigned long ioba = kvmppc_get_gpr(vcpu, 5); in kvmppc_h_pr_put_tce()
289 unsigned long tce = kvmppc_get_gpr(vcpu, 6); in kvmppc_h_pr_put_tce()
292 rc = kvmppc_h_put_tce(vcpu, liobn, ioba, tce); in kvmppc_h_pr_put_tce()
295 kvmppc_set_gpr(vcpu, 3, rc); in kvmppc_h_pr_put_tce()
299 static int kvmppc_h_pr_put_tce_indirect(struct kvm_vcpu *vcpu) in kvmppc_h_pr_put_tce_indirect() argument
301 unsigned long liobn = kvmppc_get_gpr(vcpu, 4); in kvmppc_h_pr_put_tce_indirect()
302 unsigned long ioba = kvmppc_get_gpr(vcpu, 5); in kvmppc_h_pr_put_tce_indirect()
303 unsigned long tce = kvmppc_get_gpr(vcpu, 6); in kvmppc_h_pr_put_tce_indirect()
304 unsigned long npages = kvmppc_get_gpr(vcpu, 7); in kvmppc_h_pr_put_tce_indirect()
307 rc = kvmppc_h_put_tce_indirect(vcpu, liobn, ioba, in kvmppc_h_pr_put_tce_indirect()
311 kvmppc_set_gpr(vcpu, 3, rc); in kvmppc_h_pr_put_tce_indirect()
315 static int kvmppc_h_pr_stuff_tce(struct kvm_vcpu *vcpu) in kvmppc_h_pr_stuff_tce() argument
317 unsigned long liobn = kvmppc_get_gpr(vcpu, 4); in kvmppc_h_pr_stuff_tce()
318 unsigned long ioba = kvmppc_get_gpr(vcpu, 5); in kvmppc_h_pr_stuff_tce()
319 unsigned long tce_value = kvmppc_get_gpr(vcpu, 6); in kvmppc_h_pr_stuff_tce()
320 unsigned long npages = kvmppc_get_gpr(vcpu, 7); in kvmppc_h_pr_stuff_tce()
323 rc = kvmppc_h_stuff_tce(vcpu, liobn, ioba, tce_value, npages); in kvmppc_h_pr_stuff_tce()
326 kvmppc_set_gpr(vcpu, 3, rc); in kvmppc_h_pr_stuff_tce()
331 static int kvmppc_h_pr_put_tce(struct kvm_vcpu *vcpu) in kvmppc_h_pr_put_tce() argument
336 static int kvmppc_h_pr_put_tce_indirect(struct kvm_vcpu *vcpu) in kvmppc_h_pr_put_tce_indirect() argument
341 static int kvmppc_h_pr_stuff_tce(struct kvm_vcpu *vcpu) in kvmppc_h_pr_stuff_tce() argument
347 static int kvmppc_h_pr_xics_hcall(struct kvm_vcpu *vcpu, u32 cmd) in kvmppc_h_pr_xics_hcall() argument
349 long rc = kvmppc_xics_hcall(vcpu, cmd); in kvmppc_h_pr_xics_hcall()
350 kvmppc_set_gpr(vcpu, 3, rc); in kvmppc_h_pr_xics_hcall()
354 int kvmppc_h_pr(struct kvm_vcpu *vcpu, unsigned long cmd) in kvmppc_h_pr() argument
359 !test_bit(cmd/4, vcpu->kvm->arch.enabled_hcalls)) in kvmppc_h_pr()
364 return kvmppc_h_pr_enter(vcpu); in kvmppc_h_pr()
366 return kvmppc_h_pr_remove(vcpu); in kvmppc_h_pr()
368 return kvmppc_h_pr_protect(vcpu); in kvmppc_h_pr()
370 return kvmppc_h_pr_bulk_remove(vcpu); in kvmppc_h_pr()
372 return kvmppc_h_pr_put_tce(vcpu); in kvmppc_h_pr()
374 return kvmppc_h_pr_put_tce_indirect(vcpu); in kvmppc_h_pr()
376 return kvmppc_h_pr_stuff_tce(vcpu); in kvmppc_h_pr()
378 kvmppc_set_msr_fast(vcpu, kvmppc_get_msr(vcpu) | MSR_EE); in kvmppc_h_pr()
379 kvm_vcpu_block(vcpu); in kvmppc_h_pr()
380 kvm_clear_request(KVM_REQ_UNHALT, vcpu); in kvmppc_h_pr()
381 vcpu->stat.halt_wakeup++; in kvmppc_h_pr()
384 return kvmppc_h_pr_logical_ci_load(vcpu); in kvmppc_h_pr()
386 return kvmppc_h_pr_logical_ci_store(vcpu); in kvmppc_h_pr()
393 if (kvmppc_xics_enabled(vcpu)) in kvmppc_h_pr()
394 return kvmppc_h_pr_xics_hcall(vcpu, cmd); in kvmppc_h_pr()
397 if (list_empty(&vcpu->kvm->arch.rtas_tokens)) in kvmppc_h_pr()
399 idx = srcu_read_lock(&vcpu->kvm->srcu); in kvmppc_h_pr()
400 rc = kvmppc_rtas_hcall(vcpu); in kvmppc_h_pr()
401 srcu_read_unlock(&vcpu->kvm->srcu, idx); in kvmppc_h_pr()
404 kvmppc_set_gpr(vcpu, 3, 0); in kvmppc_h_pr()