@@ -1229,6 +1229,7 @@ vlapic_icrlo_write_handler(struct acrn_vlapic *vlapic)
1229
1229
{
1230
1230
uint16_t vcpu_id ;
1231
1231
bool phys ;
1232
+ int32_t ret = 0 ;
1232
1233
uint64_t dmask = 0UL ;
1233
1234
uint32_t icr_low , icr_high , dest ;
1234
1235
uint32_t vec , mode , shorthand ;
@@ -1253,68 +1254,65 @@ vlapic_icrlo_write_handler(struct acrn_vlapic *vlapic)
1253
1254
if ((mode == APIC_DELMODE_FIXED ) && (vec < 16U )) {
1254
1255
vlapic_set_error (vlapic , APIC_ESR_SEND_ILLEGAL_VECTOR );
1255
1256
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 {
1269
1262
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 );
1291
1266
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
+ }
1295
1288
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
+ }
1313
1311
}
1314
1312
}
1315
1313
}
1316
1314
1317
- return 0 ; /* handled completely in the kernel */
1315
+ return ret ; /* handled completely in the kernel */
1318
1316
}
1319
1317
1320
1318
/**
0 commit comments