For lazy storage key handling, we need a mechanism to track if the process ever issued a storage key operation. This patch adds the basic infrastructure for making the storage key handling optional, but still leaves it enabled for now by default. Signed-off-by: Dominik Dingel <dingel@linux.vnet.ibm.com> Acked-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
		
			
				
	
	
		
			42 lines
		
	
	
	
		
			975 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
	
		
			975 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef __MMU_H
 | 
						|
#define __MMU_H
 | 
						|
 | 
						|
#include <linux/cpumask.h>
 | 
						|
#include <linux/errno.h>
 | 
						|
 | 
						|
typedef struct {
 | 
						|
	cpumask_t cpu_attach_mask;
 | 
						|
	atomic_t attach_count;
 | 
						|
	unsigned int flush_mm;
 | 
						|
	spinlock_t list_lock;
 | 
						|
	struct list_head pgtable_list;
 | 
						|
	struct list_head gmap_list;
 | 
						|
	unsigned long asce_bits;
 | 
						|
	unsigned long asce_limit;
 | 
						|
	unsigned long vdso_base;
 | 
						|
	/* The mmu context has extended page tables. */
 | 
						|
	unsigned int has_pgste:1;
 | 
						|
	/* The mmu context uses storage keys. */
 | 
						|
	unsigned int use_skey:1;
 | 
						|
} mm_context_t;
 | 
						|
 | 
						|
#define INIT_MM_CONTEXT(name)						      \
 | 
						|
	.context.list_lock    = __SPIN_LOCK_UNLOCKED(name.context.list_lock), \
 | 
						|
	.context.pgtable_list = LIST_HEAD_INIT(name.context.pgtable_list),    \
 | 
						|
	.context.gmap_list = LIST_HEAD_INIT(name.context.gmap_list),
 | 
						|
 | 
						|
static inline int tprot(unsigned long addr)
 | 
						|
{
 | 
						|
	int rc = -EFAULT;
 | 
						|
 | 
						|
	asm volatile(
 | 
						|
		"	tprot	0(%1),0\n"
 | 
						|
		"0:	ipm	%0\n"
 | 
						|
		"	srl	%0,28\n"
 | 
						|
		"1:\n"
 | 
						|
		EX_TABLE(0b,1b)
 | 
						|
		: "+d" (rc) : "a" (addr) : "cc");
 | 
						|
	return rc;
 | 
						|
}
 | 
						|
 | 
						|
#endif
 |