From nobody Tue Jul 7 11:30:06 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4gvfCf4qwRz6dRc0 for ; Tue, 07 Jul 2026 11:30:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gvfCf2Kdkz3Ljx for ; Tue, 07 Jul 2026 11:30:06 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1783423806; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=8pa5k1ZNdzLP9yf+BVevpNWfcyhS90iBh1czXBgWNPw=; b=RAas5U1wK4Rjxe5svMjmvP4eaHEJinVqDNgiL2IF5sjQQ/oY6OndDN+kddUBCUUqDlZ0Gy ARpKcnan1VkVwD0jPlw4mgehTkfpV8nGd5gKxvUFTK9yQq4e1lM0DIn0EtInu2pZATP8+o it+g/JRj2g0018Dp9Te16/j8emh0Fqz4NSWvwsLaMYxJxOpgbHTV/Q4LuL5MuJC7sHrDX3 vZRMfyMCyF5DM96zDqFg46wn9WNHA+qr6sA/iZsHRDACvgnT3DMjkO7CuambzwSjFa6wBU zPiZbnJ5aqRnmmOSrXF9FpcsVqUFcO49o4G/0s6tcZgN+R1hVT6e2gXLfY2rUw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1783423806; a=rsa-sha256; cv=none; b=chMK/esNX6Lc3P70M74WoFHrDWkiXiniiCMSpu68CE3lPQ4VOxucCP4cq6e29VxnSb9KrL VukLP43IqycDj+V/ipMrukxZXkDIrG5NM6F15Vld3lr6uZwJx5mn3pZPmFoFNi/rMHkCnw Vp9u0ZT2nZOET0x7I1VNJikApw0J2wZriAtVgF2vmDE6mPNc9DEkWASiomQ4V/IYGEJrOW 0G9BiAZ68T2/N+BVWg0hmRzGUbJggG73hxQR2USryTaEt6AJTkU8OMjXcuZehfxn6hwRN0 IDWaMzrTNjPsrXYbURODb3JmPtEoomKgT7FINtSL56Gz7Y2sXN5OvddIJD8Avg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1783423806; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=8pa5k1ZNdzLP9yf+BVevpNWfcyhS90iBh1czXBgWNPw=; b=SYoxIn/mNSa/24sa8XTBlZ98v2EdgBg5XsSHhVWzzHpN9akw4UqRlEh70JxhZHX1QSo7My osGPivi4UIlPZ45sbm8SlS2IFBU7GDm4RZPM7x/NkqQXy2FWh+F7It3sITMjXOgQRbDJON PuhRh0jNng7ojuXb0Pt58AFMwd229MB1IkVTizUQGTTPLNxTVt1ECHiECyqzq+bItjOJgI S/7AjLN+ZW4ysCN02fY5o3G/I9VYEHdDJiI7rZKF4Ao7BEtQMH9BNFtjAstcZ9pgTl59AW vkTrkAzF6Lzt5BkKsNFk1ef/TOBsCCpKbNVKO1hakOUnTb7Fq/qj1qeZC3RhEA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gvfCf1431zYnm for ; Tue, 07 Jul 2026 11:30:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 33e69 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 07 Jul 2026 11:30:06 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Ariel Ehrenberg From: Konstantin Belousov Subject: git: 631e57d54c13 - main - mlx5ib: encode dynamic UAR mmap offsets in the reserved command range List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 631e57d54c137e9393c47075db09a6c7fb84c6ed Auto-Submitted: auto-generated Date: Tue, 07 Jul 2026 11:30:06 +0000 Message-Id: <6a4ce33e.33e69.7ebbd721@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=631e57d54c137e9393c47075db09a6c7fb84c6ed commit 631e57d54c137e9393c47075db09a6c7fb84c6ed Author: Ariel Ehrenberg AuthorDate: 2026-06-08 10:55:47 +0000 Commit: Konstantin Belousov CommitDate: 2026-07-07 11:25:06 +0000 mlx5ib: encode dynamic UAR mmap offsets in the reserved command range The UAR ioctl handed user space a raw mmap offset, so the first dynamic UAR landed at page offset 0. mlx5_ib_mmap() decodes offset 0 as the legacy regular-page command and routed the mapping through the old bfreg path, which rejects dynamic-UAR contexts, so mmap() failed with EINVAL and mlx5dv_devx_alloc_uar() returned NULL. Follow the upstream scheme: reserve the mmap command range [9, 255] for rdma_user_mmap entries and return command-encoded offsets, so the dynamic-UAR mappings decode to the intended mlx5_ib_mmap() path. Reviewed by: kib Tested by: Wafa Hamzah Sponsored by: Nvidia networking MFC after: 1 month --- 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 bbc7aa4a170a..c4775319ea47 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 daf5cb217001..66d8d511f2f0 100644 --- a/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c +++ b/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c @@ -1675,6 +1675,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) @@ -3416,12 +3435,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)