Skip to content

Latest commit

 

History

History
57 lines (40 loc) · 1.87 KB

ivshmem.rst

File metadata and controls

57 lines (40 loc) · 1.87 KB

Inter-VM Shared Memory

As Zephyr is enabled to run as a guest OS on Qemu and ACRN it might be necessary to make VMs aware of each other, or aware of the host. This is made possible by exposing a shared memory among parties via a feature called ivshmem, which stands for inter-VM Shared Memory.

The Two types are supported: a plain shared memory (ivshmem-plain) or a shared memory with the ability for a VM to generate an interruption on another, and thus to be interrupted as well itself (ivshmem-doorbell).

Please refer to the official Qemu ivshmem documentation for more information.

Zephyr supports both version: plain and doorbell. Ivshmem driver can be build by enabling :kconfig:option:`CONFIG_IVSHMEM`. By default, this will expose the plain version. :kconfig:option:`CONFIG_IVSHMEM_DOORBELL` needs to be enabled to get the doorbell version.

Because the doorbell version uses MSI-X vectors to support notification vectors, the :kconfig:option:`CONFIG_IVSHMEM_MSI_X_VECTORS` has to be tweaked to the amount of vectors that will be needed.

Note that a tiny shell module can be exposed to test the ivshmem feature by enabling :kconfig:option:`CONFIG_IVSHMEM_SHELL`.

Zephyr also supports ivshmem-v2:

https://github.com/siemens/jailhouse/blob/master/Documentation/ivshmem-v2-specification.md

This is primarily used for IPC in the Jailhouse hypervisor (e.g. :ref:`eth_ivshmem_sample`). It is also possible to use ivshmem-v2 without Jailhouse by building the Siemens fork of QEMU, and modifying the QEMU launch flags:

https://github.com/siemens/qemu/tree/wip/ivshmem2

.. doxygengroup:: ivshmem