Lines Matching defs:vcpu

38 void kvm_async_pf_vcpu_init(struct kvm_vcpu *vcpu)
40 INIT_LIST_HEAD(&vcpu->async_pf.done);
41 INIT_LIST_HEAD(&vcpu->async_pf.queue);
42 spin_lock_init(&vcpu->async_pf.lock);
50 struct kvm_vcpu *vcpu = apf->vcpu;
70 kvm_arch_async_page_present(vcpu, apf);
72 spin_lock(&vcpu->async_pf.lock);
73 first = list_empty(&vcpu->async_pf.done);
74 list_add_tail(&apf->link, &vcpu->async_pf.done);
75 apf->vcpu = NULL;
76 spin_unlock(&vcpu->async_pf.lock);
79 kvm_arch_async_page_present_queued(vcpu);
88 rcuwait_wake_up(&vcpu->wait);
91 kvm_put_kvm(vcpu->kvm);
94 void kvm_clear_async_pf_completion_queue(struct kvm_vcpu *vcpu)
96 spin_lock(&vcpu->async_pf.lock);
99 while (!list_empty(&vcpu->async_pf.queue)) {
101 list_first_entry(&vcpu->async_pf.queue,
106 * We know it's present in vcpu->async_pf.done, do
109 if (!work->vcpu)
112 spin_unlock(&vcpu->async_pf.lock);
118 kvm_put_kvm(vcpu->kvm); /* == work->vcpu->kvm */
122 spin_lock(&vcpu->async_pf.lock);
125 while (!list_empty(&vcpu->async_pf.done)) {
127 list_first_entry(&vcpu->async_pf.done,
132 spin_unlock(&vcpu->async_pf.lock);
134 vcpu->async_pf.queued = 0;
137 void kvm_check_async_pf_completion(struct kvm_vcpu *vcpu)
141 while (!list_empty_careful(&vcpu->async_pf.done) &&
142 kvm_arch_can_dequeue_async_page_present(vcpu)) {
143 spin_lock(&vcpu->async_pf.lock);
144 work = list_first_entry(&vcpu->async_pf.done, typeof(*work),
147 spin_unlock(&vcpu->async_pf.lock);
149 kvm_arch_async_page_ready(vcpu, work);
151 kvm_arch_async_page_present(vcpu, work);
154 vcpu->async_pf.queued--;
163 bool kvm_setup_async_pf(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa,
168 if (vcpu->async_pf.queued >= ASYNC_PF_PER_VCPU)
184 work->vcpu = vcpu;
190 kvm_get_kvm(work->vcpu->kvm);
194 list_add_tail(&work->queue, &vcpu->async_pf.queue);
195 vcpu->async_pf.queued++;
196 work->notpresent_injected = kvm_arch_async_page_not_present(vcpu, work);
203 int kvm_async_pf_wakeup_all(struct kvm_vcpu *vcpu)
208 if (!list_empty_careful(&vcpu->async_pf.done))
218 spin_lock(&vcpu->async_pf.lock);
219 first = list_empty(&vcpu->async_pf.done);
220 list_add_tail(&work->link, &vcpu->async_pf.done);
221 spin_unlock(&vcpu->async_pf.lock);
224 kvm_arch_async_page_present_queued(vcpu);
226 vcpu->async_pf.queued++;