srpt_send_done(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… srpt_send_done(9) β€” like, the send completion callback, bestie ✨

Okay so we're in the kernel API manual (srpt_send_done(9)), and this page is literally about one tiny-but-important callback. Buckle up, it's short but there's lore. πŸŽ€


🌸 NAME 🌸

srpt_send_done β€” the send completion callback. That's it, that's the vibe. πŸ¦‹


✨ SYNOPSIS ✨

void srpt_send_done (struct ib_cq *cq , struct ib_wc *wc );

Like, copy it exactly, spaces and all β€” no ✨creative✨ reformatting, okay? πŸ’…


πŸ’– ARGUMENTS πŸ’–

  • cq β€” the completion queue. That's the queue where completions show up. πŸŽ€
  • wc β€” the work completion. That's the actual completion being handed to you. 🌈

πŸ‘‘ NOTE πŸ‘‘

Okay so this is the tea, and it's a theory thing, not a "we saw this in testing" thing β€” the page says plainly that it has not yet been observed during tests. But still: πŸ‘€

So, in theory at least, it's possible that the srpt_get_send_ioctx call invoked by srpt_handle_new_iu fails. Why? Because the req_lim_delta value in each response is set to one, and it's possible that this response makes the initiator send a new request before the send completion for that response has been processed. 😭

And like, how could that even happen? Two ways, fr fr:

  • if the call to srpt_put_send_iotcx is delayed because of a higher priority interrupt, or
  • if IB retransmission causes generation of the send completion to be delayed.

(Yes, srpt_put_send_iotcx β€” that's how it's written on the page, we don't fix it, we respect it. 🫢)

Incoming information units for which srpt_get_send_ioctx fails get queued on cmd_wait_list. And the code below processes these delayed requests one at a time. No cap. ⭐


πŸ”₯ SEE ALSO πŸ”₯

Kernel file ./drivers/infiniband/ulp/srpt/ib_srpt.c

And the whole friend group of srpt functions, literally all of them:

srpt_event_handler(9), srpt_srq_event(9), srpt_qp_event(9), srpt_set_ioc(9), srpt_get_class_port_info(9), srpt_get_iou(9), srpt_get_ioc(9), srpt_get_svc_entries(9), srpt_mgmt_method_get(9), srpt_mad_send_handler(9), srpt_mad_recv_handler(9), srpt_refresh_port(9), srpt_unregister_mad_agent(9), srpt_alloc_ioctx(9), srpt_free_ioctx(9), srpt_alloc_ioctx_ring(9), srpt_free_ioctx_ring(9), srpt_set_cmd_state(9), srpt_test_and_set_cmd_state(9), srpt_post_recv(9), srpt_zerolength_write(9), srpt_get_desc_tbl(9), srpt_init_ch_qp(9), srpt_ch_qp_rtr(9), srpt_ch_qp_rts(9), srpt_ch_qp_err(9), srpt_get_send_ioctx(9), srpt_abort_cmd(9), srpt_rdma_read_done(9), srpt_build_cmd_rsp(9), srpt_build_tskmgmt_rsp(9), srpt_handle_cmd(9), srpt_handle_tsk_mgmt(9), srpt_handle_new_iu(9), srpt_create_ch_ib(9), srpt_close_ch(9), srpt_cm_req_recv(9), srpt_cm_rtu_recv(9), srpt_cm_handler(9), srpt_queue_response(9), srpt_release_sport(9), srpt_lookup_port(9), srpt_add_one(9), srpt_remove_one(9), srpt_close_session(9), srpt_parse_i_port_id(9), srpt_make_tpg(9), srpt_drop_tpg(9), srpt_make_tport(9), srpt_drop_tport(9), srpt_init_module(9)


πŸ’« that's the whole page, bestie, and honestly? iconic πŸ’«

Source/path: ./drivers/infiniband/ulp/srpt β€” dated October 2026. Mwah, bye! πŸ’‹πŸŽ€πŸ¦‹

πŸ“¦ where this page comes from