STRUCT IOMMU_VIOMMU_ARM_SMMUV3_INVALIDATE(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct iommu_viommu_arm_smmuv3_invalidate(9) ✨

okay so this is a page from the Kernel API Manual, and honestly? it's giving "niche but iconic." it's all about one struct that carries a single ARM SMMUv3 cache invalidation command into the kernel. tiny struct, big responsibilities. let's get into it πŸŽ€


🌸 NAME 🌸

struct iommu_viommu_arm_smmuv3_invalidate β€” the ARM SMMUv3 cache invalidation situation (aka IOMMU_VIOMMU_INVALIDATE_DATA_ARM_SMMUV3). yes, that's the whole name, yes it's a mouthful, no we're not shortening it. periodt πŸ’…


⭐ SYNOPSIS ⭐

here's the whole vibe, literally the entire struct:

struct iommu_viommu_arm_smmuv3_invalidate {
    __aligned_le64 cmd[2];
 };

that's it. two little 64-bit-aligned slots and a dream πŸ¦‹


🧚 Members 🧚

  • cmd β€” a 128-bit cache invalidation command that runs in the SMMU CMDQ. must be little-endian. that's the whole member, bestie, it's carrying the entire payload on its back πŸ”₯

πŸ‘‘ Description πŸ‘‘

okay so here's the tea: these are the commands you're allowed to pass, and that list only applies when you pass in a vIOMMU via hwpt_id. no hwpt_id, no party πŸ™ˆ

The supported command list is:

  • CMDQ_OP_TLBI_NSNH_ALL
  • CMDQ_OP_TLBI_NH_VA
  • CMDQ_OP_TLBI_NH_VAA
  • CMDQ_OP_TLBI_NH_ALL
  • CMDQ_OP_TLBI_NH_ASID
  • CMDQ_OP_ATC_INV
  • CMDQ_OP_CFGI_CD
  • CMDQ_OP_CFGI_CD_ALL

and if you try to sneak in a command that isn't on this list?

-EIO will be returned if the command is not supported. so like… don't πŸ’€

🫢 SEE ALSO 🫢

the friend group is huge, i'm obsessed. go read ./include/uapi/linux/iommufd.h in the kernel files first, then say hi to all of these:

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_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. huge friend group. iykyk πŸ’œ


and that's the whole page, bestie 🌈 this lived in ./include/uapi/linux, dated October 2026, and it's filed under struct iommu_viommu_arm_smmuv3_invalidate(9). go forth and invalidate those caches responsibly, mwah πŸ“

πŸ“¦ where this page comes from