Skip site navigation (1)Skip section navigation (2)
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>