RX Pipeline
Every chapter so far that mentioned “the receiving side” left the actual mechanism unopened. This part opens it: a frame landing on the wire, parsed apart layer by layer, checked against a sequence number before it is allowed to mean anything, tracked across however many packets one message actually spans, and finally placed in host memory – plus what happens when one QP’s receive path stalls without taking any other QP down with it, what happens when many QPs’ packets arrive interleaved on the same physical pipeline, and what happens when a QP resets with a packet already mid-flight through one of these stages.
RX Pipeline is a datapath, not a resource like the QP Table or the Key Table – there is nothing here to install, cache, or evict. It has no state machine of its own; a receiving QP’s behavior is gated by the state machine QP State Machine already covers. Its one piece of persistent state is per-message reassembly context, not a demand-driven cache: an address and a remaining count held open for as long as one message is in flight, then closed. And unlike TX Packet Build, which builds a packet in a single chapter, taking a packet apart and deciding whether to admit it are different enough operations here to need two.