[PATCH 02/11] RDMA/core: allow jobs without an address table

From: Doug Ledford

Date: Sat Oct 31 2026 - 00:36:52 EST


max_addr_entries counts slots for remote fabric peers in a job's address
table. An entry describes a destination using address-handle attributes
and a remote QPN; it is not a memory region, mapped page, or ATU address
context.

Cassini transmit commands carry the destination fabric address directly,
including the destination NID and endpoint information. The CXI provider
currently uses address handles and does not implement job address-table
operations or indexed sends. The documented transmit interface does not
expose a programmable peer-address table equivalent to the UET job
table. Cassini's connection/retry state tables are not such an address
vector. Its virtual-memory mappings instead use separate ATU address
contexts and page tables.

Allow an address-handle-only job to request zero peer-table entries
instead of requiring an unused entry. Keep the device upper-bound and
privileged job-allocation checks. JobIDs and job keys remain in use.
Existing index bounds reject every access to a zero-sized job
table. This does not implement indexed addressing for CXI or relax its
memory-mapping resource limits.

This relaxes the shared UET job-allocation contract for providers using
only address handles, not just the CXI driver. It needs core API review.

Signed-off-by: Doug Ledford <doug.ledford@xxxxxxx>
---
drivers/infiniband/core/uverbs_std_types_job.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/infiniband/core/uverbs_std_types_job.c b/drivers/infiniband/core/uverbs_std_types_job.c
index 20acb2aa9871..b05c0619a6b3 100644
--- a/drivers/infiniband/core/uverbs_std_types_job.c
+++ b/drivers/infiniband/core/uverbs_std_types_job.c
@@ -193,8 +193,7 @@ static int UVERBS_HANDLER(UVERBS_METHOD_JOB_ALLOC)(
return ret;

/* the table is sized once, every index is checked against it */
- if (!attr.max_addr_entries ||
- attr.max_addr_entries > ib_dev->attrs.max_addr_entries)
+ if (attr.max_addr_entries > ib_dev->attrs.max_addr_entries)
return -EINVAL;

/* the port carries the job's traffic, so it has to be one we have */

--
2.56.0