acrn-hypervisor/hypervisor/include/arch/x86/guest
Kaige Fu 83d11bbff8 HV: Register S5 pio handler for dm-launched RTVM
The virtual pm port of RTVM is intercepted by HV. But the HV needs to inform the DM as well.
So we will forward the virtual S5 request to DM too

The handler in HV just set the pm state flag (VM_POWERING_OFF) which indicate that the RTVM is powering
off by itself. Meanwhile, there are data resources in VHM and DM should be released once we handle the PM
of RTVM in HV. So, return to DM to go through the entire VM destroy cycles to release the resources.
During the cycles, the DM will try to pause vm through hypercall. In the hypercall handler in HV, we will
check the pm state flag. If it is set, pause all the vCPUs of the vm. Otherwise, reject the request.

In this way, we can make sure that RTVM can only trigger its s5 by itself. All
other S5 request from external will be rejected.

Here is sequence chart of RTVM s5.

   poweroff
+-----------+              +----------+           +-----------+         +----------+
|    vBSP   |              |    vAPs  |           |    HV     |         |    DM    |
+-----+-----+              +----------+           +-----+-----+         +-----+----+
      |                         |                       |                     |
      |   Stop all other cpus   |                       |                     |
      +----------------------------+                    |                     |
      |                         |  |Disable LAPIC       |                     |
      |                         +<-+                    |                     |
      |                         |                       |                     |
      |                         +--+                    |                     |
      |                         |  |HLT in              |                     |
      | All other cpus stopped  |  |non-root mode       |                     |
      +----------------------------+                    |                     |
      |     Call ACPI method to enter s5                |                     |
      +-------------------------+---------------------> |                     |
      |                         |   Set s5 flag         |                     |
      |                         | <---------------------+                     |
      |                         |   APs paused          | Re-inject IOREQ TO DM
      |                         | +-------------------> +-------------------> +
      |                         |                       |   Pause VM          |
      |                         |   Check S5 flag:      | <-------------------+
      |                         |    - If set, pause vm |  VM paused          |
      |                         |    - If no, reject    | +-----------------> +--+
      |                         |                       |  Destroy VM         |  |Deinit works
      |                         |                       | <--------------------<-+
      |                         |                       |  VM destroyed       |
      |                         |                       | +-----------------> |
      +                         +                       +                     +

Tracked-On: #2865
Signed-off-by: Kaige Fu <kaige.fu@intel.com>
2019-03-29 16:17:44 +08:00
..
assign.h hv:cleanup header file for guest folder 2019-02-21 10:38:30 +08:00
ept.h hv:cleanup header file for guest folder 2019-02-21 10:38:30 +08:00
guest_memory.h HV: Modularize boot folder 2019-03-14 09:05:53 +08:00
guest_pm.h HV: Register S5 pio handler for dm-launched RTVM 2019-03-29 16:17:44 +08:00
instr_emul.h hv:move instr_emul_ctxt instance to struct vcpu 2019-03-13 14:04:20 +08:00
io_emul.h HV: Register S5 pio handler for dm-launched RTVM 2019-03-29 16:17:44 +08:00
trusty.h hv: seed: refine header file 2019-03-15 14:09:56 +08:00
ucode.h HV:treewide:rename vcpu data structure 2018-11-05 15:35:49 +08:00
vcpu.h Revert "hv: vmsr: add IA32_MISC_ENABLE to msr store area" 2019-03-26 13:59:21 +08:00
vcpuid.h hv:cleanup header file for vm.c & vm.h 2019-02-03 13:50:42 +08:00
virtual_cr.h hv:move some files to guest folder 2019-01-30 20:43:04 +08:00
vlapic.h hv: vlapic: remove TPR set/get API 2019-03-25 13:31:51 -07:00
vm.h HV: Introduce a new API is_rt_vm 2019-03-29 16:17:44 +08:00
vmcs.h hv:cleanup header file for guest folder 2019-02-21 10:38:30 +08:00
vmexit.h hv: refine guest.h 2019-02-03 13:00:42 +08:00
vmtrr.h modularization: clean up namings in vMTRR module 2018-12-14 09:43:06 +08:00