STRUCT IOMMU_HWPT_PGFAULT(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ¦‹ STRUCT IOMMU_HWPT_PGFAULT(9) πŸ¦‹

okay so bestie, welcome to the Kernel API Manual, section 9 β€” this is struct iommu_hwpt_pgfault, and it's literally the page-fault data glow-up for iommu. yes, the entire page is about one struct. she's compact, she's iconic, let's get into it πŸ’…


✨ NAME ✨

struct iommu_hwpt_pgfault β€” iommu page fault data 🫢


🌸 SYNOPSIS 🌸

struct iommu_hwpt_pgfault {
    __u32 flags;
    __u32 dev_id;
    __u32 pasid;
    __u32 grpid;
    __u32 perm;
    __u32 __reserved;
    __aligned_u64 addr;
    __u32 length;
    __u32 cookie;
 };

like, that's her. that's the whole struct. no cap πŸ’€


πŸ’– MEMBERS πŸ’–

okay member-by-member, because every single field matters and we are NOT skipping any πŸŽ€

  • flags β€” a combination of enum iommu_hwpt_pgfault_flags. mix and match, she's flexible ✨
  • dev_id β€” the id of the originated device, aka who caused this whole situation πŸ™ˆ
  • pasid β€” Process Address Space ID πŸ¦‹
  • grpid β€” Page Request Group Index πŸ”₯
  • perm β€” a combination of enum iommu_hwpt_pgfault_perm πŸ’…
  • __reserved β€” Must be 0. that's it, that's the whole personality. zero. nothing. do not touch 🚫
  • addr β€” Fault address πŸ“
  • length β€” highkey just a hint of how much data the requestor is expecting to fetch. for example, if the PRI initiator knows it is going to do a 10MB transfer, it could fill in 10MB and the OS could pre-fault in 10MB of IOVA. it's default to 0 if there's no such hint πŸ‘‘
  • cookie β€” a kernel-managed cookie identifying a group of fault messages πŸͺ the cookie number encoded in the last page fault of the group should be echoed back in the response message. yes, you have to send the cookie back, that's the whole point, iykyk πŸ’€

🌈 SEE ALSO 🌈

first up, the source file itself: Kernel file ./include/uapi/linux/iommufd.h πŸ“

and then, bestie, the whole extended friend group β€” every single one, in order, no skipping 🫢

  • 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_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)
  • 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)

πŸ’‘ friendly reminder: __reserved is 0. not "roughly zero", not "0-ish". 0. she said what she said 🚫✨

mwah, that's the page! source is ./include/uapi/linux, dated October 2026, and we are all caught up on struct iommu_hwpt_pgfault(9) β€” slay, go read your page faults πŸ’œπŸŽ€

πŸ“¦ where this page comes from