STRUCT IOMMU_IOAS_CHANGE_PROCESS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

okay so welcome to the Kernel API Manual, bestie β€” this is the page for struct iommu_ioas_change_process(9) and it’s lowkey a glow-up for moving device operation between processes πŸ’…βœ¨

🌸 NAME 🌸

struct iommu_ioas_change_process β€” the ioctl(VFIO_IOAS_CHANGE_PROCESS) struct, periodt. slay πŸ‘‘

✨ SYNOPSIS ✨

struct iommu_ioas_change_process {
    __u32 size;
    __u32 __reserved;
};

🫢 Members 🫢

  • size β€” this one is sizeof(struct iommu_ioas_change_process). yes bestie, it’s giving self-aware. πŸŽ€
  • __reserved β€” Must be 0. literally zero. not one, not a vibe, zero. πŸ™ˆ

πŸ’… Description πŸ’…

okay so here’s the tea: this transfers pinned memory counts for every memory map in every IOAS in the context over to the current process. like, all of them, to the current process. 🫢

it only supports maps created with IOMMU_IOAS_MAP_FILE, and returns EINVAL if other maps are present. so if there’s a map in the mix that wasn’t made that way, it’s an EINVAL moment, no cap. 😭

if the ioctl returns a failure status, then nothing is changed. zero changes. none. the whole thing stays exactly how it was. πŸ’€

this API is useful for transferring operation of a device from one process to another, such as during userland live update. like handing the aux cord to your bestie mid-drive, but for a device. πŸ”₯

πŸ”₯ SEE ALSO πŸ”₯

  • Kernel file: ./include/uapi/linux/iommufd.h
  • 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)
  • 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)
  • 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, bestie πŸ’– it’s sourced from ./include/uapi/linux, dated October 2026, and it’s giving Kernel API Manual energy. mwah πŸ«ΆπŸŽ€

πŸ“¦ where this page comes from