SMMUMAN in a QNX Hypervisor guest

SMMUMAN can be used in a QNX guest running in a QNX Hypervisor VM.

No smmu-*.so library is required for a SMMUMAN running in a guest in a QNX Hypervisor VM, as shown in the figure below. The vdev-smmu virtual device in the VM provides the required subset of the smmu-*.so library functionality needed by a SMMUMAN running in a guest (see The vdev-smmu virtual device).

Figure 1. A high-level overview of the SMMUMAN in a guest running in a QNX Hypervisor VM.

The figure above shows the SMMUMAN in a QNX guest running in a QNX Hypervisor VM, as well as the SMMUMAN running in the hypervisor host. Note that as far as the SMMUMAN in the host is concerned the qvm process instance is simply a client like any other.

The vdev-smmu virtual device

To support the SMMUMAN running in a QNX guest in a QNX Hypervisor VM or QNX Hypervisor for Safety VM, the VM hosting the guest must include the vdev-smmu virtual device (vdev). This vdev provides the following:

IOMMU/SMMU services
The vdev-smmu vdev provides for the guest the same services for guest-physical memory as an IOMMU/SMMU provides for an OS running on the hardware: accept configuration information passed to it by the guest’s smmuman service, deny DMA device attempts to access memory outside their permitted regions, communicate these denials back to the devices, record these attempts, etc.
Memory mapping
The vdev-smmu vdev shares memory mappings for DMA devices passed-through to the guest with the SMMUMAN running in the hypervisor host to ensure that the host SMMUMAN and the board IOMMU/SMMUs are able to manage pass-through DMA devices' accesses to host-physical memory.

Supporting components

The vdev-smmu.so virtual device shared object is a QNX Hypervisor component. It must be loaded into the hypervisor host to enable the smmuman service in a hypervisor guest. For more information about vdev-smmu and how to use it, see SMMUMAN in a QNX Hypervisor system in the Mapping DMA devices and memory regions chapter, and the QNX Hypervisor User's Guide.

To run the smmuman service, a guest running in a QNX Hypervisor VM on ARM platforms must load libfdt.so. Make sure you include this shared object in the guest's buildfile.