STRUCT VDUSE_IOVA_UMEM(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct vduse_iova_umem(9) β€” Kernel API Manual, bestie edition ✨

okay so picture this: it's a Kernel API Manual page about struct vduse_iova_umem, and it's literally the blueprint for how userspace memory gets mapped to one IOVA region. no cap, it's giving "backstage pass to the IOMMU." let's get into it πŸŽ€

✨ NAME ✨

struct vduse_iova_umem β€” the userspace memory configuration for one IOVA region. one region. that's her whole personality. πŸ’–


πŸ¦‹ SYNOPSIS πŸ¦‹

struct vduse_iova_umem {
    __u64 uaddr;
    __u64 iova;
    __u64 size;
    __u32 asid;
    __u32 reserved[5];
 };

that's the whole struct, copied character-for-character because we do not mess with code. 🫢


🌸 Members 🌸

  • uaddr β€” the start address of the userspace memory. and listen, this one's got rules: it must be aligned to page size. like, not optional. the kernel will vibe check it and you will fail. 😭
  • iova β€” the start of the IOVA region. where the magic happens on the other side. ✨
  • size β€” how big the IOVA region is. big girl energy, however big you need. πŸ‘‘
  • asid β€” the Address Space ID of the IOVA region. that's her government name. πŸͺͺ
  • reserved β€” reserved for future use, and it needs to be initialized to zero. not "probably zero", not "zero if you feel like it" β€” zero. fr fr. ⭐

πŸ’œ Description πŸ’œ

so what is this thing for, you ask? this struct is the messenger 🧚 β€” it's used by the VDUSE_IOTLB_REG_UMEM and VDUSE_IOTLB_DEREG_UMEM ioctls to register / de-register userspace memory for IOVA regions.

register: she's in. de-register: she's out. two ioctls, one struct, zero drama. πŸ’…

lowkey important: that reserved[5] field is reserved for future use and needs to be initialized to zero. don't be cute, don't get creative. πŸ™ˆ

πŸ”₯ SEE ALSO πŸ”₯

  • Kernel file ./include/uapi/linux/vduse.h
  • struct vduse_dev_config(9)
  • struct vduse_iotlb_entry(9)
  • struct vduse_config_data(9)
  • struct vduse_vq_config(9)
  • struct vduse_vq_state_split(9)
  • struct vduse_vq_state_packed(9)
  • struct vduse_vq_group_asid(9)
  • struct vduse_vq_info(9)
  • struct vduse_vq_eventfd(9)
  • struct vduse_iova_info(9)
  • struct vduse_iotlb_entry_v2(9)
  • enum vduse_req_type(9)
  • struct vduse_vq_state(9)
  • struct vduse_dev_status(9)
  • struct vduse_iova_range(9)
  • struct vduse_iova_range_v2(9)
  • struct vduse_vq_ready(9)
  • struct vduse_dev_request(9)
  • struct vduse_dev_response(9)

(that's the whole friend group, go say hi πŸ«ΆπŸ’–)


and that's the page!! it lives over in ./include/uapi/linux and it's dated October 2026, so mark your calendar bestie β€” struct vduse_iova_umem(9) said see you then. slay, bye! πŸ’…βœ¨πŸŽ€

πŸ“¦ where this page comes from