diff --git a/CMakeLists.txt b/CMakeLists.txt index 2f36984..11c9361 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -57,6 +57,9 @@ file( STRINGS "${PROJECT_SOURCE_DIR}/config/CONFIG_QNX_RESMGR_SINGLE_THREAD" file( STRINGS "${PROJECT_SOURCE_DIR}/config/CONFIG_QNX_RESMGR_THREAD_POOL" CONFIG_QNX_RESMGR_THREAD_POOL ) +file( STRINGS "${PROJECT_SOURCE_DIR}/config/CONFIG_IRQ_SCHED_PRIORITY_BOOST" + CONFIG_IRQ_SCHED_PRIORITY_BOOST ) + add_compile_options( -Wall ) add_compile_definitions( PROGRAM_VERSION="${PROGRAM_VERSION}" ) @@ -75,6 +78,9 @@ add_compile_definitions( add_compile_definitions( CONFIG_QNX_RESMGR_THREAD_POOL=${CONFIG_QNX_RESMGR_THREAD_POOL} ) +add_compile_definitions( + CONFIG_IRQ_SCHED_PRIORITY_BOOST=${CONFIG_IRQ_SCHED_PRIORITY_BOOST} ) + add_compile_definitions( DEVCANLINUX_SYSLOG=1 ) add_compile_definitions( DEVCANLINUX_STDERR=1 ) @@ -86,11 +92,6 @@ project( dev-can-linux VERSION ${PROGRAM_VERSION} LANGUAGES C CXX ) -set( IRQ_SCHED_PRIORITY_BOOST "20" CACHE STRING - "Schedule priority of transmission and interrupt processing" ) - -add_compile_definitions( IRQ_SCHED_PRIORITY_BOOST=${IRQ_SCHED_PRIORITY_BOOST} ) - set( SSH_PORT "6022" CACHE STRING "SSH port number" ) include( CodeCoverageProfiler ) diff --git a/Makefile b/Makefile index 6a1c325..103fea4 100644 --- a/Makefile +++ b/Makefile @@ -79,6 +79,7 @@ CCFLAGS += -DCONFIG_QNX_INTERRUPT_MASK_ISR=`cat "config/CONFIG_QNX_INTERRUPT_MAS CCFLAGS += -DCONFIG_QNX_INTERRUPT_MASK_PULSE=`cat "config/CONFIG_QNX_INTERRUPT_MASK_PULSE"` CCFLAGS += -DCONFIG_QNX_RESMGR_SINGLE_THREAD=`cat "config/CONFIG_QNX_RESMGR_SINGLE_THREAD"` CCFLAGS += -DCONFIG_QNX_RESMGR_THREAD_POOL=`cat "config/CONFIG_QNX_RESMGR_THREAD_POOL"` +CCFLAGS += -DCONFIG_IRQ_SCHED_PRIORITY_BOOST=`cat "config/CONFIG_IRQ_SCHED_PRIORITY_BOOST"` # # Linux Kernel configuration macros diff --git a/config/CONFIG_IRQ_SCHED_PRIORITY_BOOST b/config/CONFIG_IRQ_SCHED_PRIORITY_BOOST new file mode 100644 index 0000000..209e3ef --- /dev/null +++ b/config/CONFIG_IRQ_SCHED_PRIORITY_BOOST @@ -0,0 +1 @@ +20 diff --git a/src/interrupt.c b/src/interrupt.c index 1c6cff0..3000d29 100644 --- a/src/interrupt.c +++ b/src/interrupt.c @@ -130,7 +130,7 @@ int request_threaded_irq(unsigned int irq, irq_handler_t handler, terminate_event.sigev_coid = coid; terminate_event.sigev_code = 0; // not needed for termination terminate_event.sigev_priority = - param.sched_priority + IRQ_SCHED_PRIORITY_BOOST; + param.sched_priority + CONFIG_IRQ_SCHED_PRIORITY_BOOST; } irq_group_t* group = irq_to_group_map[irq]; @@ -181,7 +181,7 @@ int request_threaded_irq(unsigned int irq, irq_handler_t handler, irq_attach[k].event.sigev_coid = coid; irq_attach[k].event.sigev_code = k; irq_attach[k].event.sigev_priority = - param.sched_priority + IRQ_SCHED_PRIORITY_BOOST; + param.sched_priority + CONFIG_IRQ_SCHED_PRIORITY_BOOST; irq_attach[k].irq = group->irq[i]; irq_attach[k].irq_entry = i; diff --git a/src/main.c b/src/main.c index 01f27c2..9bf9ceb 100644 --- a/src/main.c +++ b/src/main.c @@ -590,7 +590,7 @@ int main (int argc, char* argv[]) { pthread_attr_setinheritsched(&irq_thread_attr, PTHREAD_EXPLICIT_SCHED); - param.sched_priority += IRQ_SCHED_PRIORITY_BOOST; + param.sched_priority += CONFIG_IRQ_SCHED_PRIORITY_BOOST; pthread_attr_setschedparam(&irq_thread_attr, ¶m); pthread_create(&irq_thread, &irq_thread_attr, &irq_loop, NULL); diff --git a/src/prints.c b/src/prints.c index 35c926c..4c5f0f8 100644 --- a/src/prints.c +++ b/src/prints.c @@ -53,6 +53,8 @@ void print_configs (void) { CONFIG_QNX_RESMGR_SINGLE_THREAD); printf("CONFIG_QNX_RESMGR_THREAD_POOL=%d\n", CONFIG_QNX_RESMGR_THREAD_POOL); + printf("CONFIG_IRQ_SCHED_PRIORITY_BOOST=%d\n", + CONFIG_IRQ_SCHED_PRIORITY_BOOST); return; } diff --git a/src/session.c b/src/session.c index 5b09c54..7c5b41f 100644 --- a/src/session.c +++ b/src/session.c @@ -92,7 +92,7 @@ create_device_session (struct net_device* dev, const queue_attr_t* tx_attr) { pthread_attr_setinheritsched( &new_device->tx_thread_attr, PTHREAD_EXPLICIT_SCHED ); - param.sched_priority += IRQ_SCHED_PRIORITY_BOOST; + param.sched_priority += CONFIG_IRQ_SCHED_PRIORITY_BOOST; pthread_attr_setschedparam(&new_device->tx_thread_attr, ¶m); pthread_create( &new_device->tx_thread, &new_device->tx_thread_attr,