Files
versitygw/cuwrapper
Kyeongpyo Kim 8e2331530b rdma: dispatch poll_cq/post_send/post_recv through the object's own context
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).
2026-09-27 02:34:26 +09:00
..