]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: Adjust QNX Ada priorities to match QNX system priorities
authorJohannes Kliemann <kliemann@adacore.com>
Fri, 12 May 2023 13:21:22 +0000 (13:21 +0000)
committerMarc Poulhiès <poulhies@adacore.com>
Thu, 15 Jun 2023 07:59:36 +0000 (09:59 +0200)
The Ada priority range of the QNX runtime started from 0, differing from
the QNX system priorities range starting from 1. As this may cause
confusion, especially if used in a mixed language environment, the Ada
priority range now starts at 1.

The default priority of Ada tasks as mandated is the middle of the
priority range. On QNX this means the default priority of Ada tasks is
30. This is much higher than the default QNX priority of 10 and may
cause unexpected system interruptions when Ada tasks take a lot of CPU time.

gcc/ada/

* libgnarl/s-osinte__qnx.adb: Adjust priority conversion function.
* libgnat/system-qnx-arm.ads: Adjust priority range and default
priority.

gcc/ada/libgnarl/s-osinte__qnx.adb
gcc/ada/libgnat/system-qnx-arm.ads

index bf08ecbf4dd6ea7147fcd1699b92d2c9d5cc64c5..127d1795a35693fab95be87b7b98442e9269fe88 100644 (file)
@@ -87,7 +87,7 @@ package body System.OS_Interface is
      (Prio : System.Any_Priority) return Interfaces.C.int
    is
    begin
-      return Interfaces.C.int (Prio) + 1;
+      return Interfaces.C.int (Prio);
    end To_Target_Priority;
 
    -----------------
index 344bd6168f350895201ee7998d990ba6fff09c28..1dd1a2228e93e627c88842dff1f99f615f80181b 100644 (file)
@@ -95,22 +95,20 @@ package System is
 
    --  Priority-related Declarations (RM D.1)
 
-   --  System priority is Ada priority + 1, so lies in the range 1 .. 63.
-   --
    --  If the scheduling policy is SCHED_FIFO or SCHED_RR the runtime makes use
    --  of the entire range provided by the system.
    --
    --  If the scheduling policy is SCHED_OTHER the only valid system priority
    --  is 1 and other values are simply ignored.
 
-   Max_Priority           : constant Positive := 61;
-   Max_Interrupt_Priority : constant Positive := 62;
+   Max_Priority           : constant Positive := 62;
+   Max_Interrupt_Priority : constant Positive := 63;
 
-   subtype Any_Priority       is Integer      range  0 .. 62;
-   subtype Priority           is Any_Priority range  0 .. 61;
-   subtype Interrupt_Priority is Any_Priority range 62 .. 62;
+   subtype Any_Priority       is Integer      range  1 .. 63;
+   subtype Priority           is Any_Priority range  1 .. 62;
+   subtype Interrupt_Priority is Any_Priority range 63 .. 63;
 
-   Default_Priority : constant Priority := 30;
+   Default_Priority : constant Priority := 10;
 
 private