Commit 8a14fe4f authored by Jim Mattson's avatar Jim Mattson Committed by Paolo Bonzini

kvm: x86: Move last_cpu into kvm_vcpu_arch as last_vmentry_cpu

Both the vcpu_vmx structure and the vcpu_svm structure have a
'last_cpu' field. Move the common field into the kvm_vcpu_arch
structure. For clarity, rename it to 'last_vmentry_cpu.'
Suggested-by: default avatarSean Christopherson <sean.j.christopherson@intel.com>
Signed-off-by: default avatarJim Mattson <jmattson@google.com>
Reviewed-by: default avatarOliver Upton <oupton@google.com>
Reviewed-by: default avatarPeter Shier <pshier@google.com>
Message-Id: <20200603235623.245638-6-jmattson@google.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 1aa561b1
...@@ -827,6 +827,9 @@ struct kvm_vcpu_arch { ...@@ -827,6 +827,9 @@ struct kvm_vcpu_arch {
/* Flush the L1 Data cache for L1TF mitigation on VMENTER */ /* Flush the L1 Data cache for L1TF mitigation on VMENTER */
bool l1tf_flush_l1d; bool l1tf_flush_l1d;
/* Host CPU on which VM-entry was most recently attempted */
unsigned int last_vmentry_cpu;
/* AMD MSRC001_0015 Hardware Configuration */ /* AMD MSRC001_0015 Hardware Configuration */
u64 msr_hwcr; u64 msr_hwcr;
}; };
......
...@@ -1186,7 +1186,7 @@ void pre_sev_run(struct vcpu_svm *svm, int cpu) ...@@ -1186,7 +1186,7 @@ void pre_sev_run(struct vcpu_svm *svm, int cpu)
* 2) or this VMCB was executed on different host CPU in previous VMRUNs. * 2) or this VMCB was executed on different host CPU in previous VMRUNs.
*/ */
if (sd->sev_vmcbs[asid] == svm->vmcb && if (sd->sev_vmcbs[asid] == svm->vmcb &&
svm->last_cpu == cpu) svm->vcpu.arch.last_vmentry_cpu == cpu)
return; return;
sd->sev_vmcbs[asid] = svm->vmcb; sd->sev_vmcbs[asid] = svm->vmcb;
......
...@@ -2947,7 +2947,7 @@ static int handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath) ...@@ -2947,7 +2947,7 @@ static int handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath)
kvm_run->exit_reason = KVM_EXIT_FAIL_ENTRY; kvm_run->exit_reason = KVM_EXIT_FAIL_ENTRY;
kvm_run->fail_entry.hardware_entry_failure_reason kvm_run->fail_entry.hardware_entry_failure_reason
= svm->vmcb->control.exit_code; = svm->vmcb->control.exit_code;
kvm_run->fail_entry.cpu = svm->last_cpu; kvm_run->fail_entry.cpu = vcpu->arch.last_vmentry_cpu;
dump_vmcb(vcpu); dump_vmcb(vcpu);
return 0; return 0;
} }
...@@ -2973,7 +2973,7 @@ static int handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath) ...@@ -2973,7 +2973,7 @@ static int handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath)
KVM_INTERNAL_ERROR_UNEXPECTED_EXIT_REASON; KVM_INTERNAL_ERROR_UNEXPECTED_EXIT_REASON;
vcpu->run->internal.ndata = 2; vcpu->run->internal.ndata = 2;
vcpu->run->internal.data[0] = exit_code; vcpu->run->internal.data[0] = exit_code;
vcpu->run->internal.data[1] = svm->last_cpu; vcpu->run->internal.data[1] = vcpu->arch.last_vmentry_cpu;
return 0; return 0;
} }
...@@ -3398,7 +3398,7 @@ static __no_kcsan fastpath_t svm_vcpu_run(struct kvm_vcpu *vcpu) ...@@ -3398,7 +3398,7 @@ static __no_kcsan fastpath_t svm_vcpu_run(struct kvm_vcpu *vcpu)
*/ */
x86_spec_ctrl_set_guest(svm->spec_ctrl, svm->virt_spec_ctrl); x86_spec_ctrl_set_guest(svm->spec_ctrl, svm->virt_spec_ctrl);
svm->last_cpu = vcpu->cpu; vcpu->arch.last_vmentry_cpu = vcpu->cpu;
__svm_vcpu_run(svm->vmcb_pa, (unsigned long *)&svm->vcpu.arch.regs); __svm_vcpu_run(svm->vmcb_pa, (unsigned long *)&svm->vcpu.arch.regs);
#ifdef CONFIG_X86_64 #ifdef CONFIG_X86_64
......
...@@ -158,9 +158,6 @@ struct vcpu_svm { ...@@ -158,9 +158,6 @@ struct vcpu_svm {
*/ */
struct list_head ir_list; struct list_head ir_list;
spinlock_t ir_list_lock; spinlock_t ir_list_lock;
/* which host CPU was used for running this vcpu */
unsigned int last_cpu;
}; };
struct svm_cpu_data { struct svm_cpu_data {
......
...@@ -4785,7 +4785,7 @@ static int handle_exception_nmi(struct kvm_vcpu *vcpu) ...@@ -4785,7 +4785,7 @@ static int handle_exception_nmi(struct kvm_vcpu *vcpu)
vcpu->run->internal.data[0] = vect_info; vcpu->run->internal.data[0] = vect_info;
vcpu->run->internal.data[1] = intr_info; vcpu->run->internal.data[1] = intr_info;
vcpu->run->internal.data[2] = error_code; vcpu->run->internal.data[2] = error_code;
vcpu->run->internal.data[3] = vmx->last_cpu; vcpu->run->internal.data[3] = vcpu->arch.last_vmentry_cpu;
return 0; return 0;
} }
...@@ -6007,7 +6007,7 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath) ...@@ -6007,7 +6007,7 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath)
vcpu->run->exit_reason = KVM_EXIT_FAIL_ENTRY; vcpu->run->exit_reason = KVM_EXIT_FAIL_ENTRY;
vcpu->run->fail_entry.hardware_entry_failure_reason vcpu->run->fail_entry.hardware_entry_failure_reason
= exit_reason; = exit_reason;
vcpu->run->fail_entry.cpu = vmx->last_cpu; vcpu->run->fail_entry.cpu = vcpu->arch.last_vmentry_cpu;
return 0; return 0;
} }
...@@ -6016,7 +6016,7 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath) ...@@ -6016,7 +6016,7 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath)
vcpu->run->exit_reason = KVM_EXIT_FAIL_ENTRY; vcpu->run->exit_reason = KVM_EXIT_FAIL_ENTRY;
vcpu->run->fail_entry.hardware_entry_failure_reason vcpu->run->fail_entry.hardware_entry_failure_reason
= vmcs_read32(VM_INSTRUCTION_ERROR); = vmcs_read32(VM_INSTRUCTION_ERROR);
vcpu->run->fail_entry.cpu = vmx->last_cpu; vcpu->run->fail_entry.cpu = vcpu->arch.last_vmentry_cpu;
return 0; return 0;
} }
...@@ -6044,7 +6044,7 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath) ...@@ -6044,7 +6044,7 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath)
vmcs_read64(GUEST_PHYSICAL_ADDRESS); vmcs_read64(GUEST_PHYSICAL_ADDRESS);
} }
vcpu->run->internal.data[vcpu->run->internal.ndata++] = vcpu->run->internal.data[vcpu->run->internal.ndata++] =
vmx->last_cpu; vcpu->arch.last_vmentry_cpu;
return 0; return 0;
} }
...@@ -6102,7 +6102,7 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath) ...@@ -6102,7 +6102,7 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath)
KVM_INTERNAL_ERROR_UNEXPECTED_EXIT_REASON; KVM_INTERNAL_ERROR_UNEXPECTED_EXIT_REASON;
vcpu->run->internal.ndata = 2; vcpu->run->internal.ndata = 2;
vcpu->run->internal.data[0] = exit_reason; vcpu->run->internal.data[0] = exit_reason;
vcpu->run->internal.data[1] = vmx->last_cpu; vcpu->run->internal.data[1] = vcpu->arch.last_vmentry_cpu;
return 0; return 0;
} }
...@@ -6740,7 +6740,7 @@ static fastpath_t vmx_vcpu_run(struct kvm_vcpu *vcpu) ...@@ -6740,7 +6740,7 @@ static fastpath_t vmx_vcpu_run(struct kvm_vcpu *vcpu)
if (vcpu->arch.cr2 != read_cr2()) if (vcpu->arch.cr2 != read_cr2())
write_cr2(vcpu->arch.cr2); write_cr2(vcpu->arch.cr2);
vmx->last_cpu = vcpu->cpu; vcpu->arch.last_vmentry_cpu = vcpu->cpu;
vmx->fail = __vmx_vcpu_run(vmx, (unsigned long *)&vcpu->arch.regs, vmx->fail = __vmx_vcpu_run(vmx, (unsigned long *)&vcpu->arch.regs,
vmx->loaded_vmcs->launched); vmx->loaded_vmcs->launched);
......
...@@ -300,9 +300,6 @@ struct vcpu_vmx { ...@@ -300,9 +300,6 @@ struct vcpu_vmx {
u64 ept_pointer; u64 ept_pointer;
struct pt_desc pt_desc; struct pt_desc pt_desc;
/* which host CPU was used for running this vcpu */
unsigned int last_cpu;
}; };
enum ept_pointers_status { enum ept_pointers_status {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment