srpt_send_done(9)
π 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_iotcxis 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
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms