<p>Hoernchen has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-trx/+/14488">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add option to set stack size in config file, default == 0 == OS default<br><br>Change-Id: Id752f6b5ce9a96a67cd1ff835687ce0e03d3a50d<br>---<br>M CommonLibs/Threads.cpp<br>M CommonLibs/Threads.h<br>M CommonLibs/trx_vty.c<br>M CommonLibs/trx_vty.h<br>M Transceiver52M/Transceiver.cpp<br>M Transceiver52M/Transceiver.h<br>M Transceiver52M/osmo-trx.cpp<br>7 files changed, 33 insertions(+), 12 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-trx refs/changes/88/14488/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/CommonLibs/Threads.cpp b/CommonLibs/Threads.cpp</span><br><span>index c056d69..5c337c5 100644</span><br><span>--- a/CommonLibs/Threads.cpp</span><br><span>+++ b/CommonLibs/Threads.cpp</span><br><span>@@ -135,8 +135,10 @@</span><br><span> // (pat) Moved initialization to constructor to avoid crash in destructor.</span><br><span> //res = pthread_attr_init(&mAttrib);</span><br><span> //assert(!res);</span><br><span style="color: hsl(0, 100%, 40%);">- res = pthread_attr_setstacksize(&mAttrib, mStackSize);</span><br><span style="color: hsl(0, 100%, 40%);">- assert(!res);</span><br><span style="color: hsl(120, 100%, 40%);">+ if(mStackSize != 0){</span><br><span style="color: hsl(120, 100%, 40%);">+ res = pthread_attr_setstacksize(&mAttrib, mStackSize);</span><br><span style="color: hsl(120, 100%, 40%);">+ assert(!res);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> res = pthread_create(&mThread, &mAttrib, task, arg);</span><br><span> assert(!res);</span><br><span> }</span><br><span>diff --git a/CommonLibs/Threads.h b/CommonLibs/Threads.h</span><br><span>index 4c5b9ee..8a6ba47 100644</span><br><span>--- a/CommonLibs/Threads.h</span><br><span>+++ b/CommonLibs/Threads.h</span><br><span>@@ -158,7 +158,7 @@</span><br><span> public:</span><br><span> </span><br><span> /** Create a thread in a non-running state. */</span><br><span style="color: hsl(0, 100%, 40%);">- Thread(size_t wStackSize = (65536*4)):mThread((pthread_t)0) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Thread(size_t wStackSize = 0):mThread((pthread_t)0) {</span><br><span> pthread_attr_init(&mAttrib); // (pat) moved this here.</span><br><span> mStackSize=wStackSize;</span><br><span> }</span><br><span>diff --git a/CommonLibs/trx_vty.c b/CommonLibs/trx_vty.c</span><br><span>index 4cc827b..0def7eb 100644</span><br><span>--- a/CommonLibs/trx_vty.c</span><br><span>+++ b/CommonLibs/trx_vty.c</span><br><span>@@ -336,6 +336,18 @@</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_stack_size, cfg_stack_size_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+ "stack-size <0-2147483647>",</span><br><span style="color: hsl(120, 100%, 40%);">+ "Set the stack size per thread in BYTE, 0 = OS default\n"</span><br><span style="color: hsl(120, 100%, 40%);">+ "Stack size per thread in BYTE\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct trx_ctx *trx = trx_from_vty(vty);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ trx->cfg.stack_size = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> DEFUN(cfg_filler, cfg_filler_cmd,</span><br><span> "filler dummy",</span><br><span> "Enable C0 filler table\n"</span><br><span>@@ -546,6 +558,8 @@</span><br><span> vty_out(vty, " ext-rach %s%s", trx->cfg.ext_rach ? "enable" : "disable", VTY_NEWLINE);</span><br><span> if (trx->cfg.sched_rr != 0)</span><br><span> vty_out(vty, " rt-prio %u%s", trx->cfg.sched_rr, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (trx->cfg.stack_size != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out(vty, " stack-size %u%s", trx->cfg.stack_size, VTY_NEWLINE);</span><br><span> trx_rate_ctr_threshold_write_config(vty, " ");</span><br><span> </span><br><span> for (i = 0; i < trx->cfg.num_chans; i++) {</span><br><span>@@ -585,6 +599,7 @@</span><br><span> vty_out(vty, " Extended RACH support: %s%s", trx->cfg.ext_rach ? "Enabled" : "Disabled", VTY_NEWLINE);</span><br><span> vty_out(vty, " Real Time Priority: %u (%s)%s", trx->cfg.sched_rr,</span><br><span> trx->cfg.sched_rr ? "Enabled" : "Disabled", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out(vty, " Stack size per Thread in BYTE (0 = OS default): %u%s", trx->cfg.stack_size, VTY_NEWLINE);</span><br><span> vty_out(vty, " Channels: %u%s", trx->cfg.num_chans, VTY_NEWLINE);</span><br><span> for (i = 0; i < trx->cfg.num_chans; i++) {</span><br><span> chan = &trx->cfg.chans[i];</span><br><span>@@ -667,6 +682,7 @@</span><br><span> trx->cfg.tx_sps = DEFAULT_TX_SPS;</span><br><span> trx->cfg.rx_sps = DEFAULT_RX_SPS;</span><br><span> trx->cfg.filler = FILLER_ZERO;</span><br><span style="color: hsl(120, 100%, 40%);">+ trx->cfg.stack_size = 0;</span><br><span> </span><br><span> return trx;</span><br><span> }</span><br><span>@@ -698,6 +714,7 @@</span><br><span> install_element(TRX_NODE, &cfg_filler_cmd);</span><br><span> install_element(TRX_NODE, &cfg_ctr_error_threshold_cmd);</span><br><span> install_element(TRX_NODE, &cfg_no_ctr_error_threshold_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+ install_element(TRX_NODE, &cfg_stack_size_cmd);</span><br><span> </span><br><span> install_element(TRX_NODE, &cfg_chan_cmd);</span><br><span> install_node(&chan_node, dummy_config_write);</span><br><span>diff --git a/CommonLibs/trx_vty.h b/CommonLibs/trx_vty.h</span><br><span>index 8e91113..d939051 100644</span><br><span>--- a/CommonLibs/trx_vty.h</span><br><span>+++ b/CommonLibs/trx_vty.h</span><br><span>@@ -63,6 +63,7 @@</span><br><span> bool ext_rach;</span><br><span> bool egprs;</span><br><span> unsigned int sched_rr;</span><br><span style="color: hsl(120, 100%, 40%);">+ unsigned int stack_size;</span><br><span> unsigned int num_chans;</span><br><span> struct trx_chan chans[TRX_CHAN_MAX];</span><br><span> } cfg;</span><br><span>diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp</span><br><span>index 9c55d02..0aa4ff5 100644</span><br><span>--- a/Transceiver52M/Transceiver.cpp</span><br><span>+++ b/Transceiver52M/Transceiver.cpp</span><br><span>@@ -115,11 +115,11 @@</span><br><span> size_t tx_sps, size_t rx_sps, size_t chans,</span><br><span> GSM::Time wTransmitLatency,</span><br><span> RadioInterface *wRadioInterface,</span><br><span style="color: hsl(0, 100%, 40%);">- double wRssiOffset)</span><br><span style="color: hsl(120, 100%, 40%);">+ double wRssiOffset, int wStackSize)</span><br><span> : mBasePort(wBasePort), mLocalAddr(TRXAddress), mRemoteAddr(GSMcoreAddress),</span><br><span> mClockSocket(TRXAddress, wBasePort, GSMcoreAddress, wBasePort + 100),</span><br><span> mTransmitLatency(wTransmitLatency), mRadioInterface(wRadioInterface),</span><br><span style="color: hsl(0, 100%, 40%);">- rssiOffset(wRssiOffset),</span><br><span style="color: hsl(120, 100%, 40%);">+ rssiOffset(wRssiOffset), stackSize(wStackSize),</span><br><span> mSPSTx(tx_sps), mSPSRx(rx_sps), mChans(chans), mEdge(false), mOn(false), mForceClockInterface(false),</span><br><span> mTxFreq(0.0), mRxFreq(0.0), mTSC(0), mMaxExpectedDelayAB(0), mMaxExpectedDelayNB(0),</span><br><span> mWriteBurstToDiskMask(0)</span><br><span>@@ -212,7 +212,7 @@</span><br><span> /* Start control threads */</span><br><span> for (size_t i = 0; i < mChans; i++) {</span><br><span> TransceiverChannel *chan = new TransceiverChannel(this, i);</span><br><span style="color: hsl(0, 100%, 40%);">- mControlServiceLoopThreads[i] = new Thread(32768);</span><br><span style="color: hsl(120, 100%, 40%);">+ mControlServiceLoopThreads[i] = new Thread(stackSize);</span><br><span> mControlServiceLoopThreads[i]->start((void * (*)(void*))</span><br><span> ControlServiceLoopAdapter, (void*) chan);</span><br><span> </span><br><span>@@ -254,8 +254,8 @@</span><br><span> }</span><br><span> </span><br><span> /* Device is running - launch I/O threads */</span><br><span style="color: hsl(0, 100%, 40%);">- mRxLowerLoopThread = new Thread(32768);</span><br><span style="color: hsl(0, 100%, 40%);">- mTxLowerLoopThread = new Thread(32768);</span><br><span style="color: hsl(120, 100%, 40%);">+ mRxLowerLoopThread = new Thread(stackSize);</span><br><span style="color: hsl(120, 100%, 40%);">+ mTxLowerLoopThread = new Thread(stackSize);</span><br><span> mTxLowerLoopThread->start((void * (*)(void*))</span><br><span> TxLowerLoopAdapter,(void*) this);</span><br><span> mRxLowerLoopThread->start((void * (*)(void*))</span><br><span>@@ -264,12 +264,12 @@</span><br><span> /* Launch uplink and downlink burst processing threads */</span><br><span> for (size_t i = 0; i < mChans; i++) {</span><br><span> TransceiverChannel *chan = new TransceiverChannel(this, i);</span><br><span style="color: hsl(0, 100%, 40%);">- mRxServiceLoopThreads[i] = new Thread(32768);</span><br><span style="color: hsl(120, 100%, 40%);">+ mRxServiceLoopThreads[i] = new Thread(stackSize);</span><br><span> mRxServiceLoopThreads[i]->start((void * (*)(void*))</span><br><span> RxUpperLoopAdapter, (void*) chan);</span><br><span> </span><br><span> chan = new TransceiverChannel(this, i);</span><br><span style="color: hsl(0, 100%, 40%);">- mTxPriorityQueueServiceLoopThreads[i] = new Thread(32768);</span><br><span style="color: hsl(120, 100%, 40%);">+ mTxPriorityQueueServiceLoopThreads[i] = new Thread(stackSize);</span><br><span> mTxPriorityQueueServiceLoopThreads[i]->start((void * (*)(void*))</span><br><span> TxUpperLoopAdapter, (void*) chan);</span><br><span> }</span><br><span>diff --git a/Transceiver52M/Transceiver.h b/Transceiver52M/Transceiver.h</span><br><span>index 4614efe..ceb8c4a 100644</span><br><span>--- a/Transceiver52M/Transceiver.h</span><br><span>+++ b/Transceiver52M/Transceiver.h</span><br><span>@@ -108,7 +108,7 @@</span><br><span> size_t tx_sps, size_t rx_sps, size_t chans,</span><br><span> GSM::Time wTransmitLatency,</span><br><span> RadioInterface *wRadioInterface,</span><br><span style="color: hsl(0, 100%, 40%);">- double wRssiOffset);</span><br><span style="color: hsl(120, 100%, 40%);">+ double wRssiOffset, int stackSize);</span><br><span> </span><br><span> /** Destructor */</span><br><span> ~Transceiver();</span><br><span>@@ -178,6 +178,7 @@</span><br><span> double rxFullScale; ///< full scale output to radio</span><br><span> </span><br><span> double rssiOffset; ///< RSSI to dBm conversion offset</span><br><span style="color: hsl(120, 100%, 40%);">+ int stackSize; ///< stack size for threads, 0 = OS default</span><br><span> </span><br><span> /** modulate and add a burst to the transmit queue */</span><br><span> void addRadioVector(size_t chan, BitVector &bits,</span><br><span>diff --git a/Transceiver52M/osmo-trx.cpp b/Transceiver52M/osmo-trx.cpp</span><br><span>index 05489bd..06b1a18 100644</span><br><span>--- a/Transceiver52M/osmo-trx.cpp</span><br><span>+++ b/Transceiver52M/osmo-trx.cpp</span><br><span>@@ -145,7 +145,7 @@</span><br><span> transceiver = new Transceiver(trx->cfg.base_port, trx->cfg.bind_addr,</span><br><span> trx->cfg.remote_addr, trx->cfg.tx_sps,</span><br><span> trx->cfg.rx_sps, trx->cfg.num_chans, GSM::Time(3,0),</span><br><span style="color: hsl(0, 100%, 40%);">- radio, trx->cfg.rssi_offset);</span><br><span style="color: hsl(120, 100%, 40%);">+ radio, trx->cfg.rssi_offset, trx->cfg.stack_size);</span><br><span> if (!transceiver->init(trx->cfg.filler, trx->cfg.rtsc,</span><br><span> trx->cfg.rach_delay, trx->cfg.egprs, trx->cfg.ext_rach)) {</span><br><span> LOG(ALERT) << "Failed to initialize transceiver";</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-trx/+/14488">change 14488</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-trx/+/14488"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-trx </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Id752f6b5ce9a96a67cd1ff835687ce0e03d3a50d </div>
<div style="display:none"> Gerrit-Change-Number: 14488 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Hoernchen <ewild@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>