STRUCT IOMMU_VFIO_IOAS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct iommu_vfio_ioas(9) β€” Kernel API Manual πŸŽ€

okay so bestie, this page lives in the Kernel API Manual and it's all about struct iommu_vfio_ioas, which is the struct for the ioctl(IOMMU_VFIO_IOAS) call. it's short, it's sweet, and it's giving "small struct, big responsibilities" energy. let's get into it ✨


✨ NAME ✨

struct iommu_vfio_ioas β€” the struct you hand to ioctl(IOMMU_VFIO_IOAS). yes, that's the whole name. iconic minimalism πŸ’…


πŸ¦‹ SYNOPSIS πŸ¦‹

struct iommu_vfio_ioas {
    __u32 size;
    __u32 ioas_id;
    __u16 op;
    __u16 __reserved;
 };

that's the whole thing. four fields, no notes, slay πŸŽ€


🌸 Members 🌸

  • size β€” sizeof(struct iommu_vfio_ioas). yeah, it's literally just the size of itself. it's self-aware, we love that for it πŸ’–
  • ioas_id β€” the payload field, and its job depends on op, bestie:
    • for IOMMU_VFIO_IOAS_SET it's the input IOAS ID you're setting
    • for IOMMU_VFIO_IOAS_GET it will output the IOAS ID
  • op β€” one of enum iommufd_vfio_ioas_op. that's the toggle that tells this struct what mood it's in πŸ’«
  • __reserved β€” must be 0. no cap, literally zero. don't be cute with it πŸ™ˆ

πŸ”₯ Description πŸ”₯

so here's the lore 🫢 the VFIO compatibility support uses a single ioas because the VFIO APIs do not support the ID field. that's just how it is, fr fr.

this ioctl lets you Set or Get the IOAS that VFIO compatibility will use. IOMMU_VFIO_IOAS_SET for setting, IOMMU_VFIO_IOAS_GET for getting β€” you got it πŸ’œ

now the part that matters πŸ‘‘ when VFIO_GROUP_SET_CONTAINER is used on an iommufd, it will get the compatibility ioas β€” either by taking what is already set, or by auto creating one. from then on VFIO will continue to use that ioas, and it is not affected by this ioctl. so like, once it's locked in, it's locked in πŸ’€

and one clear warning, bestie: SET or CLEAR does not destroy any auto-created IOAS. no cleanup, no goodbye message, it just stays. noted πŸ“

🧚 SEE ALSO 🧚

the friend group πŸ’– the kernel source file is ./include/uapi/linux/iommufd.h, and the whole crew is:

  • 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)
  • 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 a whole friend group and every single one of them is invited 🫢


and that's the page bestie πŸ’œ it comes to you from ./include/uapi/linux, dated October 2026, and it's filed under struct iommu_vfio_ioas(9). go set yourself an IOAS, you've earned it 🌈⭐

πŸ“¦ where this page comes from