Skip to content

Commit 0884397

Browse files
chaohong-guowenlingz
authored andcommitted
HV: cycomatic complexity 20 in vlapic_icrlo_write_handler
MISRA compaint that the vlapic_icrlo_write_handler 's cyclomatic complexity is greater than 20. Try to remove multiple returns/exits. Tracked-On: #861 Signed-off-by: Chaohong guo <chaohong.guo@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
1 parent eaa0e30 commit 0884397

File tree

1 file changed

+53
-55
lines changed

1 file changed

+53
-55
lines changed

hypervisor/arch/x86/guest/vlapic.c

Lines changed: 53 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1229,6 +1229,7 @@ vlapic_icrlo_write_handler(struct acrn_vlapic *vlapic)
12291229
{
12301230
uint16_t vcpu_id;
12311231
bool phys;
1232+
int32_t ret = 0;
12321233
uint64_t dmask = 0UL;
12331234
uint32_t icr_low, icr_high, dest;
12341235
uint32_t vec, mode, shorthand;
@@ -1253,68 +1254,65 @@ vlapic_icrlo_write_handler(struct acrn_vlapic *vlapic)
12531254
if ((mode == APIC_DELMODE_FIXED) && (vec < 16U)) {
12541255
vlapic_set_error(vlapic, APIC_ESR_SEND_ILLEGAL_VECTOR);
12551256
dev_dbg(ACRN_DBG_LAPIC, "Ignoring invalid IPI %u", vec);
1256-
return 0;
1257-
}
1258-
1259-
dev_dbg(ACRN_DBG_LAPIC,
1260-
"icrlo 0x%08x icrhi 0x%08x triggered ipi %u",
1261-
icr_low, icr_high, vec);
1262-
1263-
if (((shorthand == APIC_DEST_SELF) || (shorthand == APIC_DEST_ALLISELF))
1264-
&& ((mode == APIC_DELMODE_NMI) || (mode == APIC_DELMODE_INIT)
1265-
|| (mode == APIC_DELMODE_STARTUP))) {
1266-
dev_dbg(ACRN_DBG_LAPIC, "Invalid ICR value");
1267-
return 0;
1268-
}
1257+
} else if (((shorthand == APIC_DEST_SELF) || (shorthand == APIC_DEST_ALLISELF))
1258+
&& ((mode == APIC_DELMODE_NMI) || (mode == APIC_DELMODE_INIT)
1259+
|| (mode == APIC_DELMODE_STARTUP))) {
1260+
dev_dbg(ACRN_DBG_LAPIC, "Invalid ICR value");
1261+
} else {
12691262

1270-
switch (shorthand) {
1271-
case APIC_DEST_DESTFLD:
1272-
vlapic_calcdest(vlapic->vm, &dmask, dest, phys, false);
1273-
break;
1274-
case APIC_DEST_SELF:
1275-
bitmap_set_lock(vlapic->vcpu->vcpu_id, &dmask);
1276-
break;
1277-
case APIC_DEST_ALLISELF:
1278-
dmask = vm_active_cpus(vlapic->vm);
1279-
break;
1280-
case APIC_DEST_ALLESELF:
1281-
dmask = vm_active_cpus(vlapic->vm);
1282-
bitmap_clear_lock(vlapic->vcpu->vcpu_id, &dmask);
1283-
break;
1284-
default:
1285-
/*
1286-
* All possible values of 'shorthand' has been handled in prior
1287-
* case clauses.
1288-
*/
1289-
break;
1290-
}
1263+
dev_dbg(ACRN_DBG_LAPIC,
1264+
"icrlo 0x%08x icrhi 0x%08x triggered ipi %u",
1265+
icr_low, icr_high, vec);
12911266

1292-
for (vcpu_id = 0U; vcpu_id < vlapic->vm->hw.created_vcpus; vcpu_id++) {
1293-
if ((dmask & (1UL << vcpu_id)) != 0UL) {
1294-
target_vcpu = vcpu_from_vid(vlapic->vm, vcpu_id);
1267+
switch (shorthand) {
1268+
case APIC_DEST_DESTFLD:
1269+
vlapic_calcdest(vlapic->vm, &dmask, dest, phys, false);
1270+
break;
1271+
case APIC_DEST_SELF:
1272+
bitmap_set_lock(vlapic->vcpu->vcpu_id, &dmask);
1273+
break;
1274+
case APIC_DEST_ALLISELF:
1275+
dmask = vm_active_cpus(vlapic->vm);
1276+
break;
1277+
case APIC_DEST_ALLESELF:
1278+
dmask = vm_active_cpus(vlapic->vm);
1279+
bitmap_clear_lock(vlapic->vcpu->vcpu_id, &dmask);
1280+
break;
1281+
default:
1282+
/*
1283+
* All possible values of 'shorthand' has been handled in prior
1284+
* case clauses.
1285+
*/
1286+
break;
1287+
}
12951288

1296-
if (mode == APIC_DELMODE_FIXED) {
1297-
vlapic_set_intr(target_vcpu, vec, LAPIC_TRIG_EDGE);
1298-
dev_dbg(ACRN_DBG_LAPIC,
1299-
"vlapic sending ipi %u to vcpu_id %hu",
1300-
vec, vcpu_id);
1301-
} else if (mode == APIC_DELMODE_NMI) {
1302-
vcpu_inject_nmi(target_vcpu);
1303-
dev_dbg(ACRN_DBG_LAPIC,
1304-
"vlapic send ipi nmi to vcpu_id %hu", vcpu_id);
1305-
} else if (mode == APIC_DELMODE_INIT) {
1306-
vlapic_process_init_sipi(target_vcpu, mode, icr_low, vcpu_id);
1307-
} else if (mode == APIC_DELMODE_STARTUP) {
1308-
vlapic_process_init_sipi(target_vcpu, mode, icr_low, vcpu_id);
1309-
} else if (mode == APIC_DELMODE_SMI) {
1310-
pr_info("vlapic: SMI IPI do not support\n");
1311-
} else {
1312-
pr_err("Unhandled icrlo write with mode %u\n", mode);
1289+
for (vcpu_id = 0U; vcpu_id < vlapic->vm->hw.created_vcpus; vcpu_id++) {
1290+
if ((dmask & (1UL << vcpu_id)) != 0UL) {
1291+
target_vcpu = vcpu_from_vid(vlapic->vm, vcpu_id);
1292+
1293+
if (mode == APIC_DELMODE_FIXED) {
1294+
vlapic_set_intr(target_vcpu, vec, LAPIC_TRIG_EDGE);
1295+
dev_dbg(ACRN_DBG_LAPIC,
1296+
"vlapic sending ipi %u to vcpu_id %hu",
1297+
vec, vcpu_id);
1298+
} else if (mode == APIC_DELMODE_NMI) {
1299+
vcpu_inject_nmi(target_vcpu);
1300+
dev_dbg(ACRN_DBG_LAPIC,
1301+
"vlapic send ipi nmi to vcpu_id %hu", vcpu_id);
1302+
} else if (mode == APIC_DELMODE_INIT) {
1303+
vlapic_process_init_sipi(target_vcpu, mode, icr_low, vcpu_id);
1304+
} else if (mode == APIC_DELMODE_STARTUP) {
1305+
vlapic_process_init_sipi(target_vcpu, mode, icr_low, vcpu_id);
1306+
} else if (mode == APIC_DELMODE_SMI) {
1307+
pr_info("vlapic: SMI IPI do not support\n");
1308+
} else {
1309+
pr_err("Unhandled icrlo write with mode %u\n", mode);
1310+
}
13131311
}
13141312
}
13151313
}
13161314

1317-
return 0; /* handled completely in the kernel */
1315+
return ret; /* handled completely in the kernel */
13181316
}
13191317

13201318
/**

0 commit comments

Comments
 (0)