Introduction of Priority_node structure (priority.h)

Heinz Junkes junkes at fhi-berlin.mpg.de
Mon May 11 08:54:34 UTC 2020


The Priority_node structure was committed to the 4.10 branch of RTEMS in December
2017 (78b867e26d score: replace current and real priority with priority node).

Do I have a possibility to know at  compile time (in our case  EPICS) if it is present or not. 

Background:
We had received the following bug report:

> On 1/16/19 2:51 PM, Michael Westfall via Tech-talk wrote:
>> When compiling base R3.14.12.7 for RTEMS 4.10.2, I get the following error:
>> 
>> /gem_swdev1/targetOS/RTEMS/rtems-4.10/bin/powerpc-rtems4.10-gcc --pipe -B/gem_swdev1/targetOS/RTEMS/rtems-4.10/powerpc-rtems4.10/beatnik/lib/ -specs bsp_specs -qrtems   -fasm -c   -mcpu=7400 -D__ppc_generic                   -DUNIX      -O2 -g -g   -Wall       -DMY_DO_BOOTP=NULL -DHAVE_MOTLOAD -DRTEMS_NETWORK_CONFIG_MBUF_SPACE=2048 -DRTEMS_NETWORK_CONFIG_CLUSTER_SPACE=5120     -MMD -I. -I../O.Common -I. -I../../../src/libCom/osi/os/RTEMS -I../../../src/libCom/osi/os/posix -I../../../src/libCom/osi/os/default -I.. -I../../../src/libCom/bucketLib -I../../../src/libCom/ring -I../../../src/libCom/calc -I../../../src/libCom/cvtFast -I../../../src/libCom/cppStd -I../../../src/libCom/cxxTemplates -I../../../src/libCom/dbmf -I../../../src/libCom/ellLib -I../../../src/libCom/env -I../../../src/libCom/error -I../../../src/libCom/fdmgr -I../../../src/libCom/freeList -I../../../src/libCom/gpHash -I../../../src/libCom/iocsh -I../../../src/libCom/logClient -I../../../src/libCom/macLib -I../../../src/libCom/misc -I../../../src/libCom/osi -I../../../src/libCom/taskwd -I../../../src/libCom/timer -I../../../src/libCom/tsDefs -I/gem_swdev1/epics/R3.14.12.7/base/include/os/RTEMS -I/gem_swdev1/epics/R3.14.12.7/base/include         ../../../src/libCom/osi/os/RTEMS/osdThread.c 
>> ../../../src/libCom/osi/os/RTEMS/osdThread.c: In function 'showInternalTaskInfo':
>> ../../../src/libCom/osi/os/RTEMS/osdThread.c:617: error: 'Thread_Control' has no member named 'real_priority'
>> ../../../src/libCom/osi/os/RTEMS/osdThread.c:624: error: 'Thread_Control' has no member named 'current_priority'
>> ../../../src/libCom/osi/os/RTEMS/osdThread.c:624: error: 'Thread_Control' has no member named 'real_priority'
>> ../../../src/libCom/osi/os/RTEMS/osdThread.c:625: error: 'Thread_Control' has no member named 'current_priority'
>> ../../../src/libCom/osi/os/RTEMS/osdThread.c:627: error: 'Thread_Control' has no member named 'real_priority'
>> ../../../src/libCom/osi/os/RTEMS/osdThread.c:627: error: 'Thread_Control' has no member named 'current_priority'
>> make[3]: *** [osdThread.o] Error 1
>> make[3]: Leaving directory `/gem_swdev1/epics/R3.14.12.7/epics-base-R3.14.12.7/src/libCom/O.RTEMS-beatnik'
>> make[2]: *** [install.RTEMS-beatnik] Error 2
>> make[2]: Leaving directory `/gem_swdev1/epics/R3.14.12.7/epics-base-R3.14.12.7/src/libCom'
>> make[1]: *** [libCom.install] Error 2
>> make[1]: Leaving directory `/gem_swdev1/epics/R3.14.12.7/epics-base-R3.14.12.7/src'
>> make: *** [src.install] Error 2

I fixed it with this patch:
> diff --git a/modules/libcom/src/osi/os/RTEMS/osdThread.c b/modules/libcom/src/osi/os/RTEMS/osdThread.c
> index 769e958..2db1ca5 100644
> --- a/modules/libcom/src/osi/os/RTEMS/osdThread.c
> +++ b/modules/libcom/src/osi/os/RTEMS/osdThread.c
> @@ -640,17 +640,17 @@ showInternalTaskInfo (rtems_id tid)
>       * that priority should be displayed, not the value truncated to
>       * the EPICS range.
>       */
> -    epicsPri = 199-thread.real_priority;
> +    epicsPri = 199-thread.Priority_node.real_priority;
>      if (epicsPri < 0)
>          fprintf(epicsGetStdout(),"   <0");
>      else if (epicsPri > 99)
>          fprintf(epicsGetStdout(),"  >99");
>      else
>          fprintf(epicsGetStdout()," %4d", epicsPri);
> -    if (thread.current_priority == thread.real_priority)
> -        fprintf(epicsGetStdout(),"%4d    ", (int)thread.current_priority);
> +    if (thread.Priority_node.current_priority == thread.Priority_node.real_priority)
> +        fprintf(epicsGetStdout(),"%4d    ", (int)thread.Priority_node.current_priority);
>      else
> -        fprintf(epicsGetStdout(),"%4d/%-3d", (int)thread.real_priority, (int)thread.current_priority);
> +        fprintf(epicsGetStdout(),"%4d/%-3d", (int)thread.Priority_node.real_priority, (int)thread.Priority_node.current_priority);
>      showBitmap (bitbuf, thread.current_state, taskState);
>      fprintf(epicsGetStdout(),"%8.8s", bitbuf);
>      if (thread.current_state & (STATES_WAITING_FOR_SEMAPHORE |
> 

But now it turned out that there was also a 4.10.2  variant in which the priority_node structure did not yet exist:

Andrew Johnson wrote 
| finally took a proper look at this bug report.

The APS has been using RTEMS 4.10.2 since 2013 (4.10.2 was tagged on
2011-12-13, I built it in December 2012) and our headers do *not* have
this change, which was committed to the 4.10 branch of RTEMS in December
2017 (78b867e26d score: replace current and real priority with priority
node).

Merging this particular change would thus break EPICS builds here at
APS, and unfortunately it doesn't look like there's an easy way to
detect the change at compile-time. Until someone can work out how to do
that I can't accept this patch into the Base 3.15 or 7.0 branches.

Heinz


-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2542 bytes
Desc: not available
URL: <http://lists.rtems.org/pipermail/devel/attachments/20200511/77ad72b4/attachment.bin>


More information about the devel mailing list