STRUCT IOMMU_IOAS_UNMAP(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct iommu_ioas_unmap β€” like, the ioctl IOMMU_IOAS_UNMAP bestie πŸ’…

okay so this is a page from the Kernel API Manual, and it's all about one very specific little struct that does one very specific little job: unmapping an IOVA range. no cap, that's the whole vibe. let's get into it 🫢


✨ NAME ✨

struct iommu_ioas_unmap β€” literally just ioctl(IOMMU_IOAS_UNMAP). that's it. that's the name. πŸ’–


πŸ¦‹ SYNOPSIS πŸ¦‹

struct iommu_ioas_unmap {
    __u32 size;
    __u32 ioas_id;
    __aligned_u64 iova;
    __aligned_u64 length;
 };

look at her. four fields. immaculate. main character energy fr 🌸


πŸŽ€ Members πŸŽ€

  • size β€” this is sizeof(struct iommu_ioas_unmap). yes bestie, you have to tell it how big you are. it's giving "describe yourself in one number" πŸ’€
  • ioas_id β€” the IOAS ID whose mapping you're about to change. like, which IOAS are we touching today πŸ‘€
  • iova β€” the IOVA where the unmapping starts. the starting line. the beginning of the end πŸ”₯
  • length β€” how many bytes to unmap, and it hands back the bytes that actually got unmapped. so it's a two-way street, iconic behavior honestly ✨

🌈 Description 🌈

so the whole thing unmaps an IOVA range. and here's the important part, listen up: the iova/length must be a superset of a previously mapped range used with IOMMU_IOAS_MAP or IOMMU_IOAS_COPY.

read that again. superset. go bigger or go home.

🚨 Splitting or truncating ranges is not allowed. not a little bit, not "just this once", not "but it's only a few bytes". no. don't do it. it will not slay. 😭

and if you pass the values 0 to U64_MAX? that unmaps everything. the whole thing. the entire buffet. gone. πŸ’€


πŸ’œ SEE ALSO πŸ’œ

the extended fam, in no particular order but also in exactly this order:

  • the kernel file ./include/uapi/linux/iommufd.h β€” go read it, iykyk πŸ“–
  • 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)
  • 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)

like i said. the whole fam. every single one of them showed up to the party πŸ§šπŸ’–


and that's the page!! mwah πŸ’‹ this one comes to you from ./include/uapi/linux, dated October 2026, and it is proudly filed under struct iommu_ioas_unmap(9). go unmap responsibly, bestie β€” superset or nothing πŸŽ€βœ¨

πŸ“¦ where this page comes from