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"


