The function only works against the current CPU, thus should avoid to
take the misleading parameter. The implementations can obtain the
reference inline as needed.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
/* wait_for_sipi is only modified on this CPU, so checking outside of
* control_lock is fine */
if (cpu_data->wait_for_sipi)
- vcpu_park(cpu_data);
+ vcpu_park();
else if (sipi_vector >= 0)
apic_clear();
x86_enter_wait_for_sipi(cpu_data);
spin_unlock(&cpu_data->control_lock);
- vcpu_park(cpu_data);
+ vcpu_park();
}
void vcpu_handle_exit(struct registers *guest_regs, struct per_cpu *cpu_data);
-void vcpu_park(struct per_cpu *cpu_data);
+void vcpu_park(void);
void vcpu_nmi_handler(void);
panic_park();
}
-void vcpu_park(struct per_cpu *cpu_data)
+void vcpu_park(void)
{
- struct vmcb *vmcb = &cpu_data->vmcb;
-
- svm_vcpu_reset(cpu_data, APIC_BSP_PSEUDO_SIPI);
+ svm_vcpu_reset(this_cpu_data(), APIC_BSP_PSEUDO_SIPI);
/* No need to clear VMCB Clean bit: vcpu_reset() already does this */
- vmcb->n_cr3 = paging_hvirt2phys(parked_mode_npt);
+ this_cpu_data()->vmcb.n_cr3 = paging_hvirt2phys(parked_mode_npt);
vcpu_tlb_flush();
}
vmcs_write32(PIN_BASED_VM_EXEC_CONTROL, pin_based_ctrl);
}
-void vcpu_park(struct per_cpu *cpu_data)
+void vcpu_park(void)
{
vmx_vcpu_reset(0);
vmcs_write32(GUEST_ACTIVITY_STATE, GUEST_ACTIVITY_HLT);