bool vcpu_handle_xsetbv(void);
-void vcpu_reset(bool hard_reset);
+void vcpu_reset(unsigned int sipi_vector);
+void vcpu_vendor_reset(unsigned int sipi_vector);
#endif
__builtin_unreachable();
}
-static void svm_vcpu_reset(struct per_cpu *cpu_data, unsigned int sipi_vector)
+void vcpu_vendor_reset(unsigned int sipi_vector)
{
static const struct svm_segment dataseg_reset_state = {
.selector = 0,
.limit = 0xffff,
.access_rights = 0,
};
+ struct per_cpu *cpu_data = this_cpu_data();
struct vmcb *vmcb = &cpu_data->vmcb;
unsigned long val;
if (sipi_vector >= 0) {
printk("CPU %d received SIPI, vector %x\n",
cpu_data->cpu_id, sipi_vector);
- svm_vcpu_reset(cpu_data, sipi_vector);
- vcpu_reset(sipi_vector == APIC_BSP_PSEUDO_SIPI);
+ vcpu_reset(sipi_vector);
}
iommu_check_pending_faults();
goto vmentry;
void vcpu_park(void)
{
- svm_vcpu_reset(this_cpu_data(), APIC_BSP_PSEUDO_SIPI);
- /* No need to clear VMCB Clean bit: vcpu_reset() already does this */
+ vcpu_vendor_reset(APIC_BSP_PSEUDO_SIPI);
+ /* No need to clear VMCB Clean bit: vcpu_vendor_reset() already does
+ * this. */
this_cpu_data()->vmcb.n_cr3 = paging_hvirt2phys(parked_mode_npt);
vcpu_tlb_flush();
return false;
}
-void vcpu_reset(bool hard_reset)
+void vcpu_reset(unsigned int sipi_vector)
{
struct per_cpu *cpu_data = this_cpu_data();
+ vcpu_vendor_reset(sipi_vector);
+
memset(&cpu_data->guest_regs, 0, sizeof(cpu_data->guest_regs));
- if (hard_reset) {
+ if (sipi_vector == APIC_BSP_PSEUDO_SIPI) {
cpu_data->pat = PAT_RESET_VALUE;
cpu_data->mtrr_def_type = 0;
vcpu_vendor_set_guest_pat(0);
__builtin_unreachable();
}
-static void vmx_vcpu_reset(unsigned int sipi_vector)
+void vcpu_vendor_reset(unsigned int sipi_vector)
{
unsigned long val;
bool ok = true;
void vcpu_park(void)
{
- vmx_vcpu_reset(0);
+ vcpu_vendor_reset(0);
vmcs_write32(GUEST_ACTIVITY_STATE, GUEST_ACTIVITY_HLT);
}
if (sipi_vector >= 0) {
printk("CPU %d received SIPI, vector %x\n",
cpu_data->cpu_id, sipi_vector);
- vmx_vcpu_reset(sipi_vector);
- vcpu_reset(sipi_vector == APIC_BSP_PSEUDO_SIPI);
+ vcpu_reset(sipi_vector);
}
iommu_check_pending_faults();
return;