From nobody Tue Jul 7 11:30:11 2026 X-Original-To: dev-commits-src-main@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 4gvfCm0Qlpz6dRSr for ; Tue, 07 Jul 2026 11:30:12 +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 4gvfCl4C0nz3M3G for ; Tue, 07 Jul 2026 11:30:11 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1783423811; 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=yqvbfavUGTcTRhCNLl0eh+Ho8GurkEm81RfBnp4h+/M=; b=KS5+91pxrTyFNT8bOZISWWxVr+JiDG5oyGqw/UggBVWMqOgBGBuPTXlfVnlDS8bbh9hMDz tzrdGzUVKi8dsUlAxPekt525DzL3DuktenaIAIw9xZr5rs2gpjgjNTpXhZF19ew4rwOxIk llblgTL5LOuN7s7e/IggfqEQOBOJv4myhPgvP2o5n/VZc2ObmF1UCBCBT8xsaxJ6aP+KV2 JxldO5/esPVjzTl7wpsCmamckvAxbeiDEkD3WqaVnM7kOOsbZd5HPb/8kGdopKOh6PYslD sDcYNi8GLH8lAMnCcqN7be8RnajpHYnAp12nBV9Ar3uXnLuvBM6xvt1Mb8xXkw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1783423811; a=rsa-sha256; cv=none; b=I1J20uEz9icA8EZpVuSxsvFZMgG4syH4l5nhCiIeXw8oykUO3m3lN6OgcO+t+0KjX1YNCQ CqjulE8HQtkBJW7AAHTMKGUtGzT5j7PjL8RwSFDLRxNVMQMa+WiJbCl6TD74PtScbzHLIt 9qiwQHWkbJsxNBKqcIgtjWKresNKn6jQizr3A7CxAaHFmlbzgzVxEEY/6Y8iNdctlyu2N1 HcRK1D/z6v06jt2B0zMQ09C/ngcIYisM88XlQVFiuO5BMrNMXppwDudRp5+VMIinke9rIU YczwaTqfxQPrfNZW39wBGLLqWw8M/8yuCO4xUeuyD8mNVA4p7/zE3phTC1LcJA== 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=1783423811; 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=yqvbfavUGTcTRhCNLl0eh+Ho8GurkEm81RfBnp4h+/M=; b=UUJFpRMiiWZ29HmeUYD5RlUz449xUCdbOCe3vPg0CN+mkPelKjy4F70yc/I+BdNs95G/6m 6rqttfx23cOqHay1yXYMeqc52V3y4Y6wKkxp06tWiS7J7vgJcCGpQbZSCSfgMK2NR8oYg/ GpLEc04uG//+akuc61yTA8y69y/paCA9iVKkDpthEGdBUoCqtnUVSblPX/TXgOBIpP6DD+ 47iDaRwyTuToR5bx6XdFpMYmRb7vnMVcDDJ0AVi7VoFN46o9qo7ol9R9oqNGnaaxHNmk9S VkGQkNS3UpBQTrixjscgrAhYqjqR1LTqGHKpaafgELe6zj8oQ1Z0uL8+8+y+4Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gvfCl3DnQzYwb for ; Tue, 07 Jul 2026 11:30:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 36f1d by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 07 Jul 2026 11:30:11 +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: 07f780cb7f8e - main - mlx5: propagate the DEVX uid through SRQ create and destroy List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@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: 07f780cb7f8eab1aa6e84d3ed6785144d0d3cc47 Auto-Submitted: auto-generated Date: Tue, 07 Jul 2026 11:30:11 +0000 Message-Id: <6a4ce343.36f1d.d1fcdb8@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=07f780cb7f8eab1aa6e84d3ed6785144d0d3cc47 commit 07f780cb7f8eab1aa6e84d3ed6785144d0d3cc47 Author: Ariel Ehrenberg AuthorDate: 2026-06-15 19:00:47 +0000 Commit: Konstantin Belousov CommitDate: 2026-07-07 11:25:49 +0000 mlx5: propagate the DEVX uid through SRQ create and destroy The SRQ command builders never stamped the owning DEVX uid into the firmware CREATE_SRQ/CREATE_RMP/CREATE_XRC_SRQ commands, so a basic SRQ was always created with uid 0. Every modern libmlx5 context runs with a DEVX uid, and the QPs that reference the SRQ carry that uid, so firmware rejected CREATE_QP with "bad resource": a uid-owned QP may not reference a uid-0 SRQ. Reviewed by: kib Tested by: Wafa Hamzah Sponsored by: Nvidia networking MFC after: 1 month --- sys/dev/mlx5/driver.h | 1 + sys/dev/mlx5/mlx5_core/mlx5_srq.c | 30 +++++++++++++++++++++++++++--- sys/dev/mlx5/mlx5_ifc.h | 2 +- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/sys/dev/mlx5/driver.h b/sys/dev/mlx5/driver.h index ba6714c5c7b6..f5a73bec0776 100644 --- a/sys/dev/mlx5/driver.h +++ b/sys/dev/mlx5/driver.h @@ -481,6 +481,7 @@ struct mlx5_sq_bfreg { struct mlx5_core_srq { struct mlx5_core_rsc_common common; /* must be first */ u32 srqn; + u16 uid; int max; size_t max_gs; size_t max_avail_gather; diff --git a/sys/dev/mlx5/mlx5_core/mlx5_srq.c b/sys/dev/mlx5/mlx5_core/mlx5_srq.c index 7318a5b2c3c8..cd705ae6de88 100644 --- a/sys/dev/mlx5/mlx5_core/mlx5_srq.c +++ b/sys/dev/mlx5/mlx5_core/mlx5_srq.c @@ -166,7 +166,10 @@ static int create_rmp_cmd(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq, set_wq(wq, in); memcpy(MLX5_ADDR_OF(rmpc, rmpc, wq.pas), in->pas, pas_size); + MLX5_SET(create_rmp_in, create_in, uid, in->uid); err = mlx5_core_create_rmp(dev, create_in, inlen, &srq->srqn); + if (!err) + srq->uid = in->uid; kvfree(create_in); return err; @@ -175,7 +178,14 @@ static int create_rmp_cmd(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq, static int destroy_rmp_cmd(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq) { - return mlx5_core_destroy_rmp(dev, srq->srqn); + u32 in[MLX5_ST_SZ_DW(destroy_rmp_in)] = {0}; + u32 out[MLX5_ST_SZ_DW(destroy_rmp_out)] = {0}; + + MLX5_SET(destroy_rmp_in, in, opcode, MLX5_CMD_OP_DESTROY_RMP); + MLX5_SET(destroy_rmp_in, in, rmpn, srq->srqn); + MLX5_SET(destroy_rmp_in, in, uid, srq->uid); + + return mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out)); } static int query_rmp_cmd(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq, @@ -232,7 +242,10 @@ static int create_xrc_srq_cmd(struct mlx5_core_dev *dev, MLX5_SET(xrc_srqc, xrc_srqc, user_index, in->user_index); memcpy(pas, in->pas, pas_size); + MLX5_SET(create_xrc_srq_in, create_in, uid, in->uid); err = mlx5_core_create_xsrq(dev, create_in, inlen, &srq->srqn); + if (!err) + srq->uid = in->uid; if (err) goto out; @@ -244,7 +257,14 @@ out: static int destroy_xrc_srq_cmd(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq) { - return mlx5_core_destroy_xsrq(dev, srq->srqn); + u32 in[MLX5_ST_SZ_DW(destroy_xrc_srq_in)] = {0}; + u32 out[MLX5_ST_SZ_DW(destroy_xrc_srq_out)] = {0}; + + MLX5_SET(destroy_xrc_srq_in, in, opcode, MLX5_CMD_OP_DESTROY_XRC_SRQ); + MLX5_SET(destroy_xrc_srq_in, in, xrc_srqn, srq->srqn); + MLX5_SET(destroy_xrc_srq_in, in, uid, srq->uid); + + return mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out)); } static int query_xrc_srq_cmd(struct mlx5_core_dev *dev, @@ -304,10 +324,13 @@ static int create_srq_cmd(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq, memcpy(pas, in->pas, pas_size); MLX5_SET(create_srq_in, create_in, opcode, MLX5_CMD_OP_CREATE_SRQ); + MLX5_SET(create_srq_in, create_in, uid, in->uid); err = mlx5_cmd_exec(dev, create_in, inlen, create_out, sizeof(create_out)); kvfree(create_in); - if (!err) + if (!err) { srq->srqn = MLX5_GET(create_srq_out, create_out, srqn); + srq->uid = in->uid; + } return err; } @@ -320,6 +343,7 @@ static int destroy_srq_cmd(struct mlx5_core_dev *dev, MLX5_SET(destroy_srq_in, srq_in, opcode, MLX5_CMD_OP_DESTROY_SRQ); MLX5_SET(destroy_srq_in, srq_in, srqn, srq->srqn); + MLX5_SET(destroy_srq_in, srq_in, uid, srq->uid); return mlx5_cmd_exec(dev, srq_in, sizeof(srq_in), srq_out, sizeof(srq_out)); } diff --git a/sys/dev/mlx5/mlx5_ifc.h b/sys/dev/mlx5/mlx5_ifc.h index 952f51d3c3f7..1906b670f013 100644 --- a/sys/dev/mlx5/mlx5_ifc.h +++ b/sys/dev/mlx5/mlx5_ifc.h @@ -7212,7 +7212,7 @@ struct mlx5_ifc_destroy_rmp_out_bits { struct mlx5_ifc_destroy_rmp_in_bits { u8 opcode[0x10]; - u8 reserved_0[0x10]; + u8 uid[0x10]; u8 reserved_1[0x10]; u8 op_mod[0x10];