aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/libgnarl
diff options
context:
space:
mode:
authorJustin Squirek <squirek@adacore.com>2024-03-11 15:15:34 +0000
committerMarc Poulhiès <poulhies@adacore.com>2024-05-21 09:26:44 +0200
commitc32fd1a614bd3bfd219bb6fd72e9b7ebf4a0a9c2 (patch)
tree3b8c196f310613704dfe25382ab2c15e20a27315 /gcc/ada/libgnarl
parent0ebaffccb294d90184ad78367de66b6307de3ac0 (diff)
downloadgcc-c32fd1a614bd3bfd219bb6fd72e9b7ebf4a0a9c2.zip
gcc-c32fd1a614bd3bfd219bb6fd72e9b7ebf4a0a9c2.tar.gz
gcc-c32fd1a614bd3bfd219bb6fd72e9b7ebf4a0a9c2.tar.bz2
ada: Add new Mingw task priority mapping
This patch adds a new mapping (Non_FIFO_Underlying_Priorities) for dynamically setting task priorities in Windows when pragma Task_Dispatching_Policy (FIFO_Within_Priorities) is not present. Additionally, it documents the requirement to specify the pragma in order to use Set_Priority in the general case. gcc/ada/ * doc/gnat_ugn/platform_specific_information.rst: Add note about different priority level granularities under different policies in Windows and move POSIX related info into new section. * libgnarl/s-taprop.ads: Add note about Task_Dispatching_Policy. * libgnarl/s-taprop__mingw.adb: (Set_Priority): Add use of Non_FIFO_Underlying_Priorities. * libgnat/system-mingw.ads: Add documentation for modifying priority mappings and add alternative mapping Non_FIFO_Underlying_Priorities. * gnat_ugn.texi: Regenerate.
Diffstat (limited to 'gcc/ada/libgnarl')
-rw-r--r--gcc/ada/libgnarl/s-taprop.ads9
-rw-r--r--gcc/ada/libgnarl/s-taprop__mingw.adb5
2 files changed, 13 insertions, 1 deletions
diff --git a/gcc/ada/libgnarl/s-taprop.ads b/gcc/ada/libgnarl/s-taprop.ads
index 35f0ea4..b3d2240 100644
--- a/gcc/ada/libgnarl/s-taprop.ads
+++ b/gcc/ada/libgnarl/s-taprop.ads
@@ -322,6 +322,15 @@ package System.Task_Primitives.Operations is
-- priority (RM D.2.2 par 9). Loss_Of_Inheritance helps the underlying
-- implementation to do it right when the OS doesn't.
+ -- Note: The behavior of Set_Priority is OS specific when a dispatching
+ -- policy is not specified, and, as a result, calls to Set_Priority may
+ -- have no affect without setting such a policy via pragma
+ -- Task_Dispatching_Policy.
+
+ -- For example:
+
+ -- pragma Task_Dispatching_Policy (FIFO_Within_Priorities);
+
function Get_Priority (T : ST.Task_Id) return System.Any_Priority;
pragma Inline (Get_Priority);
-- Returns the priority last set by Set_Priority for this task
diff --git a/gcc/ada/libgnarl/s-taprop__mingw.adb b/gcc/ada/libgnarl/s-taprop__mingw.adb
index df1cb67..3a124ba 100644
--- a/gcc/ada/libgnarl/s-taprop__mingw.adb
+++ b/gcc/ada/libgnarl/s-taprop__mingw.adb
@@ -675,7 +675,10 @@ package body System.Task_Primitives.Operations is
Res :=
SetThreadPriority
(T.Common.LL.Thread,
- Interfaces.C.int (Underlying_Priorities (Prio)));
+ Interfaces.C.int ((if Dispatching_Policy = 'F' then
+ FIFO_Underlying_Priorities (Prio)
+ else
+ Underlying_Priorities (Prio))));
pragma Assert (Res = Win32.TRUE);
-- Note: Annex D (RM D.2.3(5/2)) requires the task to be placed at the