From 1b84741a562000cbb4d6a7f51d7c2a61ff720094 Mon Sep 17 00:00:00 2001 From: Mingqiang Chi Date: Thu, 18 Jun 2020 13:23:00 +0800 Subject: [PATCH] rename vm_lock/vlapic_state in VM structure rename: vlapic_state-->vlapic_mode vm_lock --> vlapic_mode_lock check_vm_vlapic_state --> check_vm_vlapic_mode Tracked-On: #4958 Signed-off-by: Mingqiang Chi --- hypervisor/arch/x86/guest/assign.c | 8 +++---- hypervisor/arch/x86/guest/vm.c | 32 +++++++++++++------------- hypervisor/common/hypercall.c | 7 +++--- hypervisor/include/arch/x86/guest/vm.h | 8 +++---- 4 files changed, 28 insertions(+), 27 deletions(-) diff --git a/hypervisor/arch/x86/guest/assign.c b/hypervisor/arch/x86/guest/assign.c index 6cecc9aa5..f13eec38b 100644 --- a/hypervisor/arch/x86/guest/assign.c +++ b/hypervisor/arch/x86/guest/assign.c @@ -589,21 +589,21 @@ int32_t ptirq_prepare_msix_remap(struct acrn_vm *vm, uint16_t virt_bdf, uint16_t /* build physical config MSI, update to info->pmsi_xxx */ if (is_lapic_pt_configured(vm)) { - enum vm_vlapic_state vlapic_state = check_vm_vlapic_state(vm); + enum vm_vlapic_mode vlapic_mode = check_vm_vlapic_mode(vm); - if (vlapic_state == VM_VLAPIC_X2APIC) { + if (vlapic_mode == VM_VLAPIC_X2APIC) { /* * All the vCPUs are in x2APIC mode and LAPIC is Pass-through * Use guest vector to program the interrupt source */ ptirq_build_physical_msi(vm, entry, (uint32_t)info->data.bits.vector, 0UL, irte_idx); - } else if (vlapic_state == VM_VLAPIC_XAPIC) { + } else if (vlapic_mode == VM_VLAPIC_XAPIC) { /* * All the vCPUs are in xAPIC mode and LAPIC is emulated * Use host vector to program the interrupt source */ ptirq_build_physical_msi(vm, entry, irq_to_vector(entry->allocated_pirq), 0UL, irte_idx); - } else if (vlapic_state == VM_VLAPIC_TRANSITION) { + } else if (vlapic_mode == VM_VLAPIC_TRANSITION) { /* * vCPUs are in middle of transition, so do not program interrupt source * TODO: Devices programmed during transistion do not work after transition diff --git a/hypervisor/arch/x86/guest/vm.c b/hypervisor/arch/x86/guest/vm.c index 6ebe6396f..4f9697e29 100644 --- a/hypervisor/arch/x86/guest/vm.c +++ b/hypervisor/arch/x86/guest/vm.c @@ -438,11 +438,11 @@ int32_t create_vm(uint16_t vm_id, uint64_t pcpu_bitmap, struct acrn_vm_config *v if (status == 0) { prepare_epc_vm_memmap(vm); - spinlock_init(&vm->vm_lock); + spinlock_init(&vm->vlapic_mode_lock); spinlock_init(&vm->ept_lock); spinlock_init(&vm->emul_mmio_lock); - vm->arch_vm.vlapic_state = VM_VLAPIC_XAPIC; + vm->arch_vm.vlapic_mode = VM_VLAPIC_XAPIC; vm->intr_inject_delay_delta = 0UL; /* Set up IO bit-mask such that VM exit occurs on @@ -660,7 +660,7 @@ int32_t reset_vm(struct acrn_vm *vm) /* * Set VM vLAPIC state to VM_VLAPIC_XAPIC */ - vm->arch_vm.vlapic_state = VM_VLAPIC_XAPIC; + vm->arch_vm.vlapic_mode = VM_VLAPIC_XAPIC; if (is_sos_vm(vm)) { (void)vm_sw_loader(vm); @@ -798,11 +798,11 @@ void update_vm_vlapic_state(struct acrn_vm *vm) uint16_t i; struct acrn_vcpu *vcpu; uint16_t vcpus_in_x2apic, vcpus_in_xapic; - enum vm_vlapic_state vlapic_state = VM_VLAPIC_XAPIC; + enum vm_vlapic_mode vlapic_mode = VM_VLAPIC_XAPIC; vcpus_in_x2apic = 0U; vcpus_in_xapic = 0U; - spinlock_obtain(&vm->vm_lock); + spinlock_obtain(&vm->vlapic_mode_lock); foreach_vcpu(i, vm, vcpu) { /* Skip vCPU in state outside of VCPU_RUNNING as it may be offline. */ if (vcpu->state == VCPU_RUNNING) { @@ -823,42 +823,42 @@ void update_vm_vlapic_state(struct acrn_vm *vm) * Check if the counts vcpus_in_x2apic and vcpus_in_xapic are zero * VM_VLAPIC_DISABLED */ - vlapic_state = VM_VLAPIC_DISABLED; + vlapic_mode = VM_VLAPIC_DISABLED; } else if ((vcpus_in_x2apic != 0U) && (vcpus_in_xapic != 0U)) { /* * Check if the counts vcpus_in_x2apic and vcpus_in_xapic are non-zero * VM_VLAPIC_TRANSITION */ - vlapic_state = VM_VLAPIC_TRANSITION; + vlapic_mode = VM_VLAPIC_TRANSITION; } else if (vcpus_in_x2apic != 0U) { /* * Check if the counts vcpus_in_x2apic is non-zero * VM_VLAPIC_X2APIC */ - vlapic_state = VM_VLAPIC_X2APIC; + vlapic_mode = VM_VLAPIC_X2APIC; } else { /* * Count vcpus_in_xapic is non-zero * VM_VLAPIC_XAPIC */ - vlapic_state = VM_VLAPIC_XAPIC; + vlapic_mode = VM_VLAPIC_XAPIC; } - vm->arch_vm.vlapic_state = vlapic_state; - spinlock_release(&vm->vm_lock); + vm->arch_vm.vlapic_mode = vlapic_mode; + spinlock_release(&vm->vlapic_mode_lock); } /* - * @brief Check state of vLAPICs of a VM + * @brief Check mode of vLAPICs of a VM * * @pre vm != NULL */ -enum vm_vlapic_state check_vm_vlapic_state(const struct acrn_vm *vm) +enum vm_vlapic_mode check_vm_vlapic_mode(const struct acrn_vm *vm) { - enum vm_vlapic_state vlapic_state; + enum vm_vlapic_mode vlapic_mode; - vlapic_state = vm->arch_vm.vlapic_state; - return vlapic_state; + vlapic_mode = vm->arch_vm.vlapic_mode; + return vlapic_mode; } /** diff --git a/hypervisor/common/hypercall.c b/hypervisor/common/hypercall.c index 74f3c8a77..6cbb77fc6 100644 --- a/hypervisor/common/hypercall.c +++ b/hypervisor/common/hypercall.c @@ -457,15 +457,16 @@ int32_t hcall_inject_msi(struct acrn_vm *vm, uint16_t vmid, uint64_t param) if (copy_from_gpa(vm, &msi, param, sizeof(msi)) == 0) { /* For target cpu with lapic pt, send ipi instead of injection via vlapic */ if (is_lapic_pt_configured(target_vm)) { - enum vm_vlapic_state vlapic_state = check_vm_vlapic_state(target_vm); - if (vlapic_state == VM_VLAPIC_X2APIC) { + enum vm_vlapic_mode vlapic_mode = check_vm_vlapic_mode(target_vm); + + if (vlapic_mode == VM_VLAPIC_X2APIC) { /* * All the vCPUs of VM are in x2APIC mode and LAPIC is PT * Inject the vMSI as an IPI directly to VM */ inject_msi_lapic_pt(target_vm, &msi); ret = 0; - } else if (vlapic_state == VM_VLAPIC_XAPIC) { + } else if (vlapic_mode == VM_VLAPIC_XAPIC) { /* * All the vCPUs of VM are in xAPIC and use vLAPIC * Inject using vLAPIC diff --git a/hypervisor/include/arch/x86/guest/vm.h b/hypervisor/include/arch/x86/guest/vm.h index b65ce04b7..317495d79 100644 --- a/hypervisor/include/arch/x86/guest/vm.h +++ b/hypervisor/include/arch/x86/guest/vm.h @@ -88,7 +88,7 @@ enum vm_state { VM_PAUSED, /* VM paused */ }; -enum vm_vlapic_state { +enum vm_vlapic_mode { VM_VLAPIC_DISABLED = 0U, VM_VLAPIC_XAPIC, VM_VLAPIC_X2APIC, @@ -113,7 +113,7 @@ struct vm_arch { #ifdef CONFIG_HYPERV_ENABLED struct acrn_hyperv hyperv; #endif - enum vm_vlapic_state vlapic_state; /* Represents vLAPIC state across vCPUs*/ + enum vm_vlapic_mode vlapic_mode; /* Represents vLAPIC mode across vCPUs*/ /* reference to virtual platform to come here (as needed) */ } __aligned(PAGE_SIZE); @@ -130,7 +130,7 @@ struct acrn_vm { struct acrn_vuart vuart[MAX_VUART_NUM_PER_VM]; /* Virtual UART */ enum vpic_wire_mode wire_mode; struct iommu_domain *iommu; /* iommu domain of this VM */ - spinlock_t vm_lock; /* Spin-lock used to protect vlapic_state modifications for a VM */ + spinlock_t vlapic_mode_lock; /* Spin-lock used to protect vlapic_mode modifications for a VM */ spinlock_t ept_lock; /* Spin-lock used to protect ept add/modify/remove for a VM */ spinlock_t emul_mmio_lock; /* Used to protect emulation mmio_node concurrent access for a VM */ @@ -257,7 +257,7 @@ bool has_rt_vm(void); struct acrn_vm *get_highest_severity_vm(bool runtime); bool vm_hide_mtrr(const struct acrn_vm *vm); void update_vm_vlapic_state(struct acrn_vm *vm); -enum vm_vlapic_state check_vm_vlapic_state(const struct acrn_vm *vm); +enum vm_vlapic_mode check_vm_vlapic_mode(const struct acrn_vm *vm); #endif /* !ASSEMBLER */ #endif /* VM_H_ */