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