From 6006b92a287fa5a23bcb7905f6f854d9c9dd4462 Mon Sep 17 00:00:00 2001 From: michaelld Date: Thu, 13 Sep 2007 20:36:23 +0000 Subject: [PATCH] Made changes, such that: * trunk now passes "make distcheck" on OSX * verified that 'realtime' scheduling now works on systems with 'pthread_setschedparam' but not 'sched_setscheduler' (e.g. darwin); the latter has priority if both are installed. git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@6427 221aa14e-8319-0410-a670-987f0aec2ac5 --- config/grc_usrp.m4 | 4 +-- gnuradio-core/src/lib/runtime/gr_realtime.cc | 29 +++++++++++++++++++- gr-usrp/src/run_tests.in | 4 +-- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/config/grc_usrp.m4 b/config/grc_usrp.m4 index cc4f6a17..e28e6c28 100644 --- a/config/grc_usrp.m4 +++ b/config/grc_usrp.m4 @@ -1,4 +1,4 @@ -dnl Copyright 2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc. +dnl Copyright 2001,2002,2003,2004,2005,2006,2007 Free Software Foundation, Inc. dnl dnl This file is part of GNU Radio dnl @@ -54,7 +54,7 @@ AC_DEFUN([GRC_USRP],[ # These checks don't fail AC_C_BIGENDIAN AC_CHECK_HEADERS([byteswap.h linux/compiler.h]) - AC_CHECK_FUNCS([getrusage sched_setscheduler]) + AC_CHECK_FUNCS([getrusage sched_setscheduler pthread_setschedparam]) AC_CHECK_FUNCS([sigaction snprintf]) passed=yes diff --git a/gnuradio-core/src/lib/runtime/gr_realtime.cc b/gnuradio-core/src/lib/runtime/gr_realtime.cc index 878411df..35d0ef38 100644 --- a/gnuradio-core/src/lib/runtime/gr_realtime.cc +++ b/gnuradio-core/src/lib/runtime/gr_realtime.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2006 Free Software Foundation, Inc. + * Copyright 2006,2007 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -58,6 +58,33 @@ gr_enable_realtime_scheduling() return RT_OK; } +#elif defined(HAVE_PTHREAD_SETSCHEDPARAM) + +#include + +gr_rt_status_t +gr_enable_realtime_scheduling() +{ + int policy = SCHED_FIFO; + int pri = (sched_get_priority_max (policy) + + sched_get_priority_min (policy)) / 2; + pthread_t this_thread = pthread_self (); // this process + struct sched_param param; + memset (¶m, 0, sizeof (param)); + param.sched_priority = pri; + int result = pthread_setschedparam (this_thread, policy, ¶m); + if (result != 0) { + if (errno == EPERM) + return RT_NO_PRIVS; + else { + perror ("pthread_setschedparam: failed to set real time priority"); + return RT_OTHER_ERROR; + } + } + //printf("SCHED_FIFO enabled with priority = %d\n", pri); + return RT_OK; +} + // #elif // could try negative niceness #else diff --git a/gr-usrp/src/run_tests.in b/gr-usrp/src/run_tests.in index 49e9530c..84ae973f 100644 --- a/gr-usrp/src/run_tests.in +++ b/gr-usrp/src/run_tests.in @@ -5,11 +5,11 @@ # 3rd parameter is path to Python QA directory # For OS/X -DYLD_LIBRARY_PATH=@abs_top_builddir@/usrp/host/lib/:@abs_top_builddir@/usrp/host/lib/.libs:$DYLD_LIBRARY_PATH +DYLD_LIBRARY_PATH=@abs_top_builddir@/usrp/host/lib/legacy/:@abs_top_builddir@/usrp/host/lib/legacy/.libs:$DYLD_LIBRARY_PATH export DYLD_LIBRARY_PATH # For Win32 -PATH=@abs_top_builddir@/usrp/host/lib/.libs:$PATH +PATH=@abs_top_builddir@/usrp/host/lib/legacy/.libs:$PATH @top_builddir@/run_tests.sh \ @abs_top_srcdir@/gr-usrp \ -- 2.30.2