ENUM IOMMUFD_HWPT_ALLOC_FLAGS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… enum iommufd_hwpt_alloc_flags(9) πŸ’…

okay so bestie, you found yourself in the Kernel API Manual β€” welcome, pull up a chair, we're talking about HWPT allocation flags today and honestly? it's giving "small enum, big responsibilities" ✨


🌸 NAME 🌸

enum iommufd_hwpt_alloc_flags β€” the flags you pass when you're allocating an HWPT πŸŽ€


✨ SYNOPSIS ✨

enum iommufd_hwpt_alloc_flags {
    IOMMU_HWPT_ALLOC_NEST_PARENT ,
    IOMMU_HWPT_ALLOC_DIRTY_TRACKING ,
    IOMMU_HWPT_FAULT_ID_VALID ,
    IOMMU_HWPT_ALLOC_PASID

};

like, that's the whole vibe. four constants, zero drama (mostly) πŸ¦‹


πŸŽ€ Constants πŸŽ€

  • IOMMU_HWPT_ALLOC_NEST_PARENT β€” set this and you get a HWPT that can serve as the parent HWPT in a nesting configuration πŸ‘‘ it's the main character of the nesting setup fr fr.
  • IOMMU_HWPT_ALLOC_DIRTY_TRACKING β€” dirty tracking support for the device IOMMU, and heads up: this is enforced on device attachment, so it's not a "maybe later" kind of flag, it's a commitment πŸ’€
  • IOMMU_HWPT_FAULT_ID_VALID β€” tells everyone the fault_id field of the hwpt allocation data is valid. literally that's it, that's the flag 🫢
  • IOMMU_HWPT_ALLOC_PASID β€” requests a domain that can be used with PASID, and that domain can be attached to any PASID on the device πŸ’œ but listen, there are rules:
    • any domain attached to the non-PASID part of the device must also be flagged, otherwise attaching a PASID will be blocked πŸ™ˆ
    • if you're the user who wants to attach PASID, ioas is not recommended for both the non-PASID part and the PASID part of the device
    • and if the IOMMU doesn't support PASID? it returns an error (-EOPNOTSUPP) 😭 no cap.
bestie pls read the PASID bullets twice, the "blocked" thing is real and it will ruin your whole afternoon 🌈

πŸ¦‹ SEE ALSO πŸ¦‹

Kernel file ./include/uapi/linux/iommufd.h β€” go read it, it's iconic ⭐

  • 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 iommu_hwpt_vtd_s1_flags(9)
  • struct iommu_hwpt_vtd_s1(9)
  • struct iommu_hwpt_arm_smmuv3(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)

like yes that's a lot of cross-references but that's the lore okay πŸ’…


that's the whole page bestie!! source lives in ./include/uapi/linux and this edition is dated October 2026 β€” go forth and nest your HWPTs responsibly πŸ§šβ€β™€οΈπŸ’–πŸ“

πŸ“¦ where this page comes from