diff --git a/hypervisor/arch/x86/guest/vm.c b/hypervisor/arch/x86/guest/vm.c index e537800d7..ee4f658de 100644 --- a/hypervisor/arch/x86/guest/vm.c +++ b/hypervisor/arch/x86/guest/vm.c @@ -321,7 +321,7 @@ int32_t reset_vm(struct acrn_vm *vm) } reset_vm_ioreqs(vm); - vioapic_reset(vm_ioapic(vm)); + vioapic_reset(vm); destroy_secure_world(vm, false); vm->sworld_control.flag.active = 0UL; ret = 0; diff --git a/hypervisor/debug/vuart.c b/hypervisor/debug/vuart.c index 6db8dfbd8..3e1afda70 100644 --- a/hypervisor/debug/vuart.c +++ b/hypervisor/debug/vuart.c @@ -122,6 +122,11 @@ static uint8_t vuart_intr_reason(const struct acrn_vuart *vu) } } +struct acrn_vuart *vm_vuart(struct acrn_vm *vm) +{ + return &(vm->vuart); +} + /* * Toggle the COM port's intr pin depending on whether or not we have an * interrupt condition to report to the processor. diff --git a/hypervisor/dm/vioapic.c b/hypervisor/dm/vioapic.c index e8251f21c..b07fd93c4 100644 --- a/hypervisor/dm/vioapic.c +++ b/hypervisor/dm/vioapic.c @@ -40,6 +40,11 @@ #define IOAPIC_ID_MASK 0x0f000000U #define MASK_ALL_INTERRUPTS 0x0001000000010000UL +static inline struct acrn_vioapic *vm_ioapic(const struct acrn_vm *vm) +{ + return (struct acrn_vioapic *)&(vm->arch_vm.vioapic); +} + /** * @pre pin < vioapic_pincount(vm) */ @@ -495,12 +500,13 @@ vioapic_process_eoi(struct acrn_vm *vm, uint32_t vector) } void -vioapic_reset(struct acrn_vioapic *vioapic) +vioapic_reset(struct acrn_vm *vm) { uint32_t pin, pincount; + struct acrn_vioapic *vioapic = vm_ioapic(vm); /* Initialize all redirection entries to mask all interrupts */ - pincount = vioapic_pincount(vioapic->vm); + pincount = vioapic_pincount(vm); for (pin = 0U; pin < pincount; pin++) { vioapic->rtbl[pin].full = MASK_ALL_INTERRUPTS; } @@ -514,7 +520,7 @@ vioapic_init(struct acrn_vm *vm) vm->arch_vm.vioapic.vm = vm; spinlock_init(&(vm->arch_vm.vioapic.mtx)); - vioapic_reset(vm_ioapic(vm)); + vioapic_reset(vm); (void)register_mmio_emulation_handler(vm, vioapic_mmio_access_handler, diff --git a/hypervisor/dm/vpic.c b/hypervisor/dm/vpic.c index 5844c05a4..0a47f2632 100644 --- a/hypervisor/dm/vpic.c +++ b/hypervisor/dm/vpic.c @@ -33,6 +33,11 @@ static void vpic_set_pinstate(struct acrn_vpic *vpic, uint32_t pin, uint8_t level); +static inline struct acrn_vpic *vm_pic(const struct acrn_vm *vm) +{ + return (struct acrn_vpic *)&(vm->arch_vm.vpic); +} + static inline bool master_pic(const struct acrn_vpic *vpic, const struct i8259_reg_state *i8259) { bool ret; diff --git a/hypervisor/include/arch/x86/guest/vioapic.h b/hypervisor/include/arch/x86/guest/vioapic.h index 3576aaac8..83405f44a 100644 --- a/hypervisor/include/arch/x86/guest/vioapic.h +++ b/hypervisor/include/arch/x86/guest/vioapic.h @@ -60,7 +60,7 @@ struct acrn_vioapic { }; void vioapic_init(struct acrn_vm *vm); -void vioapic_reset(struct acrn_vioapic *vioapic); +void vioapic_reset(struct acrn_vm *vm); /** diff --git a/hypervisor/include/arch/x86/guest/vm.h b/hypervisor/include/arch/x86/guest/vm.h index d159c2ab1..348a97ea0 100644 --- a/hypervisor/include/arch/x86/guest/vm.h +++ b/hypervisor/include/arch/x86/guest/vm.h @@ -272,24 +272,6 @@ static inline struct acrn_vcpu *get_primary_vcpu(struct acrn_vm *vm) return target_vcpu; } -static inline struct acrn_vuart* -vm_vuart(struct acrn_vm *vm) -{ - return &(vm->vuart); -} - -static inline struct acrn_vpic * -vm_pic(const struct acrn_vm *vm) -{ - return (struct acrn_vpic *)&(vm->arch_vm.vpic); -} - -static inline struct acrn_vioapic * -vm_ioapic(const struct acrn_vm *vm) -{ - return (struct acrn_vioapic *)&(vm->arch_vm.vioapic); -} - int32_t shutdown_vm(struct acrn_vm *vm); void pause_vm(struct acrn_vm *vm); void resume_vm(struct acrn_vm *vm); diff --git a/hypervisor/include/debug/vuart.h b/hypervisor/include/debug/vuart.h index 9abd663f2..83a40ba46 100644 --- a/hypervisor/include/debug/vuart.h +++ b/hypervisor/include/debug/vuart.h @@ -70,6 +70,7 @@ struct acrn_vuart { extern int8_t vuart_vmid; #endif /* CONFIG_PARTITION_MODE */ +struct acrn_vuart *vm_vuart(struct acrn_vm *vm); void vuart_init(struct acrn_vm *vm); struct acrn_vuart *vuart_console_active(void); void vuart_console_tx_chars(struct acrn_vuart *vu);