diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/osmo-bts-sysmo/main.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/osmo-bts-sysmo/main.c b/src/osmo-bts-sysmo/main.c index a00120e4..595a6ebc 100644 --- a/src/osmo-bts-sysmo/main.c +++ b/src/osmo-bts-sysmo/main.c @@ -28,6 +28,7 @@ #include <sys/signal.h> #include <sys/types.h> #include <sys/stat.h> +#include <sched.h> #include <netinet/in.h> #include <arpa/inet.h> @@ -56,6 +57,7 @@ int pcu_direct = 0; static const char *config_file = "osmo-bts.cfg"; static int daemonize = 0; static unsigned int dsp_trace = 0x71c00020; +static int rt_prio = -1; int bts_model_init(struct gsm_bts *bts) { @@ -108,6 +110,7 @@ static void print_help() " -V --version Print version information and exit\n" " -e --log-level Set a global log-level\n" " -p --dsp-trace Set DSP trace flags\n" + " -r --realtime PRIO Use SCHED_RR with the specified priority\n" " -w --hw-version Print the targeted HW Version\n" " -M --pcu-direct Force PCU to access message queue for " "PDCH dchannel directly\n" @@ -141,10 +144,11 @@ static void handle_options(int argc, char **argv) { "dsp-trace", 1, 0, 'p' }, { "hw-version", 0, 0, 'w' }, { "pcu-direct", 0, 0, 'M' }, + { "realtime", 1, 0, 'r' }, { 0, 0, 0, 0 } }; - c = getopt_long(argc, argv, "hc:d:Dc:sTVe:p:w:M", + c = getopt_long(argc, argv, "hc:d:Dc:sTVe:p:w:Mr:", long_options, &option_idx); if (c == -1) break; @@ -186,6 +190,9 @@ static void handle_options(int argc, char **argv) print_hwversion(); exit(0); break; + case 'r': + rt_prio = atoi(optarg); + break; default: break; } @@ -235,6 +242,7 @@ static int write_pid_file(char *procname) int main(int argc, char **argv) { struct stat st; + struct sched_param param; struct gsm_bts_role_bts *btsb; struct ipabis_link *link; void *tall_msgb_ctx; @@ -251,6 +259,18 @@ int main(int argc, char **argv) handle_options(argc, argv); + /* enable realtime priority for us */ + if (rt_prio != -1) { + memset(¶m, 0, sizeof(param)); + param.sched_priority = rt_prio; + rc = sched_setscheduler(getpid(), SCHED_RR, ¶m); + if (rc != 0) { + fprintf(stderr, "Setting SCHED_RR priority(%d) failed: %s\n", + param.sched_priority, strerror(errno)); + exit(1); + } + } + bts = gsm_bts_alloc(tall_bts_ctx); if (bts_init(bts) < 0) { fprintf(stderr, "unable to to open bts\n"); |