The Versity copyright line names the project, not an individual.
The personal name stays in Signed-off-by. No functional change.
Signed-off-by: Jihyeon Gim <potatogim@potatogim.net>
The Versity copyright line has no corporate suffix, so these
notices should not add one either. No functional change.
Signed-off-by: Jihyeon Gim <potatogim@potatogim.net>
The host verbs shim and the RC server C ABI were written for the
gateway. They use the gateway Apache-2.0 header and carry a
copyright notice for that work. Notices on the hipObject ports
are unchanged.
Signed-off-by: Jihyeon Gim <potatogim@potatogim.net>
09bbe9c resolved the three inline-only verbs from the ops table of
"the first successfully opened context" and cached the pointers for
every later call, on the assumption that one provider serves the
whole process. That holds on a single-HCA host and nowhere else. On
a storage node with a ConnectX-6 IB adapter and a Broadcom RoCE NIC,
ibv_get_device_list returned bnxt_re0 first, so the RC data plane
bound to mlx5_0 posted its receives and polled its CQ through
libbnxt_re: every session stalled in the data phase, and once a
peer actually reached the QP the gateway died with SIGSEGV inside
libbnxt_re-rdmav34.so (a NULL read at qp+0xc0, the bnxt provider
interpreting an mlx5 QP).
Do what the verbs.h inline wrappers do: route each call through
cq->context->ops / qp->context->ops, so the provider that opened the
object handles it. A missing slot returns ENOSYS instead of jumping
to address zero. No probe device is needed any more, so a host whose
first device fails to open no longer disables the RC data plane.
Found on a native InfiniBand fabric while bringing up the RC data
plane on a multi-HCA node; verified that with per-context dispatch
the same PUT/GET complete (see the follow-up LID fix for the other
half of IB support).
ibv_poll_cq, ibv_post_send, and ibv_post_recv stopped being
exported library symbols in modern rdma-core: verbs.h ships them
as static inline wrappers that dispatch through
cq->context->ops. dlsym therefore returned null for them and the
loader rejected perfectly usable libraries, failing RC server
init with a bare RC_E_INTERNAL on hosts with rdma-core 61+.
Open the first device briefly, read the three function pointers
from its context ops table, and close it again. The check now
only requires symbols that actually exist in the library, and
the failure mode for an ops-less provider is explicit.
Port the hipObject v2 reliable-connection session core into
cuwrapper/rc: the session table and state machine, the wire
codec for the hipobj-rc-v2 headers, request parsing, the
injectable clock and randomness sources, the transport layer
(QP/CQ lifecycle, RTR/RTS transitions, staging registration),
the data phase (RDMA write with immediate for GET, receive with
immediate for PUT), the RDMA token codec, and the dynamically
loaded ibverbs shim (ibv-core.h plus the dlopen host binding).
The sources are a port of the upstream hipObject v2 core, kept
close to the original so the two trees can be diffed during
review. Nothing links against them yet; a Makefile rule builds
the objects into rdma/librcserver.a for the ABI layer that
follows.
Signed-off-by: Jihyeon Gim <potatogim@potatogim.net>