mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-07-31 07:20:55 +00:00
HV: vlapic: save complex expressions to local variables
Use local variables to hold struct members before using them, which helps us avoid confusions from static checkers. Signed-off-by: Junjie Mao <junjie.mao@intel.com> Acked-by: Dong Eddie <eddie.dong@intel.com>
This commit is contained in:
parent
f05e2fc73b
commit
e08a58ebe6
@ -126,7 +126,8 @@ static uint16_t vm_apicid2vcpu_id(struct vm *vm, uint8_t lapicid)
|
||||
struct vcpu *vcpu;
|
||||
|
||||
foreach_vcpu(i, vm, vcpu) {
|
||||
if (vlapic_get_apicid(vcpu->arch_vcpu.vlapic) == lapicid) {
|
||||
struct vlapic *vlapic = vcpu->arch_vcpu.vlapic;
|
||||
if (vlapic_get_apicid(vlapic) == lapicid) {
|
||||
return vcpu->vcpu_id;
|
||||
}
|
||||
}
|
||||
@ -153,13 +154,15 @@ vm_active_cpus(struct vm *vm)
|
||||
uint32_t
|
||||
vlapic_get_id(struct vlapic *vlapic)
|
||||
{
|
||||
return vlapic->apic_page->id;
|
||||
uint32_t id = vlapic->apic_page->id;
|
||||
return id;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
vlapic_get_apicid(struct vlapic *vlapic)
|
||||
{
|
||||
return vlapic->apic_page->id >> APIC_ID_SHIFT;
|
||||
uint32_t apicid = vlapic->apic_page->id >> APIC_ID_SHIFT;
|
||||
return (uint8_t)apicid;
|
||||
}
|
||||
|
||||
static inline uint32_t
|
||||
@ -350,10 +353,12 @@ static uint32_t vlapic_get_ccr(struct vlapic *vlapic)
|
||||
|
||||
if (vlapic_timer->tmicr && !vlapic_lvtt_tsc_deadline(vlapic)) {
|
||||
uint64_t fire_tsc = vlapic_timer->timer.fire_tsc;
|
||||
uint32_t divisor_shift = vlapic_timer->divisor_shift;
|
||||
|
||||
if (now < fire_tsc) {
|
||||
remain_count = (fire_tsc - now) >> divisor_shift;
|
||||
uint32_t divisor_shift = vlapic_timer->divisor_shift;
|
||||
uint64_t shifted_delta =
|
||||
(fire_tsc - now) >> divisor_shift;
|
||||
remain_count = (uint32_t)shifted_delta;
|
||||
}
|
||||
}
|
||||
|
||||
@ -660,6 +665,7 @@ static int
|
||||
vlapic_fire_lvt(struct vlapic *vlapic, uint32_t lvt)
|
||||
{
|
||||
uint32_t vec, mode;
|
||||
struct vcpu *vcpu = vlapic->vcpu;
|
||||
|
||||
if ((lvt & APIC_LVT_M) != 0U) {
|
||||
return 0;
|
||||
@ -675,14 +681,14 @@ vlapic_fire_lvt(struct vlapic *vlapic, uint32_t lvt)
|
||||
return 0;
|
||||
}
|
||||
if (vlapic_set_intr_ready(vlapic, vec, false) != 0) {
|
||||
vcpu_make_request(vlapic->vcpu, ACRN_REQUEST_EVENT);
|
||||
vcpu_make_request(vcpu, ACRN_REQUEST_EVENT);
|
||||
}
|
||||
break;
|
||||
case APIC_LVT_DM_NMI:
|
||||
vcpu_inject_nmi(vlapic->vcpu);
|
||||
vcpu_inject_nmi(vcpu);
|
||||
break;
|
||||
case APIC_LVT_DM_EXTINT:
|
||||
vcpu_inject_extint(vlapic->vcpu);
|
||||
vcpu_inject_extint(vcpu);
|
||||
break;
|
||||
default:
|
||||
/* Other modes ignored */
|
||||
@ -839,6 +845,7 @@ static int
|
||||
vlapic_trigger_lvt(struct vlapic *vlapic, uint32_t vector)
|
||||
{
|
||||
uint32_t lvt;
|
||||
struct vcpu *vcpu = vlapic->vcpu;
|
||||
|
||||
if (vlapic_enabled(vlapic) == false) {
|
||||
/*
|
||||
@ -848,10 +855,10 @@ vlapic_trigger_lvt(struct vlapic *vlapic, uint32_t vector)
|
||||
*/
|
||||
switch (vector) {
|
||||
case APIC_LVT_LINT0:
|
||||
vcpu_inject_extint(vlapic->vcpu);
|
||||
vcpu_inject_extint(vcpu);
|
||||
break;
|
||||
case APIC_LVT_LINT1:
|
||||
vcpu_inject_nmi(vlapic->vcpu);
|
||||
vcpu_inject_nmi(vcpu);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -1027,7 +1034,8 @@ vlapic_set_cr8(struct vlapic *vlapic, uint64_t val)
|
||||
uint8_t tpr;
|
||||
|
||||
if ((val & ~0xfUL) != 0U) {
|
||||
vcpu_inject_gp(vlapic->vcpu, 0U);
|
||||
struct vcpu *vcpu = vlapic->vcpu;
|
||||
vcpu_inject_gp(vcpu, 0U);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1662,13 +1670,15 @@ vlapic_deliver_intr(struct vm *vm, bool level, uint32_t dest, bool phys,
|
||||
|
||||
for (vcpu_id = ffs64(dmask); vcpu_id != INVALID_BIT_INDEX;
|
||||
vcpu_id = ffs64(dmask)) {
|
||||
struct vlapic *vlapic;
|
||||
bitmap_clear(vcpu_id, &dmask);
|
||||
target_vcpu = vcpu_from_vid(vm, vcpu_id);
|
||||
if (target_vcpu == NULL)
|
||||
return;
|
||||
|
||||
/* only make request when vlapic enabled */
|
||||
if (vlapic_enabled(target_vcpu->arch_vcpu.vlapic)) {
|
||||
vlapic = target_vcpu->arch_vcpu.vlapic;
|
||||
if (vlapic_enabled(vlapic)) {
|
||||
if (delmode == IOAPIC_RTE_DELEXINT) {
|
||||
vcpu_inject_extint(target_vcpu);
|
||||
} else {
|
||||
@ -1733,6 +1743,7 @@ vlapic_apicv_set_tmr(struct vlapic *vlapic, uint32_t vector, bool level)
|
||||
void
|
||||
vlapic_reset_tmr(struct vlapic *vlapic)
|
||||
{
|
||||
struct vcpu *vcpu = vlapic->vcpu;
|
||||
uint32_t vector;
|
||||
|
||||
dev_dbg(ACRN_DBG_LAPIC,
|
||||
@ -1742,7 +1753,7 @@ vlapic_reset_tmr(struct vlapic *vlapic)
|
||||
vlapic_set_tmr(vlapic, vector, false);
|
||||
}
|
||||
|
||||
vcpu_make_request(vlapic->vcpu, ACRN_REQUEST_TMR_UPDATE);
|
||||
vcpu_make_request(vcpu, ACRN_REQUEST_TMR_UPDATE);
|
||||
}
|
||||
|
||||
void
|
||||
@ -2193,17 +2204,19 @@ static void
|
||||
apicv_set_tmr(__unused struct vlapic *vlapic, uint32_t vector, bool level)
|
||||
{
|
||||
uint64_t mask, val;
|
||||
uint32_t field;
|
||||
|
||||
mask = 1UL << (vector % 64U);
|
||||
field = VMX_EOI_EXIT(vector);
|
||||
|
||||
val = exec_vmread(VMX_EOI_EXIT(vector));
|
||||
val = exec_vmread(field);
|
||||
if (level) {
|
||||
val |= mask;
|
||||
} else {
|
||||
val &= ~mask;
|
||||
}
|
||||
|
||||
exec_vmwrite(VMX_EOI_EXIT(vector), val);
|
||||
exec_vmwrite(field, val);
|
||||
}
|
||||
|
||||
/* Update the VMX_EOI_EXIT according to related tmr */
|
||||
|
@ -280,22 +280,26 @@ static inline uint64_t mem_read64(void *addr)
|
||||
|
||||
static inline void mem_write8(void *addr, uint8_t data)
|
||||
{
|
||||
*(volatile uint8_t *)(addr) = (uint8_t)(data);
|
||||
volatile uint8_t *addr8 = (volatile uint8_t *)addr;
|
||||
*addr8 = data;
|
||||
}
|
||||
|
||||
static inline void mem_write16(void *addr, uint16_t data)
|
||||
{
|
||||
*(volatile uint16_t *)(addr) = (uint16_t)(data);
|
||||
volatile uint16_t *addr16 = (volatile uint16_t *)addr;
|
||||
*addr16 = data;
|
||||
}
|
||||
|
||||
static inline void mem_write32(void *addr, uint32_t data)
|
||||
{
|
||||
*(volatile uint32_t *)(addr) = (uint32_t)(data);
|
||||
volatile uint32_t *addr32 = (volatile uint32_t *)addr;
|
||||
*addr32 = data;
|
||||
}
|
||||
|
||||
static inline void mem_write64(void *addr, uint64_t data)
|
||||
{
|
||||
*(volatile uint64_t *)(addr) = (uint64_t)(data);
|
||||
volatile uint64_t *addr64 = (volatile uint64_t *)addr;
|
||||
*addr64 = data;
|
||||
}
|
||||
|
||||
/* Typedef for MMIO handler and range check routine */
|
||||
|
Loading…
Reference in New Issue
Block a user