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:
Junjie Mao 2018-07-13 17:10:02 +08:00 committed by lijinxia
parent f05e2fc73b
commit e08a58ebe6
2 changed files with 36 additions and 19 deletions

View File

@ -126,7 +126,8 @@ static uint16_t vm_apicid2vcpu_id(struct vm *vm, uint8_t lapicid)
struct vcpu *vcpu; struct vcpu *vcpu;
foreach_vcpu(i, vm, 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; return vcpu->vcpu_id;
} }
} }
@ -153,13 +154,15 @@ vm_active_cpus(struct vm *vm)
uint32_t uint32_t
vlapic_get_id(struct vlapic *vlapic) vlapic_get_id(struct vlapic *vlapic)
{ {
return vlapic->apic_page->id; uint32_t id = vlapic->apic_page->id;
return id;
} }
uint8_t uint8_t
vlapic_get_apicid(struct vlapic *vlapic) 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 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)) { if (vlapic_timer->tmicr && !vlapic_lvtt_tsc_deadline(vlapic)) {
uint64_t fire_tsc = vlapic_timer->timer.fire_tsc; uint64_t fire_tsc = vlapic_timer->timer.fire_tsc;
uint32_t divisor_shift = vlapic_timer->divisor_shift;
if (now < fire_tsc) { 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) vlapic_fire_lvt(struct vlapic *vlapic, uint32_t lvt)
{ {
uint32_t vec, mode; uint32_t vec, mode;
struct vcpu *vcpu = vlapic->vcpu;
if ((lvt & APIC_LVT_M) != 0U) { if ((lvt & APIC_LVT_M) != 0U) {
return 0; return 0;
@ -675,14 +681,14 @@ vlapic_fire_lvt(struct vlapic *vlapic, uint32_t lvt)
return 0; return 0;
} }
if (vlapic_set_intr_ready(vlapic, vec, false) != 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; break;
case APIC_LVT_DM_NMI: case APIC_LVT_DM_NMI:
vcpu_inject_nmi(vlapic->vcpu); vcpu_inject_nmi(vcpu);
break; break;
case APIC_LVT_DM_EXTINT: case APIC_LVT_DM_EXTINT:
vcpu_inject_extint(vlapic->vcpu); vcpu_inject_extint(vcpu);
break; break;
default: default:
/* Other modes ignored */ /* Other modes ignored */
@ -839,6 +845,7 @@ static int
vlapic_trigger_lvt(struct vlapic *vlapic, uint32_t vector) vlapic_trigger_lvt(struct vlapic *vlapic, uint32_t vector)
{ {
uint32_t lvt; uint32_t lvt;
struct vcpu *vcpu = vlapic->vcpu;
if (vlapic_enabled(vlapic) == false) { if (vlapic_enabled(vlapic) == false) {
/* /*
@ -848,10 +855,10 @@ vlapic_trigger_lvt(struct vlapic *vlapic, uint32_t vector)
*/ */
switch (vector) { switch (vector) {
case APIC_LVT_LINT0: case APIC_LVT_LINT0:
vcpu_inject_extint(vlapic->vcpu); vcpu_inject_extint(vcpu);
break; break;
case APIC_LVT_LINT1: case APIC_LVT_LINT1:
vcpu_inject_nmi(vlapic->vcpu); vcpu_inject_nmi(vcpu);
break; break;
default: default:
break; break;
@ -1027,7 +1034,8 @@ vlapic_set_cr8(struct vlapic *vlapic, uint64_t val)
uint8_t tpr; uint8_t tpr;
if ((val & ~0xfUL) != 0U) { if ((val & ~0xfUL) != 0U) {
vcpu_inject_gp(vlapic->vcpu, 0U); struct vcpu *vcpu = vlapic->vcpu;
vcpu_inject_gp(vcpu, 0U);
return; 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; for (vcpu_id = ffs64(dmask); vcpu_id != INVALID_BIT_INDEX;
vcpu_id = ffs64(dmask)) { vcpu_id = ffs64(dmask)) {
struct vlapic *vlapic;
bitmap_clear(vcpu_id, &dmask); bitmap_clear(vcpu_id, &dmask);
target_vcpu = vcpu_from_vid(vm, vcpu_id); target_vcpu = vcpu_from_vid(vm, vcpu_id);
if (target_vcpu == NULL) if (target_vcpu == NULL)
return; return;
/* only make request when vlapic enabled */ /* 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) { if (delmode == IOAPIC_RTE_DELEXINT) {
vcpu_inject_extint(target_vcpu); vcpu_inject_extint(target_vcpu);
} else { } else {
@ -1733,6 +1743,7 @@ vlapic_apicv_set_tmr(struct vlapic *vlapic, uint32_t vector, bool level)
void void
vlapic_reset_tmr(struct vlapic *vlapic) vlapic_reset_tmr(struct vlapic *vlapic)
{ {
struct vcpu *vcpu = vlapic->vcpu;
uint32_t vector; uint32_t vector;
dev_dbg(ACRN_DBG_LAPIC, dev_dbg(ACRN_DBG_LAPIC,
@ -1742,7 +1753,7 @@ vlapic_reset_tmr(struct vlapic *vlapic)
vlapic_set_tmr(vlapic, vector, false); vlapic_set_tmr(vlapic, vector, false);
} }
vcpu_make_request(vlapic->vcpu, ACRN_REQUEST_TMR_UPDATE); vcpu_make_request(vcpu, ACRN_REQUEST_TMR_UPDATE);
} }
void void
@ -2193,17 +2204,19 @@ static void
apicv_set_tmr(__unused struct vlapic *vlapic, uint32_t vector, bool level) apicv_set_tmr(__unused struct vlapic *vlapic, uint32_t vector, bool level)
{ {
uint64_t mask, val; uint64_t mask, val;
uint32_t field;
mask = 1UL << (vector % 64U); mask = 1UL << (vector % 64U);
field = VMX_EOI_EXIT(vector);
val = exec_vmread(VMX_EOI_EXIT(vector)); val = exec_vmread(field);
if (level) { if (level) {
val |= mask; val |= mask;
} else { } else {
val &= ~mask; val &= ~mask;
} }
exec_vmwrite(VMX_EOI_EXIT(vector), val); exec_vmwrite(field, val);
} }
/* Update the VMX_EOI_EXIT according to related tmr */ /* Update the VMX_EOI_EXIT according to related tmr */

View File

@ -280,22 +280,26 @@ static inline uint64_t mem_read64(void *addr)
static inline void mem_write8(void *addr, uint8_t data) 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) 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) 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) 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 */ /* Typedef for MMIO handler and range check routine */