if (err)
                goto out_vcpu_uninit;
 
-       vcpu->arch.waitp = &vcpu->wait;
+       rcuwait_init(&vcpu->arch.wait);
+       vcpu->arch.waitp = &vcpu->arch.wait;
        kvmppc_create_vcpu_debugfs(vcpu, vcpu->vcpu_id);
        return 0;
 
 
 
        trace_kvm_async_pf_completed(addr, cr2_or_gpa);
 
-       rcuwait_wake_up(&vcpu->wait);
+       rcuwait_wake_up(kvm_arch_vcpu_get_wait(vcpu));
 
        mmput(mm);
        kvm_put_kvm(vcpu->kvm);
 
        vcpu->kvm = kvm;
        vcpu->vcpu_id = id;
        vcpu->pid = NULL;
+#ifndef __KVM_HAVE_ARCH_WQP
        rcuwait_init(&vcpu->wait);
+#endif
        kvm_async_pf_vcpu_init(vcpu);
 
        vcpu->pre_pcpu = -1;
  */
 void kvm_vcpu_block(struct kvm_vcpu *vcpu)
 {
+       struct rcuwait *wait = kvm_arch_vcpu_get_wait(vcpu);
        bool halt_poll_allowed = !kvm_arch_no_poll(vcpu);
        ktime_t start, cur, poll_end;
        bool waited = false;
        }
 
 
-       prepare_to_rcuwait(&vcpu->wait);
+       prepare_to_rcuwait(wait);
        for (;;) {
                set_current_state(TASK_INTERRUPTIBLE);
 
                waited = true;
                schedule();
        }
-       finish_rcuwait(&vcpu->wait);
+       finish_rcuwait(wait);
        cur = ktime_get();
        if (waited) {
                vcpu->stat.generic.halt_wait_ns +=
                                continue;
                        if (vcpu == me)
                                continue;
-                       if (rcuwait_active(&vcpu->wait) &&
+                       if (rcuwait_active(kvm_arch_vcpu_get_wait(vcpu)) &&
                            !vcpu_dy_runnable(vcpu))
                                continue;
                        if (READ_ONCE(vcpu->preempted) && yield_to_kernel_mode &&