<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/11415">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  Harald Welte: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">scheduler_trx.c: Switch to osmo_timerfd() of libosmocore >= 0.12.0<br><br>Change-Id: I721d493659fde57eca1543b2e63171df1be1279d<br>Fixes: Coverity CID#178646<br>---<br>M configure.ac<br>M src/osmo-bts-trx/scheduler_trx.c<br>2 files changed, 10 insertions(+), 72 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/configure.ac b/configure.ac</span><br><span>index 38e6713..f2d4f84 100644</span><br><span>--- a/configure.ac</span><br><span>+++ b/configure.ac</span><br><span>@@ -62,12 +62,12 @@</span><br><span> fi</span><br><span> </span><br><span> dnl checks for libraries</span><br><span style="color: hsl(0, 100%, 40%);">-PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore  >= 0.11.0)</span><br><span style="color: hsl(0, 100%, 40%);">-PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 0.11.0)</span><br><span style="color: hsl(0, 100%, 40%);">-PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 0.11.0)</span><br><span style="color: hsl(0, 100%, 40%);">-PKG_CHECK_MODULES(LIBOSMOCTRL, libosmoctrl >= 0.11.0)</span><br><span style="color: hsl(0, 100%, 40%);">-PKG_CHECK_MODULES(LIBOSMOCODEC, libosmocodec >= 0.11.0)</span><br><span style="color: hsl(0, 100%, 40%);">-PKG_CHECK_MODULES(LIBOSMOCODING, libosmocoding >= 0.11.0)</span><br><span style="color: hsl(120, 100%, 40%);">+PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore  >= 0.12.0)</span><br><span style="color: hsl(120, 100%, 40%);">+PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 0.12.0)</span><br><span style="color: hsl(120, 100%, 40%);">+PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 0.12.0)</span><br><span style="color: hsl(120, 100%, 40%);">+PKG_CHECK_MODULES(LIBOSMOCTRL, libosmoctrl >= 0.12.0)</span><br><span style="color: hsl(120, 100%, 40%);">+PKG_CHECK_MODULES(LIBOSMOCODEC, libosmocodec >= 0.12.0)</span><br><span style="color: hsl(120, 100%, 40%);">+PKG_CHECK_MODULES(LIBOSMOCODING, libosmocoding >= 0.12.0)</span><br><span> PKG_CHECK_MODULES(LIBOSMOABIS, libosmoabis >= 0.5.0)</span><br><span> PKG_CHECK_MODULES(LIBOSMOTRAU, libosmotrau >= 0.5.0)</span><br><span> </span><br><span>diff --git a/src/osmo-bts-trx/scheduler_trx.c b/src/osmo-bts-trx/scheduler_trx.c</span><br><span>index 4bac235..fa3aed2 100644</span><br><span>--- a/src/osmo-bts-trx/scheduler_trx.c</span><br><span>+++ b/src/osmo-bts-trx/scheduler_trx.c</span><br><span>@@ -1434,68 +1434,6 @@</span><br><span>   ts->tv_nsec = ts->tv_nsec % 1000000000;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! disable the osmocom-wrapped timerfd */</span><br><span style="color: hsl(0, 100%, 40%);">-/* FIXME: Use libosmocore after release with Ibeffba7c997252c003723bcd5d14122c4ded2fe7 was made */</span><br><span style="color: hsl(0, 100%, 40%);">-static int timer_ofd_disable(struct osmo_fd *ofd)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-    const struct itimerspec its_null = {</span><br><span style="color: hsl(0, 100%, 40%);">-            .it_value = { 0, 0 },</span><br><span style="color: hsl(0, 100%, 40%);">-           .it_interval = { 0, 0 },</span><br><span style="color: hsl(0, 100%, 40%);">-        };</span><br><span style="color: hsl(0, 100%, 40%);">-      return timerfd_settime(ofd->fd, 0, &its_null, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*! schedule the osmcoom-wrapped timerfd to occur first at \a first, then periodically at \a interval</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[in] ofd Osmocom wrapped timerfd</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[in] first Relative time at which the timer should first execute (NULL = \a interval)</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[in] interval Time interval at which subsequent timer shall fire</span><br><span style="color: hsl(0, 100%, 40%);">- *  \returns 0 on success; negative on error */</span><br><span style="color: hsl(0, 100%, 40%);">-/* FIXME: Use libosmocore after release with Ibeffba7c997252c003723bcd5d14122c4ded2fe7 was made */</span><br><span style="color: hsl(0, 100%, 40%);">-static int timer_ofd_schedule(struct osmo_fd *ofd, const struct timespec *first,</span><br><span style="color: hsl(0, 100%, 40%);">-                         const struct timespec *interval)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- struct itimerspec its;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  if (ofd->fd < 0)</span><br><span style="color: hsl(0, 100%, 40%);">-          return -EINVAL;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- /* first expiration */</span><br><span style="color: hsl(0, 100%, 40%);">-  if (first)</span><br><span style="color: hsl(0, 100%, 40%);">-              its.it_value = *first;</span><br><span style="color: hsl(0, 100%, 40%);">-  else</span><br><span style="color: hsl(0, 100%, 40%);">-            its.it_value = *interval;</span><br><span style="color: hsl(0, 100%, 40%);">-       /* repeating interval */</span><br><span style="color: hsl(0, 100%, 40%);">-        its.it_interval = *interval;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    return timerfd_settime(ofd->fd, 0, &its, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*! setup osmocom-wrapped timerfd</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[inout] ofd Osmocom-wrapped timerfd on which to operate</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[in] cb Call-back function called when timerfd becomes readable</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[in] data Opaque data to be passed on to call-back</span><br><span style="color: hsl(0, 100%, 40%);">- *  \returns 0 on success; negative on error</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- *  We simply initialize the data structures here, but do not yet</span><br><span style="color: hsl(0, 100%, 40%);">- *  schedule the timer.</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-/* FIXME: Use libosmocore after release with Ibeffba7c997252c003723bcd5d14122c4ded2fe7 was made */</span><br><span style="color: hsl(0, 100%, 40%);">-static int timer_ofd_setup(struct osmo_fd *ofd, int (*cb)(struct osmo_fd *, unsigned int), void *data)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-        ofd->cb = cb;</span><br><span style="color: hsl(0, 100%, 40%);">-        ofd->data = data;</span><br><span style="color: hsl(0, 100%, 40%);">-    ofd->when = BSC_FD_READ;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     if (ofd->fd < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                ofd->fd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK);</span><br><span style="color: hsl(0, 100%, 40%);">-             if (ofd->fd < 0)</span><br><span style="color: hsl(0, 100%, 40%);">-                  return ofd->fd;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-              osmo_fd_register(ofd);</span><br><span style="color: hsl(0, 100%, 40%);">-  }</span><br><span style="color: hsl(0, 100%, 40%);">-       return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /*! Increment a GSM frame number modulo GSM_HYPERFRAME */</span><br><span> #define INCREMENT_FN(fn)     (fn) = (((fn) + 1) % GSM_HYPERFRAME)</span><br><span> </span><br><span>@@ -1557,7 +1495,7 @@</span><br><span>     return 0;</span><br><span> </span><br><span> no_clock:</span><br><span style="color: hsl(0, 100%, 40%);">-      timer_ofd_disable(&tcs->fn_timer_ofd);</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_timerfd_disable(&tcs->fn_timer_ofd);</span><br><span>     transceiver_available = 0;</span><br><span> </span><br><span>       bts_shutdown(bts, "No clock from osmo-trx");</span><br><span>@@ -1575,8 +1513,8 @@</span><br><span>       trx_sched_fn(bts, tcs->last_fn_timer.fn);</span><br><span> </span><br><span>     /* schedule first FN clock timer */</span><br><span style="color: hsl(0, 100%, 40%);">-     timer_ofd_setup(&tcs->fn_timer_ofd, trx_fn_timer_cb, bts);</span><br><span style="color: hsl(0, 100%, 40%);">-       timer_ofd_schedule(&tcs->fn_timer_ofd, NULL, interval);</span><br><span style="color: hsl(120, 100%, 40%);">+        osmo_timerfd_setup(&tcs->fn_timer_ofd, trx_fn_timer_cb, bts);</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_timerfd_schedule(&tcs->fn_timer_ofd, NULL, interval);</span><br><span> </span><br><span>        tcs->last_fn_timer.tv = *tv_now;</span><br><span>  tcs->last_clk_ind.tv = *tv_now;</span><br><span>@@ -1666,7 +1604,7 @@</span><br><span>           normalize_timespec(&first);</span><br><span>              LOGP(DL1C, LOGL_NOTICE, "We were %d FN faster than TRX, compensating\n", -elapsed_fn);</span><br><span>             /* set time to the time our next FN has to be transmitted */</span><br><span style="color: hsl(0, 100%, 40%);">-            timer_ofd_schedule(&tcs->fn_timer_ofd, &first, &interval);</span><br><span style="color: hsl(120, 100%, 40%);">+             osmo_timerfd_schedule(&tcs->fn_timer_ofd, &first, &interval);</span><br><span>                 return 0;</span><br><span>    }</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11415">change 11415</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/11415"/><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-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: I721d493659fde57eca1543b2e63171df1be1279d </div>
<div style="display:none"> Gerrit-Change-Number: 11415 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>