aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAriel Ehrenberg <aehrenberg@nvidia.com>2026-06-04 15:46:17 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2026-07-07 11:24:48 +0000
commitbfe14bfeb8dcefc606bdf76c40987467bbd36d92 (patch)
tree2ebc2304fcf96ac935433c7be7c1bbef1e9bb09c
parentb7ca46b161d869c839b1d4a544f64d5661a9082f (diff)
mlx5: mark completion EQs as a shared resource for DEVX uids
A firmware object owned by a DEVX uid may only reference resources owned by the same uid or ones explicitly marked as shared. Completion EQs were created with uid 0, so a CQ owned by a DEVX uid could not attach to its EQ and CREATE_CQ failed with "bad resource". Create completion EQs with MLX5_SHARED_RESOURCE_UID on devices that support user contexts, so uid-owned CQs can use them. The code follows the Linux commit d2c8a1554c10d5e0443b1f97f480d7dacd55cf55 ("IB/mlx5: Enable UAR to have DevX UID"). Reviewed by: kib Tested by: Wafa Hamzah <wafah@nvidia.com> Sponsored by: Nvidia networking MFC after: 1 month
-rw-r--r--sys/dev/mlx5/mlx5_core/mlx5_eq.c8
-rw-r--r--sys/dev/mlx5/mlx5_ifc.h8
2 files changed, 15 insertions, 1 deletions
diff --git a/sys/dev/mlx5/mlx5_core/mlx5_eq.c b/sys/dev/mlx5/mlx5_core/mlx5_eq.c
index f564b88c48b4..5279d71e3e86 100644
--- a/sys/dev/mlx5/mlx5_core/mlx5_eq.c
+++ b/sys/dev/mlx5/mlx5_core/mlx5_eq.c
@@ -487,6 +487,14 @@ int mlx5_create_map_eq(struct mlx5_core_dev *dev, struct mlx5_eq *eq, u8 vecidx,
mlx5_fill_page_array(&eq->buf, pas);
MLX5_SET(create_eq_in, in, opcode, MLX5_CMD_OP_CREATE_EQ);
+ /*
+ * Completion EQs (no event mask) must be marked as a shared resource
+ * when the device supports user contexts; otherwise CQs owned by a
+ * DEVX uid cannot attach to them and CREATE_CQ fails with a firmware
+ * "bad resource" error.
+ */
+ if (mask == 0 && MLX5_CAP_GEN(dev, log_max_uctx))
+ MLX5_SET(create_eq_in, in, uid, MLX5_SHARED_RESOURCE_UID);
MLX5_SET64(create_eq_in, in, event_bitmask, mask);
eqc = MLX5_ADDR_OF(create_eq_in, in, eq_context_entry);
diff --git a/sys/dev/mlx5/mlx5_ifc.h b/sys/dev/mlx5/mlx5_ifc.h
index 0a3bb9b38568..952f51d3c3f7 100644
--- a/sys/dev/mlx5/mlx5_ifc.h
+++ b/sys/dev/mlx5/mlx5_ifc.h
@@ -26,6 +26,12 @@
#ifndef MLX5_IFC_H
#define MLX5_IFC_H
+/*
+ * Special UID that marks a resource (e.g. an EQ) as shared, so that
+ * objects owned by a user context (DEVX uid) may reference it.
+ */
+#define MLX5_SHARED_RESOURCE_UID 0xffff
+
#include <dev/mlx5/mlx5_fpga/mlx5_ifc_fpga.h>
enum {
@@ -8317,7 +8323,7 @@ struct mlx5_ifc_create_eq_out_bits {
struct mlx5_ifc_create_eq_in_bits {
u8 opcode[0x10];
- u8 reserved_0[0x10];
+ u8 uid[0x10];
u8 reserved_1[0x10];
u8 op_mod[0x10];