Date: Mon, 20 Jul 2026 20:53:34 +0000 From: Konstantin Belousov <kib@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Cc: Ariel Ehrenberg <aehrenberg@nvidia.com> Subject: git: c15fa820881d - stable/15 - mlx5ib: encode dynamic UAR mmap offsets in the reserved command range Message-ID: <6a5e8ace.1dd5d.17f1dc05@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch stable/15 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=c15fa820881d31dfe64d9c06922dca466ae147df commit c15fa820881d31dfe64d9c06922dca466ae147df Author: Ariel Ehrenberg <aehrenberg@nvidia.com> AuthorDate: 2026-06-08 10:55:47 +0000 Commit: Konstantin Belousov <kib@FreeBSD.org> CommitDate: 2026-07-20 20:26:07 +0000 mlx5ib: encode dynamic UAR mmap offsets in the reserved command range (cherry picked from commit 631e57d54c137e9393c47075db09a6c7fb84c6ed) --- sys/dev/mlx5/mlx5_ib/mlx5_ib.h | 11 +++++++++++ sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c | 24 +++++++++++++++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/sys/dev/mlx5/mlx5_ib/mlx5_ib.h b/sys/dev/mlx5/mlx5_ib/mlx5_ib.h index 7e370ba004e7..99ebc2840160 100644 --- a/sys/dev/mlx5/mlx5_ib/mlx5_ib.h +++ b/sys/dev/mlx5/mlx5_ib/mlx5_ib.h @@ -66,6 +66,17 @@ enum { MLX5_IB_MMAP_CMD_MASK = 0xff, }; +/* + * Reserved mmap command range used to encode rdma_user_mmap entry page + * offsets (e.g. dynamically allocated UARs). Keeping these above the legacy + * MLX5_IB_MMAP_* commands ensures mlx5_ib_mmap() routes them to the + * rdma_user_mmap offset handler instead of the legacy bfreg uar_mmap() path. + */ +enum { + MLX5_IB_MMAP_OFFSET_START = 9, + MLX5_IB_MMAP_OFFSET_END = 255, +}; + enum { MLX5_RES_SCAT_DATA32_CQE = 0x1, MLX5_RES_SCAT_DATA64_CQE = 0x2, diff --git a/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c b/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c index 599361549763..c6175570734c 100644 --- a/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c +++ b/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c @@ -1703,6 +1703,25 @@ static unsigned long mlx5_vma_to_pgoff(struct vm_area_struct *vma) return (command << 16 | idx); } +static u64 mlx5_entry_to_mmap_offset(struct mlx5_user_mmap_entry *entry) +{ + u64 cmd = (entry->rdma_entry.start_pgoff >> 16) & 0xFFFF; + u64 index = entry->rdma_entry.start_pgoff & 0xFFFF; + + return (((index >> 8) << 16) | (cmd << MLX5_IB_MMAP_CMD_SHIFT) | + (index & 0xFF)) << PAGE_SHIFT; +} + +static int mlx5_rdma_user_mmap_entry_insert(struct mlx5_ib_ucontext *c, + struct mlx5_user_mmap_entry *entry, + size_t length) +{ + return rdma_user_mmap_entry_insert_range( + &c->ibucontext, &entry->rdma_entry, length, + (MLX5_IB_MMAP_OFFSET_START << 16), + ((MLX5_IB_MMAP_OFFSET_END << 16) + (1UL << 16) - 1)); +} + static int mlx5_ib_mmap_offset(struct mlx5_ib_dev *dev, struct vm_area_struct *vma, struct ib_ucontext *ucontext) @@ -3444,12 +3463,11 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_UAR_OBJ_ALLOC)( entry->page_idx = uar_index; entry->address = uar_index2pfn(dev, uar_index) << PAGE_SHIFT; - err = rdma_user_mmap_entry_insert(&c->ibucontext, &entry->rdma_entry, - length); + err = mlx5_rdma_user_mmap_entry_insert(c, entry, length); if (err) goto err_entry; - mmap_offset = rdma_user_mmap_get_offset(&entry->rdma_entry); + mmap_offset = mlx5_entry_to_mmap_offset(entry); err = uverbs_copy_to(attrs, MLX5_IB_ATTR_UAR_OBJ_ALLOC_MMAP_OFFSET, &mmap_offset, sizeof(mmap_offset)); if (err)home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a5e8ace.1dd5d.17f1dc05>
