diff options
Diffstat (limited to 'host/lib')
| -rw-r--r-- | host/lib/CMakeLists.txt | 16 | ||||
| -rw-r--r-- | host/lib/sched.cpp | 45 | 
2 files changed, 61 insertions, 0 deletions
| diff --git a/host/lib/CMakeLists.txt b/host/lib/CMakeLists.txt index 7b765b0d3..50787f6a2 100644 --- a/host/lib/CMakeLists.txt +++ b/host/lib/CMakeLists.txt @@ -74,6 +74,21 @@ INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/usrp/dboard/CMakeLists.txt)  INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/usrp/usrp2/CMakeLists.txt)  ######################################################################## +# Setup defines for process scheduling +######################################################################## +MESSAGE(STATUS "Configuring process scheduling...") + +INCLUDE(CheckIncludeFileCXX) +CHECK_INCLUDE_FILE_CXX(sched.h HAVE_SCHED_H) + +IF(HAVE_SCHED_H) +    MESSAGE(STATUS "  Process scheduling supported through sched_setscheduler.") +    ADD_DEFINITIONS(-DHAVE_SCHED_H) +ELSE(HAVE_SCHED_H) +    MESSAGE(STATUS "  Process scheduling not supported.") +ENDIF(HAVE_SCHED_H) + +########################################################################  # Setup defines for module loading  ########################################################################  MESSAGE(STATUS "Configuring module loading...") @@ -99,6 +114,7 @@ LIBUHD_APPEND_SOURCES(      ${CMAKE_CURRENT_SOURCE_DIR}/device.cpp      ${CMAKE_CURRENT_SOURCE_DIR}/gain_handler.cpp      ${CMAKE_CURRENT_SOURCE_DIR}/load_modules.cpp +    ${CMAKE_CURRENT_SOURCE_DIR}/sched.cpp      ${CMAKE_CURRENT_SOURCE_DIR}/types.cpp      ${CMAKE_CURRENT_SOURCE_DIR}/utils.cpp      ${CMAKE_CURRENT_SOURCE_DIR}/wax.cpp diff --git a/host/lib/sched.cpp b/host/lib/sched.cpp new file mode 100644 index 000000000..712014c9c --- /dev/null +++ b/host/lib/sched.cpp @@ -0,0 +1,45 @@ +// +// Copyright 2010 Ettus Research LLC +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program.  If not, see <http://www.gnu.org/licenses/>. +// + +#include <uhd/utils/static.hpp> +#include <stdexcept> +#include <iostream> + +#ifdef HAVE_SCHED_H +#include <sched.h> + +/* + * # /etc/security/limits.conf +# +@usrp   -       rtprio  99 +*/ + +UHD_STATIC_BLOCK(setup_process_sched){ +    try{ +        int policy = SCHED_RR; +        int max_pri = sched_get_priority_max(policy); +        if (max_pri == -1) throw std::runtime_error("sched_get_priority_max with SCHED_RR failed"); +        sched_param sp; sp.sched_priority = max_pri; +        int ss_ret = sched_setscheduler(0, policy, &sp); +        if (ss_ret == -1) throw std::runtime_error("sched_setscheduler with SCHED_RR failed"); +    } +    catch(const std::exception &e){ +        std::cerr << "Process scheduling error: " << e.what() << std::endl; +    } +} + +#endif /* HAVE_SCHED_H */ | 
