<div dir="ltr"><div style>Hi,</div><div style><br></div><div style>I've added a print after the call to the uplink assignment function:</div><div style><br></div><div style><div>        if (usf < 0) {</div><div><span class="" style="white-space:pre">                 </span>LOGP(DRLCMAC, LOGL_NOTICE, "- Failed "</div>
<div><span class="" style="white-space:pre">                            </span>"allocating TS=%d, no USF available\n", ts);</div><div><span class="" style="white-space:pre">                     </span>return -EBUSY;</div><div><span class="" style="white-space:pre">             </span>}</div>
<div>        LOGP(DRLCMAC, LOGL_DEBUG, "- Assign uplink "</div><div>                       "TS=%d USF=%d\n", ts, usf);</div><div>        assign_uplink_tbf_usf(bts, pdch, ts, tbf, usf);</div><div>        LOGP(DRLCMAC, LOGL_NOTICE, "USF allocated %d ts %d\n", tbf->dir.ul.usf[ts], ts);</div>
<div><br></div><div><br></div><div style>Two MSs are getting different USFs now:</div><div><br></div></div><div><br></div><div><0001> pcu_l1_if.cpp:290 RACH request received: sapi=1 qta=1, ra=123, fn=1109521</div><div>
<0002> gprs_rlcmac.cpp:454 USF allocated 0 ts 7</div><div><0002> gprs_rlcmac_data.cpp:1906 Got IMM.ASS confirm, but rest octets do not start with bit sequence 'HH01' (Packet Downlink Assignment)</div><div>
<0001> pcu_l1_if.cpp:290 RACH request received: sapi=1 qta=1, ra=121, fn=1109533</div><div><0002> gprs_rlcmac.cpp:454 USF allocated 1 ts 7</div><div><0002> gprs_rlcmac_data.cpp:1906 Got IMM.ASS confirm, but rest octets do not start with bit sequence 'HH01' (Packet Downlink Assignment)</div>
<div><0008> gprs_rlcmac.cpp:1799 LLC [PCU -> SGSN] TFI: 0 TLLI: 0xc0a3df97 len=79</div><div><0008> gprs_bssgp_pcu.cpp:155 LLC [SGSN -> PCU] = TLLI: 0xc0a3df97 IMSI: 334020481442858 len: 191</div><div><0007> gprs_rlcmac_meas.cpp:102 UL RSSI of TLLI=0xc0a3df97: 0 dBm</div>
<div><0008> gprs_rlcmac.cpp:1799 LLC [PCU -> SGSN] TFI: 1 TLLI: 0xf844d86d len=8</div><div><0007> gprs_rlcmac_meas.cpp:102 UL RSSI of TLLI=0xf844d86d: 0 dBm</div><div><0002> gprs_rlcmac_data.cpp:1549 Polling sheduled in this TS 7, FN 1109736</div>
<div><br></div><div style>And it works. Both of them succeeded to open the internet page..</div><div style>Without deep investigation alloc_b works as well (after patch applying).</div><div style><br></div><div style>Regards,</div>
<div style>Vladimir.</div><div style><br></div><div style><br></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Sep 25, 2013 at 1:11 PM, Holger Hans Peter Freyther <span dir="ltr"><<a href="mailto:hfreyther@sysmocom.de" target="_blank">hfreyther@sysmocom.de</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Tue, Sep 24, 2013 at 01:26:17PM +0300, Vladimir Rolbin wrote:<br>
> Hi all,<br>
><br>
> It looks like usf found (allocated) is never used. I guess something<br>
> like tbf->dir.ul.usf[ts] = usf is missed.<br>
<br>
Hi!<br>
<br>
can you indicate on how to re-produce the problem and how much time<br>
you have spent in analyzing this problem? I have indicated the lack<br>
of test cases in the past.<br>
<br>
I moved the "assignment" (having to pass trx, bts, pdch, ts just<br>
indicates the lack of structure in this code...) into a new method.<br>
It kills code duplication and could fix the issue. I have only compile<br>
tested it. Could you give it a try?<br>
<br>
holger<br>
<br>
<br>
<br>
diff --git a/src/gprs_rlcmac.cpp b/src/gprs_rlcmac.cpp<br>
index 1d1a8c6..695bf47 100644<br>
--- a/src/gprs_rlcmac.cpp<br>
+++ b/src/gprs_rlcmac.cpp<br>
@@ -402,6 +402,17 @@ next_diagram:<br>
        return tbf;<br>
 }<br>
