mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-31 22:10:34 +03:00 
			
		
		
		
	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.
		
			
				
	
	
		
			118 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| @node Platform, Contributors, Maintenance, Top
 | |
| @c %MENU% Describe all platform-specific facilities provided
 | |
| @appendix Platform-specific facilities
 | |
| 
 | |
| @Theglibc{} can provide machine-specific functionality.
 | |
| 
 | |
| @menu
 | |
| * PowerPC::           Facilities Specific to the PowerPC Architecture
 | |
| @end menu
 | |
| 
 | |
| @node PowerPC
 | |
| @appendixsec PowerPC-specific Facilities
 | |
| 
 | |
| Facilities specific to PowerPC that are not specific to a particular
 | |
| operating system are declared in @file{sys/platform/ppc.h}.
 | |
| 
 | |
| @deftypefun {uint64_t} __ppc_get_timebase (void)
 | |
| @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
 | |
| Read the current value of the Time Base Register.
 | |
| 
 | |
| The @dfn{Time Base Register} is a 64-bit register that stores a monotonically
 | |
| incremented value updated at a system-dependent frequency that may be
 | |
| different from the processor frequency.  More information is available in
 | |
| @cite{Power ISA 2.06b - Book II - Section 5.2}.
 | |
| 
 | |
| @code{__ppc_get_timebase} uses the processor's time base facility directly
 | |
| without requiring assistance from the operating system, so it is very
 | |
| efficient.
 | |
| @end deftypefun
 | |
| 
 | |
| @deftypefun {uint64_t} __ppc_get_timebase_freq (void)
 | |
| @safety{@prelim{}@mtunsafe{@mtuinit{}}@asunsafe{@asucorrupt{:init}}@acunsafe{@acucorrupt{:init}}}
 | |
| @c __ppc_get_timebase_freq=__get_timebase_freq @mtuinit @acsfd
 | |
| @c  __get_clockfreq @mtuinit @asucorrupt:init @acucorrupt:init @acsfd
 | |
| @c    the initialization of the static timebase_freq is not exactly
 | |
| @c    safe, because hp_timing_t cannot be atomically set up.
 | |
| @c   syscall:get_tbfreq ok
 | |
| @c   open dup @acsfd
 | |
| @c   read dup ok
 | |
| @c   memcpy dup ok
 | |
| @c   memmem dup ok
 | |
| @c   close dup @acsfd
 | |
| Read the current frequency at which the Time Base Register is updated.
 | |
| 
 | |
| This frequency is not related to the processor clock or the bus clock.
 | |
| It is also possible that this frequency is not constant.  More information is
 | |
| available in @cite{Power ISA 2.06b - Book II - Section 5.2}.
 | |
| @end deftypefun
 | |
| 
 | |
| The following functions provide hints about the usage of resources that are
 | |
| shared with other processors.  They can be used, for example, if a program
 | |
| waiting on a lock intends to divert the shared resources to be used by other
 | |
| processors.  More information is available in @cite{Power ISA 2.06b - Book II -
 | |
| Section 3.2}.
 | |
| 
 | |
| @deftypefun {void} __ppc_yield (void)
 | |
| @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
 | |
| Provide a hint that performance will probably be improved if shared resources
 | |
| dedicated to the executing processor are released for use by other processors.
 | |
| @end deftypefun
 | |
| 
 | |
| @deftypefun {void} __ppc_mdoio (void)
 | |
| @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
 | |
| Provide a hint that performance will probably be improved if shared resources
 | |
| dedicated to the executing processor are released until all outstanding storage
 | |
| accesses to caching-inhibited storage have been completed.
 | |
| @end deftypefun
 | |
| 
 | |
| @deftypefun {void} __ppc_mdoom (void)
 | |
| @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
 | |
| Provide a hint that performance will probably be improved if shared resources
 | |
| dedicated to the executing processor are released until all outstanding storage
 | |
| accesses to cacheable storage for which the data is not in the cache have been
 | |
| completed.
 | |
| @end deftypefun
 | |
| 
 | |
| @deftypefun {void} __ppc_set_ppr_med (void)
 | |
| @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
 | |
| Set the Program Priority Register to medium value (default).
 | |
| 
 | |
| The @dfn{Program Priority Register} (PPR) is a 64-bit register that controls
 | |
| the program's priority.  By adjusting the PPR value the programmer may
 | |
| improve system throughput by causing the system resources to be used
 | |
| more efficiently, especially in contention situations.
 | |
| The three unprivileged states available are covered by the functions
 | |
| @code{__ppc_set_ppr_med} (medium -- default), @code{__ppc_set_ppc_low} (low)
 | |
| and @code{__ppc_set_ppc_med_low} (medium low).  More information
 | |
| available in @cite{Power ISA 2.06b - Book II - Section 3.1}.
 | |
| @end deftypefun
 | |
| 
 | |
| @deftypefun {void} __ppc_set_ppr_low (void)
 | |
| @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
 | |
| Set the Program Priority Register to low value.
 | |
| @end deftypefun
 | |
| 
 | |
| @deftypefun {void} __ppc_set_ppr_med_low (void)
 | |
| @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
 |