From 3db34b31642826a8aa0980ee83068c30eee0380f Mon Sep 17 00:00:00 2001 From: Peter Fang Date: Mon, 23 Nov 2020 23:33:14 -0800 Subject: [PATCH] doc: add documentation for graceful system shutdown Tracked-On: #5411 Signed-off-by: Peter Fang --- doc/tutorials/enable_s5.rst | 44 ++++++++++++++++++++++- doc/tutorials/images/system_shutdown.png | Bin 0 -> 15483 bytes 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 doc/tutorials/images/system_shutdown.png diff --git a/doc/tutorials/enable_s5.rst b/doc/tutorials/enable_s5.rst index 51db8f1ab..a39ad8714 100644 --- a/doc/tutorials/enable_s5.rst +++ b/doc/tutorials/enable_s5.rst @@ -193,7 +193,7 @@ How to test .. note:: For WaaG, we need to close ``windbg`` by using the ``bcdedit /set debug off`` command IF you executed the ``bcdedit /set debug on`` when you set up the WaaG, because it occupies the ``COM2``. -#. Use the``acrnctl stop`` command on the Service VM to trigger S5 to the User VMs: +#. Use the ``acrnctl stop`` command on the Service VM to trigger S5 to the User VMs: .. code-block:: console @@ -205,3 +205,45 @@ How to test # acrnctl list vm1 stopped + +System Shutdown +*************** + +Using a coordinating script, ``misc/life_mngr/s5_trigger.sh``, in conjunction with +the lifecycle manager in each VM, graceful system shutdown can be performed. + +.. note:: Please install ``s5_trigger.sh`` manually to root's home directory. + + .. code-block:: none + + $ sudo install -p -m 0755 -t ~root misc/life_mngr/s5_trigger.sh + +In the ``hybrid_rt`` scenario, the script can send a shutdown command via ``ttyS1`` +in the Service VM, which is connected to ``ttyS1`` in the pre-launched VM. The +lifecycle manager in the pre-launched VM receives the shutdown command, sends an +ack message, and proceeds to shut itself down accordingly. + +.. figure:: images/system_shutdown.png + :align: center + + Graceful system shutdown flow + +#. The HMI Windows Guest uses the lifecycle manager to send a shutdown request to + the Service VM +#. The lifecycle manager in the Service VM responds with an ack message and + executes ``s5_trigger.sh`` +#. After receiving the ack message, the lifecycle manager in the HMI Windows Guest + shuts down the guest +#. The ``s5_trigger.sh`` script in the Service VM shuts down the Linux Guest by + using ``acrnctl`` to send a shutdown request +#. After receiving the shutdown request, the lifecycle manager in the Linux Guest + responds with an ack message and shuts down the guest +#. The ``s5_trigger.sh`` script in the Service VM shuts down the Pre-launched RTVM + by sending a shutdown request to its ``ttyS1`` +#. After receiving the shutdown request, the lifecycle manager in the Pre-launched + RTVM responds with an ack message +#. The lifecycle manager in the Pre-launched RTVM shuts down the guest using + standard PM registers +#. After receiving the ack message, the ``s5_trigger.sh`` script in the Service VM + shuts down the Service VM +#. The hypervisor shuts down the system after all of its guests have shut down diff --git a/doc/tutorials/images/system_shutdown.png b/doc/tutorials/images/system_shutdown.png new file mode 100644 index 0000000000000000000000000000000000000000..58f42eed3fb855a21f76adc05dc5ee559b659ff0 GIT binary patch literal 15483 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�}Mdkc{$A4!C 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 literal 0 HcmV?d00001