Lines Matching full:vpa
490 static void init_vpa(struct kvm_vcpu *vcpu, struct lppaca *vpa) in init_vpa() argument
492 vpa->__old_status |= LPPACA_OLD_SHARED_PROC; in init_vpa()
493 vpa->yield_count = cpu_to_be32(1); in init_vpa()
530 unsigned long vcpuid, unsigned long vpa) in do_h_register_vpa() argument
548 if ((vpa & (L1_CACHE_BYTES - 1)) || !vpa) in do_h_register_vpa()
552 va = kvmppc_pin_guest_page(kvm, vpa, &nb); in do_h_register_vpa()
559 kvmppc_unpin_guest_page(kvm, va, vpa, false); in do_h_register_vpa()
565 vpa = 0; in do_h_register_vpa()
574 case H_VPA_REG_VPA: /* register VPA */ in do_h_register_vpa()
584 vpap = &tvcpu->arch.vpa; in do_h_register_vpa()
593 /* Check that they have previously registered a VPA */ in do_h_register_vpa()
595 if (!vpa_is_registered(&tvcpu->arch.vpa)) in do_h_register_vpa()
603 /* Check that they have previously registered a VPA */ in do_h_register_vpa()
605 if (!vpa_is_registered(&tvcpu->arch.vpa)) in do_h_register_vpa()
612 case H_VPA_DEREG_VPA: /* deregister VPA */ in do_h_register_vpa()
619 vpap = &tvcpu->arch.vpa; in do_h_register_vpa()
635 vpap->next_gpa = vpa; in do_h_register_vpa()
697 if (!(vcpu->arch.vpa.update_pending || in kvmppc_update_vpas()
703 if (vcpu->arch.vpa.update_pending) { in kvmppc_update_vpas()
704 kvmppc_update_vpa(vcpu, &vcpu->arch.vpa); in kvmppc_update_vpas()
705 if (vcpu->arch.vpa.pinned_addr) in kvmppc_update_vpas()
706 init_vpa(vcpu, vcpu->arch.vpa.pinned_addr); in kvmppc_update_vpas()
739 struct lppaca *vpa, in __kvmppc_create_dtl_entry() argument
765 /* order writing *dt vs. writing vpa->dtl_idx */ in __kvmppc_create_dtl_entry()
767 vpa->dtl_idx = cpu_to_be64(++vcpu->arch.dtl_index); in __kvmppc_create_dtl_entry()
775 struct lppaca *vpa; in kvmppc_update_vpa_dispatch() local
781 vpa = vcpu->arch.vpa.pinned_addr; in kvmppc_update_vpa_dispatch()
782 if (!vpa) in kvmppc_update_vpa_dispatch()
795 vpa->enqueue_dispatch_tb = cpu_to_be64(be64_to_cpu(vpa->enqueue_dispatch_tb) + stolen); in kvmppc_update_vpa_dispatch()
797 __kvmppc_create_dtl_entry(vcpu, vpa, vc->pcpu, now + vc->tb_offset, stolen); in kvmppc_update_vpa_dispatch()
799 vcpu->arch.vpa.dirty = true; in kvmppc_update_vpa_dispatch()
806 struct lppaca *vpa; in kvmppc_update_vpa_dispatch_p9() local
810 vpa = vcpu->arch.vpa.pinned_addr; in kvmppc_update_vpa_dispatch_p9()
811 if (!vpa) in kvmppc_update_vpa_dispatch_p9()
818 vpa->enqueue_dispatch_tb = cpu_to_be64(stolen); in kvmppc_update_vpa_dispatch_p9()
820 __kvmppc_create_dtl_entry(vcpu, vpa, vc->pcpu, now, stolen_delta); in kvmppc_update_vpa_dispatch_p9()
822 vcpu->arch.vpa.dirty = true; in kvmppc_update_vpa_dispatch_p9()
1022 lppaca = (struct lppaca *)vcpu->arch.vpa.pinned_addr; in kvmppc_get_yield_count()
2325 *val = get_reg_val(id, vcpu->arch.vpa.next_gpa); in kvmppc_get_one_reg_hv()
2575 r = set_vpa(vcpu, &vcpu->arch.vpa, addr, sizeof(struct lppaca)); in kvmppc_set_one_reg_hv()
2581 if (addr && !vcpu->arch.vpa.next_gpa) in kvmppc_set_one_reg_hv()
2590 !vcpu->arch.vpa.next_gpa)) in kvmppc_set_one_reg_hv()
3068 static void unpin_vpa(struct kvm *kvm, struct kvmppc_vpa *vpa) in unpin_vpa() argument
3070 if (vpa->pinned_addr) in unpin_vpa()
3071 kvmppc_unpin_guest_page(kvm, vpa->pinned_addr, vpa->gpa, in unpin_vpa()
3072 vpa->dirty); in unpin_vpa()
3080 unpin_vpa(vcpu->kvm, &vcpu->arch.vpa); in kvmppc_core_vcpu_free_hv()
3522 else if (vcpu->arch.vpa.update_pending || in prepare_threads()
3733 * or need a VPA update done in kvmppc_run_core()
4038 struct lppaca *lp = vcpu->arch.vpa.pinned_addr; in vcpu_vpa_increment_dispatch()
4042 vcpu->arch.vpa.dirty = 1; in vcpu_vpa_increment_dispatch()
5024 /* Harvest dirty bits from VPA and DTL updates */ in kvm_vm_ioctl_get_dirty_log_hv()
5028 kvmppc_harvest_vpa_dirty(&vcpu->arch.vpa, memslot, buf); in kvm_vm_ioctl_get_dirty_log_hv()
6044 static void unpin_vpa_reset(struct kvm *kvm, struct kvmppc_vpa *vpa) in unpin_vpa_reset() argument
6046 unpin_vpa(kvm, vpa); in unpin_vpa_reset()
6047 vpa->gpa = 0; in unpin_vpa_reset()
6048 vpa->pinned_addr = NULL; in unpin_vpa_reset()
6049 vpa->dirty = false; in unpin_vpa_reset()
6050 vpa->update_pending = 0; in unpin_vpa_reset()
6073 * - Unpin the VPA pages.
6125 * chance to run and unpin their VPA pages. Unpinning of all in kvmhv_svm_off()
6126 * VPA pages is done here explicitly so that VPA pages in kvmhv_svm_off()
6136 unpin_vpa_reset(kvm, &vcpu->arch.vpa); in kvmhv_svm_off()