<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/25644">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">trx_provision_fsm: Support OPEN_POWEROFF->CLOSED transition<br><br>This may happen if bts_shutdown starts a poweroff procedure while<br>POWERON was still not sent to the TRX. In this case, we want to go back<br>to initial closed state to fullfill expected state when BTS is shutdown.<br><br>Change-Id: Id660fa1018ef175ab237733b37629c56313c061d<br>---<br>M src/osmo-bts-trx/trx_provision_fsm.c<br>1 file changed, 28 insertions(+), 10 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/44/25644/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo-bts-trx/trx_provision_fsm.c b/src/osmo-bts-trx/trx_provision_fsm.c</span><br><span>index cdca852..39fb608 100644</span><br><span>--- a/src/osmo-bts-trx/trx_provision_fsm.c</span><br><span>+++ b/src/osmo-bts-trx/trx_provision_fsm.c</span><br><span>@@ -296,6 +296,24 @@</span><br><span>         return true;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Closes a phy_link and all its associated TRX */</span><br><span style="color: hsl(120, 100%, 40%);">+static void trx_prov_fsm_apply_close(struct phy_link *plink, int rc)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    struct trx_l1h *l1h;</span><br><span style="color: hsl(120, 100%, 40%);">+  struct phy_instance *pinst;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (plink->state == PHY_LINK_SHUTDOWN)</span><br><span style="color: hsl(120, 100%, 40%);">+             return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     bts_model_phy_link_close(plink);</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Notify TRX close on all TRX associated with this phy */</span><br><span style="color: hsl(120, 100%, 40%);">+    llist_for_each_entry(pinst, &plink->instances, list) {</span><br><span style="color: hsl(120, 100%, 40%);">+         l1h = pinst->u.osmotrx.hdl;</span><br><span style="color: hsl(120, 100%, 40%);">+                trx_prov_fsm_state_chg(l1h->provision_fi, TRX_PROV_ST_CLOSED);</span><br><span style="color: hsl(120, 100%, 40%);">+             bts_model_trx_close_cb(pinst->trx, rc);</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> //////////////////////////</span><br><span> // FSM STATE ACTIONS</span><br><span> //////////////////////////</span><br><span>@@ -345,6 +363,13 @@</span><br><span>    bool others_ready;</span><br><span> </span><br><span>       switch (event) {</span><br><span style="color: hsl(120, 100%, 40%);">+      case TRX_PROV_EV_CLOSE:</span><br><span style="color: hsl(120, 100%, 40%);">+               /* In this state, we didn't for sure send a POWERON yet, hence we</span><br><span style="color: hsl(120, 100%, 40%);">+            are save directly applying the close as if we received a</span><br><span style="color: hsl(120, 100%, 40%);">+              POWEROFF RSP: */</span><br><span style="color: hsl(120, 100%, 40%);">+           if (pinst->num == 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                       trx_prov_fsm_apply_close(pinst->phy_link, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+              return;</span><br><span>      case TRX_PROV_EV_CFG_ENABLE:</span><br><span>                 l1h->config.enabled =(bool)data;</span><br><span>          break;</span><br><span>@@ -584,16 +609,7 @@</span><br><span>        switch (event) {</span><br><span>     case TRX_PROV_EV_POWEROFF_CNF:</span><br><span>               rc = (uint16_t)(intptr_t)data;</span><br><span style="color: hsl(0, 100%, 40%);">-          if (plink->state != PHY_LINK_SHUTDOWN) {</span><br><span style="color: hsl(0, 100%, 40%);">-                     bts_model_phy_link_close(plink);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                        /* Notify TRX close on all TRX associated with this phy */</span><br><span style="color: hsl(0, 100%, 40%);">-                      llist_for_each_entry(pinst, &plink->instances, list) {</span><br><span style="color: hsl(0, 100%, 40%);">-                           l1h = pinst->u.osmotrx.hdl;</span><br><span style="color: hsl(0, 100%, 40%);">-                          trx_prov_fsm_state_chg(l1h->provision_fi, TRX_PROV_ST_CLOSED);</span><br><span style="color: hsl(0, 100%, 40%);">-                               bts_model_trx_close_cb(pinst->trx, rc);</span><br><span style="color: hsl(0, 100%, 40%);">-                      }</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(120, 100%, 40%);">+             trx_prov_fsm_apply_close(plink, rc);</span><br><span>                 break;</span><br><span>       default:</span><br><span>             OSMO_ASSERT(0);</span><br><span>@@ -611,6 +627,7 @@</span><br><span>        },</span><br><span>   [TRX_PROV_ST_OPEN_POWEROFF] = {</span><br><span>              .in_event_mask =</span><br><span style="color: hsl(120, 100%, 40%);">+                      X(TRX_PROV_EV_CLOSE) |</span><br><span>                       X(TRX_PROV_EV_OTHER_TRX_READY) |</span><br><span>                     X(TRX_PROV_EV_CFG_ENABLE) |</span><br><span>                  X(TRX_PROV_EV_CFG_BSIC) |</span><br><span>@@ -623,6 +640,7 @@</span><br><span>                      X(TRX_PROV_EV_SETTSC_CNF) |</span><br><span>                  X(TRX_PROV_EV_SETFORMAT_CNF),</span><br><span>                .out_state_mask =</span><br><span style="color: hsl(120, 100%, 40%);">+                     X(TRX_PROV_ST_CLOSED) |</span><br><span>                      X(TRX_PROV_ST_OPEN_WAIT_POWERON_CNF) |</span><br><span>                       X(TRX_PROV_ST_OPEN_POWERON),</span><br><span>                 .name = "OPEN_POWEROFF",</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/25644">change 25644</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-bts/+/25644"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bts </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Id660fa1018ef175ab237733b37629c56313c061d </div>
<div style="display:none"> Gerrit-Change-Number: 25644 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>