OsmoSGSN LLC implementation maintains XID state in LLME (MS) and not per LLE
For every logical session between a MS and the SGSN, there is one LLME (LLC Management Entity) and a set of LLEs (Logical Link Entities): One for each SAPI.
The XID procedure used to establish LLC configuration values such as N201 (MTU) parameters happens on each LLE separately. The negotiated parameters only affect that one LLE (SAPI) and are not global.
Still, the OsmoSGSN LLC code has the "struct llist_head *xid" member as part of the gprs_llc_llme, and not as part of the gprs_llc_lle. This list is a cahce of the XID fields we have sent with the last XID request, which is used in processing the resposne from the MS.
If two XID handshakes were to occurr concurrently on two LLEs, the state between them would get messed up. It must be maintained separately for each LLE.