STRUCT IOMMU_HWPT_ARM_SMMUV3(9)
π struct iommu_hwpt_arm_smmuv3 β Kernel API Manual β¨
okay so bestie, this is a kernel API manual page entry for struct iommu_hwpt_arm_smmuv3, and it's literally all about the ARM SMMUv3 nested STE. yes, that STE. come on now π
πΈ NAME πΈ
struct iommu_hwpt_arm_smmuv3 β the ARM SMMUv3 nested STE, aka IOMMU_HWPT_DATA_ARM_SMMUV3. that's the whole vibe. π
β¨ SYNOPSIS β¨
struct iommu_hwpt_arm_smmuv3 {
__aligned_le64 ste[2];
};
look at her. two double words, aligned, little-endian. iconic. π
π¦ Members π¦
steβ this is the first two double words of the user space Stream Table Entry for the translation, and no cap, it must be little-endian. these are the only fields allowed (go peek at "5.2 Stream Table Entry" in the SMMUv3 HW Spec for the full lore, iykyk):- word-0:
V,Cfg,S1Fmt,S1ContextPtr,S1CDMax - word-1:
EATS,S1DSS,S1CIR,S1COR,S1CSH,S1STALLD
- word-0:
π Description π
so here's the tea: -EIO gets returned if ste is not legal, or if it contains literally any non-allowed field. rude but fair. π«Ά
Cfg is the main character here β it can be used to select an S1, Bypass, or Abort configuration. a Bypass nested domain will translate the same as the nesting parent (fr fr, same energy). the S1 will install a Context Descriptor Table pointing at userspace memory translated by the nesting parent. slay. β¨
it's suggested (read: highly recommended, bestie) to allocate a vDEVICE object carrying vSID and then re-attach the nested domain, as soon as the vSID is available in the VMM level. and here's why:
- when
Cfg=translate, a vDEVICE must be allocated prior to attaching to the allocated nested domain, because CD/ATS invalidations and vevents need avSID. no vSID, no service. π - when
Cfg=bypass/abort, a vDEVICE is not enforced during the nested domain attachment β this is to support a GBPA case where the VM setsCR0.SMMUEN=0. BUT π¨ if the VM setsCR0.SMMUEN=1while missing a vDEVICE object, the kernel would fail to report events to the VM. e.g.F_TRANSLATIONwhen guestSTE.Cfg=abort. so likeβ¦ be aware. π
π SEE ALSO π
Kernel file ./include/uapi/linux/iommufd.h β plus literally the whole friend group:
- General
ioctl format(9) struct iommu_destroy(9)struct iommu_ioas_alloc(9)struct iommu_iova_range(9)struct iommu_ioas_iova_ranges(9)struct iommu_ioas_allow_iovas(9)enum iommufd_ioas_map_flags(9)struct iommu_ioas_map(9)struct iommu_ioas_noiommu_get_pa(9)struct iommu_ioas_map_file(9)struct iommu_ioas_copy(9)struct iommu_ioas_unmap(9)enum iommufd_option(9)enum iommufd_option_ops(9)struct iommu_option(9)enum iommufd_vfio_ioas_op(9)struct iommu_vfio_ioas(9)enum iommufd_hwpt_alloc_flags(9)enum iommu_hwpt_vtd_s1_flags(9)struct iommu_hwpt_vtd_s1(9)struct iommu_hwpt_amd_guest(9)enum iommu_hwpt_data_type(9)struct iommu_hwpt_alloc(9)enum iommu_hw_info_vtd_flags(9)struct iommu_hw_info_vtd(9)enum iommu_hw_info_arm_smmuv3_flags(9)struct iommu_hw_info_arm_smmuv3(9)struct iommu_hw_info_tegra241_cmdqv(9)struct iommu_hw_info_amd(9)enum iommu_hw_info_type(9)enum iommufd_hw_capabilities(9)enum iommufd_hw_info_flags(9)struct iommu_hw_info(9)struct iommu_hwpt_set_dirty_tracking(9)enum iommufd_hwpt_get_dirty_bitmap_flags(9)struct iommu_hwpt_get_dirty_bitmap(9)enum iommu_hwpt_invalidate_data_type(9)enum iommu_hwpt_vtd_s1_invalidate_flags(9)struct iommu_hwpt_vtd_s1_invalidate(9)struct iommu_viommu_arm_smmuv3_invalidate(9)struct iommu_hwpt_invalidate(9)enum iommu_hwpt_pgfault_flags(9)enum iommu_hwpt_pgfault_perm(9)struct iommu_hwpt_pgfault(9)enum iommufd_page_response_code(9)struct iommu_hwpt_page_response(9)struct iommu_fault_alloc(9)enum iommu_viommu_type(9)struct iommu_viommu_tegra241_cmdqv(9)struct iommu_viommu_alloc(9)struct iommu_vdevice_alloc(9)struct iommu_ioas_change_process(9)enum iommu_veventq_flag(9)struct iommufd_vevent_header(9)enum iommu_veventq_type(9)struct iommu_vevent_arm_smmuv3(9)struct iommu_vevent_tegra241_cmdqv(9)struct iommu_veventq_alloc(9)enum iommu_hw_queue_type(9)struct iommu_hw_queue_alloc(9)
okay that's the whole page, bestie, you ate that π
β¨ β this one lives in ./include/uapi/linux and it's dated October 2026, so likeβ¦ future iconic. go forth and nest those STEs, periodt. ππ«Άπ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms