This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] PowerPC: Extend Program Priority Register support
- From: "Gabriel F. T. Gomes" <gftg at linux dot vnet dot ibm dot com>
- To: libc-alpha at sourceware dot org
- Cc: tuliom at linux dot vnet dot ibm dot com, sjmunroe at us dot ibm dot com
- Date: Mon, 10 Aug 2015 10:58:12 -0300
- Subject: [PATCH] PowerPC: Extend Program Priority Register support
- Authentication-results: sourceware.org; auth=none
This patch adds extra inline functions to change the Program Priority Register
from ISA 2.07.
2015-08-10 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 | 19 +++++++++++++++++++
sysdeps/powerpc/sys/platform/ppc.h | 31 +++++++++++++++++++++++++++++++
2 files changed, 50 insertions(+)
diff --git a/manual/platform.texi b/manual/platform.texi
index 872e32e..f772460 100644
--- a/manual/platform.texi
+++ b/manual/platform.texi
@@ -97,3 +97,22 @@ 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 3febb61..2594606 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 */
--
2.1.0