			DSCR (Data Stream Control Register)
		================================================

DSCR register in powerpc allows user to have some control of prefetch of data
stream in the processor. Please refer to the ISA documents or related manual
for more detailed information regarding how to use this DSCR to attain this
control of the pefetches . This document here provides an overview of kernel
support for DSCR, related kernel objects, it's functionalities and exported
user interface.

(A) Data Structures:

	(1) thread_struct:
		dscr		/* Thread DSCR value */
		dscr_inherit	/* Thread has changed default DSCR */

	(2) PACA:
		dscr_default	/* per-CPU DSCR default value */

	(3) sysfs.c:
		dscr_default	/* System DSCR default value */

(B) Scheduler Changes:

	Scheduler will write the per-CPU DSCR default which is stored in the
	CPU's PACA value into the register if the thread has dscr_inherit value
	cleared which means that it has not changed the default DSCR till now.
	If the dscr_inherit value is set which means that it has changed the
	default DSCR value, scheduler will write the changed value which will
	now be contained in thread struct's dscr into the register instead of
	the per-CPU default PACA based DSCR value.

	NOTE: Please note here that the system wide global DSCR value never
	gets used directly in the scheduler process context switch at all.

(C) SYSFS Interface:

	Global DSCR default:		/sys/devices/system/cpu/dscr_default
	CPU specific DSCR default:	/sys/devices/system/cpu/cpuN/dscr

	Changing the global DSCR default in the sysfs will change all the CPU
	specific DSCR defaults immediately in their PACA structures. Again if
	the current process has the dscr_inherit clear, it also writes the new
	value into every CPU's DSCR register right away and updates the current
	thread's DSCR value as well.

	Changing the CPU specif DSCR default value in the sysfs does exactly
	the same thing as above but unlike the global one above, it just changes
	stuff for that particular CPU instead for all the CPUs on the system.

(D) User Space Instructions:

	The DSCR register can be accessed in the user space using any of these
	two SPR numbers available for that purpose.

	(1) Problem state SPR:		0x03	(Un-privileged, POWER8 only)
	(2) Privileged state SPR:	0x11	(Privileged)

	Accessing DSCR through privileged SPR number (0x11) from user space
	works, as it is emulated following an illegal instruction exception
	inside the kernel. Both mfspr and mtspr instructions are emulated.

	Accessing DSCR through user level SPR (0x03) from user space will first
	create a facility unavailable exception. Inside this exception handler
	all mfspr isntruction based read attempts will get emulated and returned
	where as the first mtspr instruction based write attempts will enable
	the DSCR facility for the next time around (both for read and write) by
	setting DSCR facility in the FSCR register.

(E) Specifics about 'dscr_inherit':

	The thread struct element 'dscr_inherit' represents whether the thread
	in question has attempted and changed the DSCR itself using any of the
	following methods. This element signifies whether the thread wants to
	use the CPU default DSCR value or its own changed DSCR value in the
	kernel.

		(1) mtspr instruction	(SPR number 0x03)
		(2) mtspr instruction	(SPR number 0x11)
		(3) ptrace interface	(Explicitly set user DSCR value)

	Any child of the process created after this event in the process inherits
	this same behaviour as well.
