Overall: (9 cases) - Test method * Add cases/soft-inj/panic/cases.sh into configuration file, and invoke a test driver on it. - Common * Test script of test cases in this file can be found in cases/soft-inj/panic/cases.sh 1. fatal - Objective: * Test MSR read logic of MCE handler * Test synchronization between monarch and subject * Test logic to recognize a fatal (PCC) MCE - Code path tested: * do_machine_check() * mce_start() * mce_end() * mce_reign() until mce_panic("Fatal Machine check",) * mce_severity() * mce_timeout() except if (*t <= 0) branch * mce_panic() * print_mce() * mce_log() - Reference: * Inject data file: cases/soft-inj/panic/data/fatal - Expected result: * No warning or bug during kernel processing. * MCE records collected via kernel panic log is same as reference ones. * Kernel panic message is "Fatal Machine check" * Exception message is "Processor context corrupt" 2. fatal timeout - Objective: * Test logic of timeout during monarch/subject synchronization * Test logic to recognize a fatal (PCC) MCE - Code path tested: * do_machine_check() * mce_start() * mce_timeout() if (*t <= 0) branch * mce_severity() * mce_panic("Fatal machine check on current CPU",); * print_mce() * mce_log() - Reference: * Inject data file: cases/soft-inj/panic/data/fatal_timeout - Expected result: * No warning or bug during kernel processing. * MCE records collected via kernel panic log is same as reference ones. * Kernel panic message is "Fatal machine check on current CPU" * Exception message is "Processor context corrupt" * Timeout message is "Some CPUs didn't answer in synchronization" 3. fatal in irq - Objective: * Test fatal MCE occur in IRQ context * Test logic to recognize a fatal (PCC) MCE - Code path tested: * Same as fatal - Reference: * Inject data file: cases/soft-inj/panic/data/fatal_irq - Expected result: * No warning or bug during kernel processing. * MCE records collected via kernel panic log is same as reference ones. * Kernel panic message is "Fatal Machine check" * Exception message is "Processor context corrupt" 4. fatal with RIPV - Objective: * Test combination of PCC and RIPV * Test logic to recognize a fatal (PCC) MCE - Code path tested: * MCG_STATUS_RIPV branch of switch(m.mcgstatus) in do_machine_check * Others are same as fatal - Reference: * Inject data file: cases/soft-inj/panic/data/fatal_ripv - Expected result: * No warning or bug during kernel processing. * MCE records collected via kernel panic log is same as reference ones. * Kernel panic message is "Fatal Machine check" * Exception message is "Processor context corrupt" 5. fatal timeout with RIPV - Objective: * Test timeout logic of combination of PCC and RIPV * Test logic to recognize a fatal (PCC) MCE - Code path tested: * MCG_STATUS_RIPV branch of switch(m.mcgstatus) in do_machine_check * Others are same as fatal_timeout - Reference: * Inject data file: cases/soft-inj/panic/data/fatal_timeout_ripv - Expected result: * No warning or bug during kernel processing. * MCE records collected via kernel panic log is same as reference ones. * Kernel panic message is "Fatal machine check on current CPU" * Exception message is "Processor context corrupt" * Timeout message is "Some CPUs didn't answer in synchronization" 6. fatal with OVER - Objective: * Test OVER flag in MCI_STATUS processing * Test logic to recognize a fatal (PCC) MCE - Code path tested: * Same as fatal - Reference: * Inject data file: cases/soft-inj/panic/data/fatal_over - Expected result: * No warning or bug during kernel processing. * MCE records collected via kernel panic log is same as reference ones. * Kernel panic message is "Fatal Machine check" * Exception message is "Processor context corrupt" 7. fatal and UC without EN - Objective: * Test no EN processing. Only one MCE can be injected on one CPU, so a MCE without EN are injected on other CPU. * Test logic to recognize a fatal (PCC) MCE - Code path tested: * Same as fatal except no EN branch in do_machine_check() - Reference: * Inject data file: cases/soft-inj/panic/data/fatal_no_en * Reference MCE records: cases/soft-inj/panic/refer/fatal_no_en - Expected result: * No warning or bug during kernel processing. * MCE records collected via kernel panic log is same as reference ones. * Kernel panic message is "Machine check from unknown source" * No exception message 8. fatal with EIPV - Objective: * Test combination of PCC and EIPV * Test logic to recognize a fatal (PCC) MCE - Code path tested: * Same as fatal - Reference: * Inject data file: cases/soft-inj/panic/data/fatal_eipv - Expected result: * No warning or bug during kernel processing. * MCE records collected via kernel panic log is same as reference ones. * Kernel panic message is "Fatal Machine check" * Exception message is "Processor context corrupt" 9. fatal in userspace - Objective: * Test of PCC in userspace * Test logic to recognize a fatal (PCC) MCE - Code path tested: * Same as fatal - Reference: * Inject data file: cases/soft-inj/panic/data/fatal_eipv - Expected result: * No warning or bug during kernel processing. * MCE records collected via kernel panic log is same as reference ones. * Kernel panic message is "Fatal Machine check" * Exception message is "Processor context corrupt"