SMMUMAN in a QNX hypervisor guest

Updated: October 28, 2024

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

Note: In this document, we use “QNX hypervisor” (with a small h) to refer to either the non-safety product QNX Hypervisor or the safety-certified product QNX Hypervisor for Safety. When necessary, we refer to a specific hypervisor product using its exact name with the appropriate capitalization (with a large h).

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 running in a QNX hypervisor system.

The figure above shows the SMMUMAN running in a QNX guest in a QNX hypervisor VM, as well as 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, 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 can 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 guest. For more information about vdev-smmu and how to use it, see SMMUMAN in a QNX hypervisor system and Mapping DMA devices and memory regions through the API, 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.