HV: Remove goto in vlapic_read()
remove goto statement in vlapic_read() routine Tracked-On: #861 Signed-off-by: Chaohong guo <chaohong.guo@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
parent
7a04db7cd8
commit
9efbdc829d
|
@ -1025,10 +1025,7 @@ vlapic_calcdest(struct acrn_vm *vm, uint64_t *dmask, uint32_t dest,
|
||||||
* Broadcast in both logical and physical modes.
|
* Broadcast in both logical and physical modes.
|
||||||
*/
|
*/
|
||||||
*dmask = vm_active_cpus(vm);
|
*dmask = vm_active_cpus(vm);
|
||||||
return;
|
} else if (phys) {
|
||||||
}
|
|
||||||
|
|
||||||
if (phys) {
|
|
||||||
/*
|
/*
|
||||||
* Physical mode: destination is LAPIC ID.
|
* Physical mode: destination is LAPIC ID.
|
||||||
*/
|
*/
|
||||||
|
@ -1464,115 +1461,113 @@ vlapic_read(struct acrn_vlapic *vlapic, uint32_t offset_arg,
|
||||||
|
|
||||||
if (offset > sizeof(*lapic)) {
|
if (offset > sizeof(*lapic)) {
|
||||||
*data = 0UL;
|
*data = 0UL;
|
||||||
goto done;
|
} else {
|
||||||
|
|
||||||
|
offset &= ~0x3UL;
|
||||||
|
switch (offset) {
|
||||||
|
case APIC_OFFSET_ID:
|
||||||
|
*data = lapic->id.v;
|
||||||
|
break;
|
||||||
|
case APIC_OFFSET_VER:
|
||||||
|
*data = lapic->version.v;
|
||||||
|
break;
|
||||||
|
case APIC_OFFSET_TPR:
|
||||||
|
*data = vlapic_get_tpr(vlapic);
|
||||||
|
break;
|
||||||
|
case APIC_OFFSET_APR:
|
||||||
|
*data = lapic->apr.v;
|
||||||
|
break;
|
||||||
|
case APIC_OFFSET_PPR:
|
||||||
|
*data = lapic->ppr.v;
|
||||||
|
break;
|
||||||
|
case APIC_OFFSET_EOI:
|
||||||
|
*data = lapic->eoi.v;
|
||||||
|
break;
|
||||||
|
case APIC_OFFSET_LDR:
|
||||||
|
*data = lapic->ldr.v;
|
||||||
|
break;
|
||||||
|
case APIC_OFFSET_DFR:
|
||||||
|
*data = lapic->dfr.v;
|
||||||
|
break;
|
||||||
|
case APIC_OFFSET_SVR:
|
||||||
|
*data = lapic->svr.v;
|
||||||
|
break;
|
||||||
|
case APIC_OFFSET_ISR0:
|
||||||
|
case APIC_OFFSET_ISR1:
|
||||||
|
case APIC_OFFSET_ISR2:
|
||||||
|
case APIC_OFFSET_ISR3:
|
||||||
|
case APIC_OFFSET_ISR4:
|
||||||
|
case APIC_OFFSET_ISR5:
|
||||||
|
case APIC_OFFSET_ISR6:
|
||||||
|
case APIC_OFFSET_ISR7:
|
||||||
|
i = (offset - APIC_OFFSET_ISR0) >> 4U;
|
||||||
|
*data = lapic->isr[i].v;
|
||||||
|
break;
|
||||||
|
case APIC_OFFSET_TMR0:
|
||||||
|
case APIC_OFFSET_TMR1:
|
||||||
|
case APIC_OFFSET_TMR2:
|
||||||
|
case APIC_OFFSET_TMR3:
|
||||||
|
case APIC_OFFSET_TMR4:
|
||||||
|
case APIC_OFFSET_TMR5:
|
||||||
|
case APIC_OFFSET_TMR6:
|
||||||
|
case APIC_OFFSET_TMR7:
|
||||||
|
i = (offset - APIC_OFFSET_TMR0) >> 4U;
|
||||||
|
*data = lapic->tmr[i].v;
|
||||||
|
break;
|
||||||
|
case APIC_OFFSET_IRR0:
|
||||||
|
case APIC_OFFSET_IRR1:
|
||||||
|
case APIC_OFFSET_IRR2:
|
||||||
|
case APIC_OFFSET_IRR3:
|
||||||
|
case APIC_OFFSET_IRR4:
|
||||||
|
case APIC_OFFSET_IRR5:
|
||||||
|
case APIC_OFFSET_IRR6:
|
||||||
|
case APIC_OFFSET_IRR7:
|
||||||
|
i = (offset - APIC_OFFSET_IRR0) >> 4U;
|
||||||
|
*data = lapic->irr[i].v;
|
||||||
|
break;
|
||||||
|
case APIC_OFFSET_ESR:
|
||||||
|
*data = lapic->esr.v;
|
||||||
|
break;
|
||||||
|
case APIC_OFFSET_ICR_LOW:
|
||||||
|
*data = lapic->icr_lo.v;
|
||||||
|
break;
|
||||||
|
case APIC_OFFSET_ICR_HI:
|
||||||
|
*data = lapic->icr_hi.v;
|
||||||
|
break;
|
||||||
|
case APIC_OFFSET_CMCI_LVT:
|
||||||
|
case APIC_OFFSET_TIMER_LVT:
|
||||||
|
case APIC_OFFSET_THERM_LVT:
|
||||||
|
case APIC_OFFSET_PERF_LVT:
|
||||||
|
case APIC_OFFSET_LINT0_LVT:
|
||||||
|
case APIC_OFFSET_LINT1_LVT:
|
||||||
|
case APIC_OFFSET_ERROR_LVT:
|
||||||
|
*data = vlapic_get_lvt(vlapic, offset);
|
||||||
|
#ifdef INVARIANTS
|
||||||
|
reg = vlapic_get_lvtptr(vlapic, offset);
|
||||||
|
ASSERT(*data == *reg, "inconsistent lvt value at offset %#x: %#lx/%#x", offset, *data, *reg);
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
case APIC_OFFSET_TIMER_ICR:
|
||||||
|
/* if TSCDEADLINE mode always return 0*/
|
||||||
|
if (vlapic_lvtt_tsc_deadline(vlapic)) {
|
||||||
|
*data = 0UL;
|
||||||
|
} else {
|
||||||
|
*data = lapic->icr_timer.v;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case APIC_OFFSET_TIMER_CCR:
|
||||||
|
*data = vlapic_get_ccr(vlapic);
|
||||||
|
break;
|
||||||
|
case APIC_OFFSET_TIMER_DCR:
|
||||||
|
*data = lapic->dcr_timer.v;
|
||||||
|
break;
|
||||||
|
case APIC_OFFSET_RRR:
|
||||||
|
default:
|
||||||
|
*data = 0UL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
offset &= ~0x3UL;
|
|
||||||
switch (offset) {
|
|
||||||
case APIC_OFFSET_ID:
|
|
||||||
*data = lapic->id.v;
|
|
||||||
break;
|
|
||||||
case APIC_OFFSET_VER:
|
|
||||||
*data = lapic->version.v;
|
|
||||||
break;
|
|
||||||
case APIC_OFFSET_TPR:
|
|
||||||
*data = vlapic_get_tpr(vlapic);
|
|
||||||
break;
|
|
||||||
case APIC_OFFSET_APR:
|
|
||||||
*data = lapic->apr.v;
|
|
||||||
break;
|
|
||||||
case APIC_OFFSET_PPR:
|
|
||||||
*data = lapic->ppr.v;
|
|
||||||
break;
|
|
||||||
case APIC_OFFSET_EOI:
|
|
||||||
*data = lapic->eoi.v;
|
|
||||||
break;
|
|
||||||
case APIC_OFFSET_LDR:
|
|
||||||
*data = lapic->ldr.v;
|
|
||||||
break;
|
|
||||||
case APIC_OFFSET_DFR:
|
|
||||||
*data = lapic->dfr.v;
|
|
||||||
break;
|
|
||||||
case APIC_OFFSET_SVR:
|
|
||||||
*data = lapic->svr.v;
|
|
||||||
break;
|
|
||||||
case APIC_OFFSET_ISR0:
|
|
||||||
case APIC_OFFSET_ISR1:
|
|
||||||
case APIC_OFFSET_ISR2:
|
|
||||||
case APIC_OFFSET_ISR3:
|
|
||||||
case APIC_OFFSET_ISR4:
|
|
||||||
case APIC_OFFSET_ISR5:
|
|
||||||
case APIC_OFFSET_ISR6:
|
|
||||||
case APIC_OFFSET_ISR7:
|
|
||||||
i = (offset - APIC_OFFSET_ISR0) >> 4U;
|
|
||||||
*data = lapic->isr[i].v;
|
|
||||||
break;
|
|
||||||
case APIC_OFFSET_TMR0:
|
|
||||||
case APIC_OFFSET_TMR1:
|
|
||||||
case APIC_OFFSET_TMR2:
|
|
||||||
case APIC_OFFSET_TMR3:
|
|
||||||
case APIC_OFFSET_TMR4:
|
|
||||||
case APIC_OFFSET_TMR5:
|
|
||||||
case APIC_OFFSET_TMR6:
|
|
||||||
case APIC_OFFSET_TMR7:
|
|
||||||
i = (offset - APIC_OFFSET_TMR0) >> 4U;
|
|
||||||
*data = lapic->tmr[i].v;
|
|
||||||
break;
|
|
||||||
case APIC_OFFSET_IRR0:
|
|
||||||
case APIC_OFFSET_IRR1:
|
|
||||||
case APIC_OFFSET_IRR2:
|
|
||||||
case APIC_OFFSET_IRR3:
|
|
||||||
case APIC_OFFSET_IRR4:
|
|
||||||
case APIC_OFFSET_IRR5:
|
|
||||||
case APIC_OFFSET_IRR6:
|
|
||||||
case APIC_OFFSET_IRR7:
|
|
||||||
i = (offset - APIC_OFFSET_IRR0) >> 4U;
|
|
||||||
*data = lapic->irr[i].v;
|
|
||||||
break;
|
|
||||||
case APIC_OFFSET_ESR:
|
|
||||||
*data = lapic->esr.v;
|
|
||||||
break;
|
|
||||||
case APIC_OFFSET_ICR_LOW:
|
|
||||||
*data = lapic->icr_lo.v;
|
|
||||||
break;
|
|
||||||
case APIC_OFFSET_ICR_HI:
|
|
||||||
*data = lapic->icr_hi.v;
|
|
||||||
break;
|
|
||||||
case APIC_OFFSET_CMCI_LVT:
|
|
||||||
case APIC_OFFSET_TIMER_LVT:
|
|
||||||
case APIC_OFFSET_THERM_LVT:
|
|
||||||
case APIC_OFFSET_PERF_LVT:
|
|
||||||
case APIC_OFFSET_LINT0_LVT:
|
|
||||||
case APIC_OFFSET_LINT1_LVT:
|
|
||||||
case APIC_OFFSET_ERROR_LVT:
|
|
||||||
*data = vlapic_get_lvt(vlapic, offset);
|
|
||||||
#ifdef INVARIANTS
|
|
||||||
reg = vlapic_get_lvtptr(vlapic, offset);
|
|
||||||
ASSERT(*data == *reg,
|
|
||||||
"inconsistent lvt value at offset %#x: %#lx/%#x",
|
|
||||||
offset, *data, *reg);
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
case APIC_OFFSET_TIMER_ICR:
|
|
||||||
/* if TSCDEADLINE mode always return 0*/
|
|
||||||
if (vlapic_lvtt_tsc_deadline(vlapic)) {
|
|
||||||
*data = 0UL;
|
|
||||||
} else {
|
|
||||||
*data = lapic->icr_timer.v;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case APIC_OFFSET_TIMER_CCR:
|
|
||||||
*data = vlapic_get_ccr(vlapic);
|
|
||||||
break;
|
|
||||||
case APIC_OFFSET_TIMER_DCR:
|
|
||||||
*data = lapic->dcr_timer.v;
|
|
||||||
break;
|
|
||||||
case APIC_OFFSET_RRR:
|
|
||||||
default:
|
|
||||||
*data = 0UL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
done:
|
|
||||||
dev_dbg(ACRN_DBG_LAPIC,
|
dev_dbg(ACRN_DBG_LAPIC,
|
||||||
"vlapic read offset %#x, data %#lx", offset, *data);
|
"vlapic read offset %#x, data %#lx", offset, *data);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue