STRUCT IOMMU_IOAS_NOIOMMU_GET_PA(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct iommu_ioas_noiommu_get_pa β€” ioctl(IOMMU_IOAS_NOIOMMU_GET_PA)

okay so bestie, welcome to the struct iommu ... iommu_get_pa(9) page from the Kernel API Manual πŸ¦‹ β€” this is the one about the ioctl called IOMMU_IOAS_NOIOMMU_GET_PA, and honestly? it's giving "niche but iconic" ✨


🌸 SYNOPSIS 🌸

like, here's the whole struct, exactly as it is, no notes:

struct iommu_ioas_noiommu_get_pa {
    __u32 size;
    __u32 flags;
    __u32 ioas_id;
    __u32 __reserved;
    __aligned_u64 iova;
    __aligned_u64 length;
    __aligned_u64 out_phys;
 };

πŸŽ€ MEMBERS πŸŽ€

every field, every vibe check, let's go:

  • size β€” this is just sizeof(struct iommu_ioas_noiommu_get_pa). it's literally the struct measuring itself πŸͺž
  • flags β€” reserved! must be 0 for now. no cap, don't be creative here πŸ™ˆ
  • ioas_id β€” the IOAS ID you're querying the IOVAβ†’PA mapping from πŸ‘‘
  • __reserved β€” must be 0. that's it. that's the whole job πŸ’€
  • iova β€” the IOVA you want to query, bestie πŸ”
  • length β€” okay so this one's a two-way field and it's lowkey the main character: on input, it's a non-zero maximum number of bytes to query starting from iova. on output, it's the number of physically contiguous bytes starting from out_phys, capped by the input length πŸŽ€
  • out_phys β€” the output physical address that the IOVA maps to. the answer fr fr 🫢

πŸ”₯ DESCRIPTION πŸ”₯

so what does it do? it queries the physical address backing an IOVA range πŸ’«

the rules, and yes these are rules:

  • the beginning of the range must already be mapped
  • length must be non-zero
⚠️ big warning energy: this is for noiommu devices doing unsafe DMA only. read that again. unsafe DMA. we are not being careful here and you should know that going in 😭

πŸ‘‘ SEE ALSO πŸ‘‘

the whole friend group, gathered for you πŸ’– β€” kernel file ./include/uapi/linux/iommufd.h, plus:

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

that's the whole page, you ate it up πŸ’…βœ¨ this cutie lives at ./include/uapi/linux and the version stamp says October 2026 β€” so like, futuristic bestie behavior, slay πŸŽ€πŸ¦‹πŸŒΈπŸ’œ

πŸ“¦ where this page comes from