<br>
+static void assign_uplink_tbf_usf(struct gprs_rlcmac_bts *bts,<br>
+                               struct gprs_rlcmac_pdch *pdch,<br>
+                               int ts,<br>
+                               struct gprs_rlcmac_tbf *tbf, int8_t usf)<br>
+{<br>
+       bts->trx[tbf->trx].ul_tbf[tbf->tfi] = tbf;<br>
+       pdch->ul_tbf[tbf->tfi] = tbf;<br>
+       tbf->pdch[ts] = pdch;<br>
+       tbf->dir.ul.usf[ts] = usf;<br>
+}<br>
+<br>
 /* Slot Allocation: Algorithm A<br>
  *<br>
  * Assign single slot for uplink and downlink<br>
@@ -433,17 +444,14 @@ int alloc_algorithm_a(struct gprs_rlcmac_bts *bts,<br>
        if (tbf->direction == GPRS_RLCMAC_UL_TBF) {<br>
                /* if USF available */<br>
                usf = find_free_usf(pdch, ts);<br>
-               if (usf >= 0) {<br>
-                       LOGP(DRLCMAC, LOGL_DEBUG, "- Assign uplink "<br>
-                               "TS=%d USF=%d\n", ts, usf);<br>
-                       bts->trx[tbf->trx].ul_tbf[tbf->tfi] = tbf;<br>
-                       pdch->ul_tbf[tbf->tfi] = tbf;<br>
-                       tbf->pdch[ts] = pdch;<br>
-               } else {<br>
+               if (usf < 0) {<br>
                        LOGP(DRLCMAC, LOGL_NOTICE, "- Failed "<br>
                                "allocating TS=%d, no USF available\n", ts);<br>
                        return -EBUSY;<br>
                }<br>
+               LOGP(DRLCMAC, LOGL_DEBUG, "- Assign uplink "<br>
+                       "TS=%d USF=%d\n", ts, usf);<br>
+               assign_uplink_tbf_usf(bts, pdch, ts, tbf, usf);<br>
        } else {<br>
                LOGP(DRLCMAC, LOGL_DEBUG, "- Assign downlink TS=%d\n", ts);<br>
                bts->trx[tbf->trx].dl_tbf[tbf->tfi] = tbf;<br>
@@ -859,10 +867,7 @@ int alloc_algorithm_b(struct gprs_rlcmac_bts *bts,<br>
                                LOGP(DRLCMAC, LOGL_DEBUG, "- Assigning UL TS "<br>
                                        "%d\n", ts);<br>
                                pdch = &bts->trx[tbf->trx].pdch[ts];<br>
-                               bts->trx[tbf->trx].ul_tbf[tbf->tfi] = tbf;<br>
-                               pdch->ul_tbf[tbf->tfi] = tbf;<br>
-                               tbf->pdch[ts] = pdch;<br>
-                               tbf->dir.ul.usf[ts] = usf[ts];<br>
+                               assign_uplink_tbf_usf(bts, pdch, ts, tbf, usf[ts]);<br>
                                slotcount++;<br>
                                if (slotcount == 1)<br>
                                        tbf->first_ts = ts;<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
- Holger Freyther <<a href="mailto:hfreyther@sysmocom.de">hfreyther@sysmocom.de</a>>       <a href="http://www.sysmocom.de/" target="_blank">http://www.sysmocom.de/</a><br>
=======================================================================<br>
* sysmocom - systems for mobile communications GmbH<br>
* Schivelbeiner Str. 5<br>
* 10439 Berlin, Germany<br>
* Sitz / Registered office: Berlin, HRB 134158 B<br>
* Geschaeftsfuehrer / Managing Directors: Holger Freyther, Harald Welte<br>
<br>
</font></span></blockquote></div><br></div>