kvm_run->exit_reason = KVM_EXIT_FAIL_ENTRY;
                kvm_run->fail_entry.hardware_entry_failure_reason
                        = svm->vmcb->control.exit_code;
+               kvm_run->fail_entry.cpu = svm->last_cpu;
                dump_vmcb(vcpu);
                return 0;
        }
                vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
                vcpu->run->internal.suberror =
                        KVM_INTERNAL_ERROR_UNEXPECTED_EXIT_REASON;
-               vcpu->run->internal.ndata = 1;
+               vcpu->run->internal.ndata = 2;
                vcpu->run->internal.data[0] = exit_code;
+               vcpu->run->internal.data[1] = svm->last_cpu;
                return 0;
        }
 
 
            !(is_page_fault(intr_info) && !(error_code & PFERR_RSVD_MASK))) {
                vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
                vcpu->run->internal.suberror = KVM_INTERNAL_ERROR_SIMUL_EX;
-               vcpu->run->internal.ndata = 3;
+               vcpu->run->internal.ndata = 4;
                vcpu->run->internal.data[0] = vect_info;
                vcpu->run->internal.data[1] = intr_info;
                vcpu->run->internal.data[2] = error_code;
+               vcpu->run->internal.data[3] = vmx->last_cpu;
                return 0;
        }
 
                vcpu->run->exit_reason = KVM_EXIT_FAIL_ENTRY;
                vcpu->run->fail_entry.hardware_entry_failure_reason
                        = exit_reason;
+               vcpu->run->fail_entry.cpu = vmx->last_cpu;
                return 0;
        }
 
                vcpu->run->exit_reason = KVM_EXIT_FAIL_ENTRY;
                vcpu->run->fail_entry.hardware_entry_failure_reason
                        = vmcs_read32(VM_INSTRUCTION_ERROR);
+               vcpu->run->fail_entry.cpu = vmx->last_cpu;
                return 0;
        }
 
                        vcpu->run->internal.data[3] =
                                vmcs_read64(GUEST_PHYSICAL_ADDRESS);
                }
+               vcpu->run->internal.data[vcpu->run->internal.ndata++] =
+                       vmx->last_cpu;
                return 0;
        }
 
        vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
        vcpu->run->internal.suberror =
                        KVM_INTERNAL_ERROR_UNEXPECTED_EXIT_REASON;
-       vcpu->run->internal.ndata = 1;
+       vcpu->run->internal.ndata = 2;
        vcpu->run->internal.data[0] = exit_reason;
+       vcpu->run->internal.data[1] = vmx->last_cpu;
        return 0;
 }
 
 
                /* KVM_EXIT_FAIL_ENTRY */
                struct {
                        __u64 hardware_entry_failure_reason;
+                       __u32 cpu;
                } fail_entry;
                /* KVM_EXIT_EXCEPTION */
                struct {
 #define KVM_CAP_PPC_SECURE_GUEST 181
 #define KVM_CAP_HALT_POLL 182
 #define KVM_CAP_ASYNC_PF_INT 183
+#define KVM_CAP_LAST_CPU 184
 
 #ifdef KVM_CAP_IRQ_ROUTING