hw/intc/arm_gicv3_its: Avoid nested ifs in get_ite()

The get_ite() code has some awkward nested if statements; clean
them up by returning early if the memory accesses fail.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20220201193207.2771604-8-peter.maydell@linaro.org
This commit is contained in:
Peter Maydell 2022-02-01 19:32:01 +00:00
parent a1ce993da6
commit 2954b93fe6

View File

@ -197,20 +197,22 @@ static bool get_ite(GICv3ITSState *s, uint32_t eventid, const DTEntry *dte,
hwaddr iteaddr = dte->ittaddr + eventid * ITS_ITT_ENTRY_SIZE; hwaddr iteaddr = dte->ittaddr + eventid * ITS_ITT_ENTRY_SIZE;
ite.itel = address_space_ldq_le(as, iteaddr, MEMTXATTRS_UNSPECIFIED, res); ite.itel = address_space_ldq_le(as, iteaddr, MEMTXATTRS_UNSPECIFIED, res);
if (*res != MEMTX_OK) {
return false;
}
if (*res == MEMTX_OK) { ite.iteh = address_space_ldl_le(as, iteaddr + 8,
ite.iteh = address_space_ldl_le(as, iteaddr + 8, MEMTXATTRS_UNSPECIFIED, res);
MEMTXATTRS_UNSPECIFIED, res); if (*res != MEMTX_OK) {
return false;
}
if (*res == MEMTX_OK) { if (FIELD_EX64(ite.itel, ITE_L, VALID)) {
if (FIELD_EX64(ite.itel, ITE_L, VALID)) { int inttype = FIELD_EX64(ite.itel, ITE_L, INTTYPE);
int inttype = FIELD_EX64(ite.itel, ITE_L, INTTYPE); if (inttype == ITE_INTTYPE_PHYSICAL) {
if (inttype == ITE_INTTYPE_PHYSICAL) { *pIntid = FIELD_EX64(ite.itel, ITE_L, INTID);
*pIntid = FIELD_EX64(ite.itel, ITE_L, INTID); *icid = FIELD_EX64(ite.itel, ITE_L, ICID);
*icid = FIELD_EX64(ite.itel, ITE_L, ICID); status = true;
status = true;
}
}
} }
} }
return status; return status;