mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-07-24 04:06:18 +00:00
hv: simplify get_primary_vcpu
and vcpu_from_vid
This patch simplifies `get_primary_vcpu` and `vcpu_from_vid`. The target_vcpu could be get from the index directly. Tracked-On: #1842 Signed-off-by: Shiqing Gao <shiqing.gao@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
parent
3d0d8609cc
commit
da14c96135
@ -192,7 +192,7 @@ static int32_t vcpu_do_pending_extint(const struct acrn_vcpu *vcpu)
|
|||||||
|
|
||||||
/* check if there is valid interrupt from vPIC, if yes just inject it */
|
/* check if there is valid interrupt from vPIC, if yes just inject it */
|
||||||
/* PIC only connect with primary CPU */
|
/* PIC only connect with primary CPU */
|
||||||
primary = get_primary_vcpu(vm);
|
primary = vcpu_from_vid(vm, BOOT_CPU_ID);
|
||||||
if (vcpu == primary) {
|
if (vcpu == primary) {
|
||||||
|
|
||||||
vpic_pending_intr(vcpu->vm, &vector);
|
vpic_pending_intr(vcpu->vm, &vector);
|
||||||
|
@ -25,7 +25,8 @@ static void efi_spurious_handler(int32_t vector)
|
|||||||
static int32_t uefi_sw_loader(struct acrn_vm *vm)
|
static int32_t uefi_sw_loader(struct acrn_vm *vm)
|
||||||
{
|
{
|
||||||
int32_t ret = 0;
|
int32_t ret = 0;
|
||||||
struct acrn_vcpu *vcpu = get_primary_vcpu(vm);
|
/* get primary vcpu */
|
||||||
|
struct acrn_vcpu *vcpu = vcpu_from_vid(vm, BOOT_CPU_ID);
|
||||||
struct acrn_vcpu_regs *vcpu_regs = &boot_context;
|
struct acrn_vcpu_regs *vcpu_regs = &boot_context;
|
||||||
const struct efi_context *efi_ctx = get_efi_ctx();
|
const struct efi_context *efi_ctx = get_efi_ctx();
|
||||||
const struct lapic_regs *uefi_lapic_regs = get_efi_lapic_regs();
|
const struct lapic_regs *uefi_lapic_regs = get_efi_lapic_regs();
|
||||||
|
@ -102,7 +102,8 @@ int32_t general_sw_loader(struct acrn_vm *vm)
|
|||||||
struct zero_page *zeropage;
|
struct zero_page *zeropage;
|
||||||
struct sw_linux *linux_info = &(vm->sw.linux_info);
|
struct sw_linux *linux_info = &(vm->sw.linux_info);
|
||||||
struct sw_kernel_info *sw_kernel = &(vm->sw.kernel_info);
|
struct sw_kernel_info *sw_kernel = &(vm->sw.kernel_info);
|
||||||
struct acrn_vcpu *vcpu = get_primary_vcpu(vm);
|
/* get primary vcpu */
|
||||||
|
struct acrn_vcpu *vcpu = vcpu_from_vid(vm, BOOT_CPU_ID);
|
||||||
const struct e820_mem_params *p_e820_mem_info = get_e820_mem_info();
|
const struct e820_mem_params *p_e820_mem_info = get_e820_mem_info();
|
||||||
|
|
||||||
pr_dbg("Loading guest to run-time location");
|
pr_dbg("Loading guest to run-time location");
|
||||||
|
@ -175,18 +175,11 @@ static inline uint64_t vm_active_cpus(const struct acrn_vm *vm)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* @pre vcpu_id < CONFIG_MAX_VCPUS_PER_VM
|
* @pre vcpu_id < CONFIG_MAX_VCPUS_PER_VM
|
||||||
|
* @pre &(vm->hw.vcpu_array[vcpu_id])->state != VCPU_OFFLINE
|
||||||
*/
|
*/
|
||||||
static inline struct acrn_vcpu *vcpu_from_vid(struct acrn_vm *vm, uint16_t vcpu_id)
|
static inline struct acrn_vcpu *vcpu_from_vid(struct acrn_vm *vm, uint16_t vcpu_id)
|
||||||
{
|
{
|
||||||
uint16_t i;
|
return &(vm->hw.vcpu_array[vcpu_id]);
|
||||||
struct acrn_vcpu *vcpu;
|
|
||||||
|
|
||||||
foreach_vcpu(i, vm, vcpu) {
|
|
||||||
if (vcpu->vcpu_id == vcpu_id) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return vcpu;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline struct acrn_vcpu *vcpu_from_pid(struct acrn_vm *vm, uint16_t pcpu_id)
|
static inline struct acrn_vcpu *vcpu_from_pid(struct acrn_vm *vm, uint16_t pcpu_id)
|
||||||
@ -204,21 +197,6 @@ static inline struct acrn_vcpu *vcpu_from_pid(struct acrn_vm *vm, uint16_t pcpu_
|
|||||||
return target_vcpu;
|
return target_vcpu;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline struct acrn_vcpu *get_primary_vcpu(struct acrn_vm *vm)
|
|
||||||
{
|
|
||||||
uint16_t i;
|
|
||||||
struct acrn_vcpu *vcpu, *target_vcpu = NULL;
|
|
||||||
|
|
||||||
foreach_vcpu(i, vm, vcpu) {
|
|
||||||
if (is_vcpu_bsp(vcpu)) {
|
|
||||||
target_vcpu = vcpu;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return target_vcpu;
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t shutdown_vm(struct acrn_vm *vm);
|
int32_t shutdown_vm(struct acrn_vm *vm);
|
||||||
void pause_vm(struct acrn_vm *vm);
|
void pause_vm(struct acrn_vm *vm);
|
||||||
void resume_vm(struct acrn_vm *vm);
|
void resume_vm(struct acrn_vm *vm);
|
||||||
|
Loading…
Reference in New Issue
Block a user