STRUCT IOMMU_IOAS_COPY(9)
π struct iommu_ioas_copy(9) β Kernel API Manual π
okay bestie, grab your iced coffee because we're diving into the kernel API manual for struct iommu_ioas_copy(9) and honestly? it's giving "underrated icon" β¨ this whole page is about the ioctl(IOMMU_IOAS_COPY) situation and it's lowkey so clean once you see it. let's go π¦
β¨ NAME β¨
struct iommu_ioas_copy β literally the ioctl(IOMMU_IOAS_COPY) struct, no cap π
πΈ SYNOPSIS πΈ
here's the whole vibe, character for character, don't touch my baby:
struct iommu_ioas_copy {
__u32 size;
__u32 flags;
__u32 dst_ioas_id;
__u32 src_ioas_id;
__aligned_u64 length;
__aligned_u64 dst_iova;
__aligned_u64 src_iova;
};
like, look at those fields. immaculate. π«Ά
π§ Members π§
okay so every field has a job and they ALL eat:
sizeβ it's justsizeof(struct iommu_ioas_copy). the self-aware queen of the struct πflagsβ a combination ofenum iommufd_ioas_map_flags. mix and match, you do you β¨dst_ioas_idβ the IOAS ID whose mapping you're about to change. main character energy π₯src_ioas_idβ the IOAS ID you're copying from. the source material, iykyk πlengthβ number of bytes to copy and map. bytes. not vibes. bytes πdst_iovaβ the IOVA the mapping was placed at. heads up though: ifIOMMU_IOAS_MAP_FIXED_IOVAis set then this must be provided as input. no skipping πsrc_iovaβ the IOVA to start the copy from. where the lore begins π
π¦ Description π¦
so what does it DO? it copies an already existing mapping from src_ioas_id and establishes it over in dst_ioas_id. simple. iconic. periodt β¨
one thing though, and this is important bestie: the src iova/length must exactly match a range used with IOMMU_IOAS_MAP. exactly. no "close enough", no rounding, none of that. exact match or it's not happening π
why would you even want this? two reasons, both slay:
- it efficiently clones a subset of an IOAS into another one, or
- you can use it as a kind of 'cache' to speed up mapping π§
and it's genuinely better than just setting up equivalent new mappings, because copy has an efficiency advantage β internal resources get shared, and the kernel will pin the user memory only once π₯ that's the whole flex, ngl.
π SEE ALSO π
the extended friend group (all of these are (9) pages and yes we're listing every single one, don't test me):
- Kernel file
./include/uapi/linux/iommufd.h - General
ioctlformat(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_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 guest list, every single one π don't come for me, the original listed them all and so did I π«Ά
and that's the page bestie!! π this one lives in ./include/uapi/linux, dated October 2026, and it's filed under struct iommu_ioas_copy(9) in the Kernel API Manual β go forth and copy those mappings, you absolute legend ππ
π¦ 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