<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-pcu/+/26183">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  osmith: Looks good to me, but someone else must approve
  dexter: Looks good to me, but someone else must approve
  pespin: Looks good to me, approved
  keith: Looks good to me, but someone else must approve

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pdch: Update ms_reserved_slots in GprsMS when TS becomes disabled<br><br>Otherwise, after the TS is disabled, a new TBF created for that MS may<br>end up in alloc_algorithm assigning the disabled TS, since it will be in<br>the mask of reserved PDCH TS for that MS.<br><br>Related: OS#5265<br>Change-Id: Ifc59ac37fa6b0ad9ecc8f76326928611e748b11c<br>---<br>M src/pdch.cpp<br>1 file changed, 28 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/pdch.cpp b/src/pdch.cpp</span><br><span>index 6aae7d1..4d82ab1 100644</span><br><span>--- a/src/pdch.cpp</span><br><span>+++ b/src/pdch.cpp</span><br><span>@@ -131,6 +131,32 @@</span><br><span>       }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Make sure the PDCH vanished from the mask of reserved PDCHs for all MS, to</span><br><span style="color: hsl(120, 100%, 40%);">+ * avoid alloc_algorithm using it. */</span><br><span style="color: hsl(120, 100%, 40%);">+static void pdch_unreserve_all_ms_reserved_slots(struct gprs_rlcmac_pdch *pdch)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  struct llist_head *tmp;</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t ts_rm_mask = (~(1 << pdch->ts_no));</span><br><span style="color: hsl(120, 100%, 40%);">+  struct gprs_rlcmac_trx *trx = pdch->trx;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ llist_for_each(tmp, bts_ms_list(trx->bts)) {</span><br><span style="color: hsl(120, 100%, 40%);">+               struct GprsMs *ms = llist_entry(tmp, typeof(*ms), list);</span><br><span style="color: hsl(120, 100%, 40%);">+              if (ms->current_trx != trx)</span><br><span style="color: hsl(120, 100%, 40%);">+                        continue;</span><br><span style="color: hsl(120, 100%, 40%);">+             uint8_t old_dl_slots = ms_reserved_dl_slots(ms);</span><br><span style="color: hsl(120, 100%, 40%);">+              uint8_t old_ul_slots = ms_reserved_ul_slots(ms);</span><br><span style="color: hsl(120, 100%, 40%);">+              uint8_t new_dl_slots = old_dl_slots & ts_rm_mask;</span><br><span style="color: hsl(120, 100%, 40%);">+         uint8_t new_ul_slots = old_ul_slots & ts_rm_mask;</span><br><span style="color: hsl(120, 100%, 40%);">+         if (old_dl_slots == new_dl_slots && old_ul_slots == new_ul_slots)</span><br><span style="color: hsl(120, 100%, 40%);">+                     continue;</span><br><span style="color: hsl(120, 100%, 40%);">+             ms_set_reserved_slots(ms, trx, new_ul_slots, new_dl_slots);</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (pdch->num_reserved(GPRS_RLCMAC_UL_TBF) > 0 || pdch->num_reserved(GPRS_RLCMAC_DL_TBF) > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+             LOGPDCH(pdch, DRLCMAC, LOGL_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+                    "Reserved TS count not zero after unreserving from all current MS in list! UL=%u DL=%u\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                  pdch->num_reserved(GPRS_RLCMAC_UL_TBF), pdch->num_reserved(GPRS_RLCMAC_DL_TBF));</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> void pdch_init(struct gprs_rlcmac_pdch *pdch, struct gprs_rlcmac_trx *trx, uint8_t ts_nr)</span><br><span> {</span><br><span>        pdch->ts_no = ts_nr;</span><br><span>@@ -171,6 +197,8 @@</span><br><span>        /* kick all TBF on slot */</span><br><span>   pdch_free_all_tbf(this);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  pdch_unreserve_all_ms_reserved_slots(this);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>        /* flush all pending paging messages */</span><br><span>      while ((pag = dequeue_paging()))</span><br><span>             talloc_free(pag);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-pcu/+/26183">change 26183</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-pcu/+/26183"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-pcu </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ifc59ac37fa6b0ad9ecc8f76326928611e748b11c </div>
<div style="display:none"> Gerrit-Change-Number: 26183 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: keith <keith@rhizomatica.org> </div>
<div style="display:none"> Gerrit-Reviewer: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>