STRUCT IOMMU_IOAS_UNMAP(9)
π
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 issizeof(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
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms