From 67d70341469998e42ab2ce7e5371c57c3b67fd01 Mon Sep 17 00:00:00 2001 From: Hannes Diethelm Date: Thu, 26 Mar 2026 19:18:53 +0100 Subject: [PATCH] Fix priority check for LXRT --- src/rtapi/rtapi_uspace.hh | 1 + src/rtapi/uspace_rtapi_app.cc | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/rtapi/rtapi_uspace.hh b/src/rtapi/rtapi_uspace.hh index 0ca3a039dd2..cf8ee5670fd 100644 --- a/src/rtapi/rtapi_uspace.hh +++ b/src/rtapi/rtapi_uspace.hh @@ -75,6 +75,7 @@ struct RtapiApp virtual int prio_lowest() const; int prio_higher_delta() const; int prio_bound(int prio) const; + bool prio_check(int prio) const; int prio_next_higher(int prio) const; int prio_next_lower(int prio) const; long clock_set_period(long int period_nsec); diff --git a/src/rtapi/uspace_rtapi_app.cc b/src/rtapi/uspace_rtapi_app.cc index 720e028c240..31131c2b551 100644 --- a/src/rtapi/uspace_rtapi_app.cc +++ b/src/rtapi/uspace_rtapi_app.cc @@ -869,6 +869,14 @@ int RtapiApp::prio_bound(int prio) const { return prio; } +bool RtapiApp::prio_check(int prio) const { + if(rtapi_prio_highest() > rtapi_prio_lowest()) { + return (prio <= rtapi_prio_highest()) && (prio >= rtapi_prio_lowest()); + } else { + return (prio <= rtapi_prio_lowest()) && (prio >= rtapi_prio_highest()); + } +} + int RtapiApp::prio_next_higher(int prio) const { prio = prio_bound(prio); @@ -899,8 +907,10 @@ int RtapiApp::allocate_task_id() int RtapiApp::task_new(void (*taskcode) (void*), void *arg, int prio, int owner, unsigned long int stacksize, int uses_fp) { /* check requested priority */ - if ((prio > rtapi_prio_highest()) || (prio < rtapi_prio_lowest())) + if (!prio_check(prio)) { + rtapi_print_msg(RTAPI_MSG_ERR,"rtapi:task_new prio is not in bound lowest %i prio %i highest %i\n", + rtapi_prio_lowest(), prio, rtapi_prio_highest()); return -EINVAL; }