Lines Matching refs:vcpu

31 static inline void kvm_async_page_present_sync(struct kvm_vcpu *vcpu,  in kvm_async_page_present_sync()  argument
35 kvm_arch_async_page_present(vcpu, work); in kvm_async_page_present_sync()
38 static inline void kvm_async_page_present_async(struct kvm_vcpu *vcpu, in kvm_async_page_present_async() argument
42 kvm_arch_async_page_present(vcpu, work); in kvm_async_page_present_async()
65 void kvm_async_pf_vcpu_init(struct kvm_vcpu *vcpu) in kvm_async_pf_vcpu_init() argument
67 INIT_LIST_HEAD(&vcpu->async_pf.done); in kvm_async_pf_vcpu_init()
68 INIT_LIST_HEAD(&vcpu->async_pf.queue); in kvm_async_pf_vcpu_init()
69 spin_lock_init(&vcpu->async_pf.lock); in kvm_async_pf_vcpu_init()
77 struct kvm_vcpu *vcpu = apf->vcpu; in async_pf_execute() local
84 kvm_async_page_present_sync(vcpu, apf); in async_pf_execute()
86 spin_lock(&vcpu->async_pf.lock); in async_pf_execute()
87 list_add_tail(&apf->link, &vcpu->async_pf.done); in async_pf_execute()
88 spin_unlock(&vcpu->async_pf.lock); in async_pf_execute()
101 if (waitqueue_active(&vcpu->wq)) in async_pf_execute()
102 wake_up_interruptible(&vcpu->wq); in async_pf_execute()
105 kvm_put_kvm(vcpu->kvm); in async_pf_execute()
108 void kvm_clear_async_pf_completion_queue(struct kvm_vcpu *vcpu) in kvm_clear_async_pf_completion_queue() argument
111 while (!list_empty(&vcpu->async_pf.queue)) { in kvm_clear_async_pf_completion_queue()
113 list_entry(vcpu->async_pf.queue.next, in kvm_clear_async_pf_completion_queue()
122 kvm_put_kvm(vcpu->kvm); /* == work->vcpu->kvm */ in kvm_clear_async_pf_completion_queue()
128 spin_lock(&vcpu->async_pf.lock); in kvm_clear_async_pf_completion_queue()
129 while (!list_empty(&vcpu->async_pf.done)) { in kvm_clear_async_pf_completion_queue()
131 list_entry(vcpu->async_pf.done.next, in kvm_clear_async_pf_completion_queue()
136 spin_unlock(&vcpu->async_pf.lock); in kvm_clear_async_pf_completion_queue()
138 vcpu->async_pf.queued = 0; in kvm_clear_async_pf_completion_queue()
141 void kvm_check_async_pf_completion(struct kvm_vcpu *vcpu) in kvm_check_async_pf_completion() argument
145 while (!list_empty_careful(&vcpu->async_pf.done) && in kvm_check_async_pf_completion()
146 kvm_arch_can_inject_async_page_present(vcpu)) { in kvm_check_async_pf_completion()
147 spin_lock(&vcpu->async_pf.lock); in kvm_check_async_pf_completion()
148 work = list_first_entry(&vcpu->async_pf.done, typeof(*work), in kvm_check_async_pf_completion()
151 spin_unlock(&vcpu->async_pf.lock); in kvm_check_async_pf_completion()
153 kvm_arch_async_page_ready(vcpu, work); in kvm_check_async_pf_completion()
154 kvm_async_page_present_async(vcpu, work); in kvm_check_async_pf_completion()
157 vcpu->async_pf.queued--; in kvm_check_async_pf_completion()
162 int kvm_setup_async_pf(struct kvm_vcpu *vcpu, gva_t gva, unsigned long hva, in kvm_setup_async_pf() argument
167 if (vcpu->async_pf.queued >= ASYNC_PF_PER_VCPU) in kvm_setup_async_pf()
181 work->vcpu = vcpu; in kvm_setup_async_pf()
187 kvm_get_kvm(work->vcpu->kvm); in kvm_setup_async_pf()
198 list_add_tail(&work->queue, &vcpu->async_pf.queue); in kvm_setup_async_pf()
199 vcpu->async_pf.queued++; in kvm_setup_async_pf()
200 kvm_arch_async_page_not_present(vcpu, work); in kvm_setup_async_pf()
203 kvm_put_kvm(work->vcpu->kvm); in kvm_setup_async_pf()
209 int kvm_async_pf_wakeup_all(struct kvm_vcpu *vcpu) in kvm_async_pf_wakeup_all() argument
213 if (!list_empty_careful(&vcpu->async_pf.done)) in kvm_async_pf_wakeup_all()
223 spin_lock(&vcpu->async_pf.lock); in kvm_async_pf_wakeup_all()
224 list_add_tail(&work->link, &vcpu->async_pf.done); in kvm_async_pf_wakeup_all()
225 spin_unlock(&vcpu->async_pf.lock); in kvm_async_pf_wakeup_all()
227 vcpu->async_pf.queued++; in kvm_async_pf_wakeup_all()