about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGabriel F. T. Gomes <gftg@linux.vnet.ibm.com>2015-08-10 10:58:12 -0300
committerTulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>2015-08-19 17:43:26 -0300
commit1747fcda4902a3b46183d93fb16ed9b436b2608b (patch)
treeae11b87990c3cdd3e25b2533dd60a2a2dac16bb0
parent1f3be1988bce6756ad8cd37386eedef95aa0f2ed (diff)
downloadglibc-1747fcda4902a3b46183d93fb16ed9b436b2608b.tar.gz
glibc-1747fcda4902a3b46183d93fb16ed9b436b2608b.tar.xz
glibc-1747fcda4902a3b46183d93fb16ed9b436b2608b.zip
PowerPC: Extend Program Priority Register support
This patch adds extra inline functions to change the Program Priority
Register from ISA 2.07.

2015-08-19  Gabriel F. T. Gomes  <gftg@linux.vnet.ibm.com>

	* sysdeps/powerpc/sys/platform/ppc.h (__ppc_set_ppr_med_high,
	__ppc_set_ppr_very_low): New functions.
	* manual/platform.texi: Add documentation about
	__ppc_set_ppr_med_high and __ppc_set_ppr_very_low.
-rw-r--r--ChangeLog7
-rw-r--r--manual/platform.texi18
-rw-r--r--sysdeps/powerpc/sys/platform/ppc.h31
3 files changed, 56 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 23760214ab..1d9d5bc6d5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2015-08-19  Gabriel F. T. Gomes  <gftg@linux.vnet.ibm.com>
+
+	* sysdeps/powerpc/sys/platform/ppc.h (__ppc_set_ppr_med_high,
+	__ppc_set_ppr_very_low): New functions.
+	* manual/platform.texi: Add documentation about
+	__ppc_set_ppr_med_high and __ppc_set_ppr_very_low.
+
 2015-08-19  Wilco Dijkstra  <wdijkstr@arm.com>
 
 	* string/stpncpy.c (stpncpy): Improve performance using
diff --git a/manual/platform.texi b/manual/platform.texi
index 872e32ecb3..cb166641fb 100644
--- a/manual/platform.texi
+++ b/manual/platform.texi
@@ -97,3 +97,21 @@ Set the Program Priority Register to low value.
 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
 Set the Program Priority Register to medium low value.
 @end deftypefun
+
+Power ISA 2.07 extends the priorities that can be set to the Program Priority
+Register (PPR).  The following functions implement the new priority levels:
+very low and medium high.
+
+@deftypefun {void} __ppc_set_ppr_very_low (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+Set the Program Priority Register to very low value.
+@end deftypefun
+
+@deftypefun {void} __ppc_set_ppr_med_high (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+Set the Program Priority Register to medium high value.  The medium high
+priority is privileged and may only be set during certain time intervals by
+problem-state programs.  If the program priority is medium high when the time
+interval expires or if an attempt is made to set the priority to medium high
+when it is not allowed, the priority is set to medium.
+@end deftypefun
diff --git a/sysdeps/powerpc/sys/platform/ppc.h b/sysdeps/powerpc/sys/platform/ppc.h
index 3febb61e61..2594606504 100644
--- a/sysdeps/powerpc/sys/platform/ppc.h
+++ b/sysdeps/powerpc/sys/platform/ppc.h
@@ -112,4 +112,35 @@ __ppc_set_ppr_low (void)
   __asm__ volatile ("or 1,1,1");
 }
 
+/* Power ISA 2.07 (Book II, Chapter 3) extends the priorities that can be set
+   to the Program Priority Register (PPR).  The form 'or Rx,Rx,Rx' is used to
+   modify the PRI field of the PPR, the same way as described above.
+   The new priority levels are:
+     Rx = 31 (very low)
+     Rx = 5 (medium high)
+   Any program can set the priority to very low, low, medium low, and medium,
+   as these are unprivileged.
+   The medium high priority, on the other hand, is privileged, and may only be
+   set during certain time intervals by problem-state programs.  If the program
+   priority is medium high when the time interval expires or if an attempt is
+   made to set the priority to medium high when it is not allowed, the PRI
+   field is set to medium.
+ */
+
+#ifdef _ARCH_PWR8
+
+static inline void
+__ppc_set_ppr_very_low (void)
+{
+  __asm__ volatile ("or 31,31,31");
+}
+
+static inline void
+__ppc_set_ppr_med_high (void)
+{
+  __asm__ volatile ("or 5,5,5");
+}
+
+#endif
+
 #endif  /* sys/platform/ppc.h */