linux/arch/s390/include/asm/mmu.h
<<
>>
Prefs
   1#ifndef __MMU_H
   2#define __MMU_H
   3
   4#include <linux/cpumask.h>
   5#include <linux/errno.h>
   6
   7typedef struct {
   8        cpumask_t cpu_attach_mask;
   9        atomic_t flush_count;
  10        unsigned int flush_mm;
  11        spinlock_t pgtable_lock;
  12        struct list_head pgtable_list;
  13        spinlock_t gmap_lock;
  14        struct list_head gmap_list;
  15        unsigned long gmap_asce;
  16        unsigned long asce;
  17        unsigned long asce_limit;
  18        unsigned long vdso_base;
  19        /* The mmu context allocates 4K page tables. */
  20        unsigned int alloc_pgste:1;
  21        /* The mmu context uses extended page tables. */
  22        unsigned int has_pgste:1;
  23        /* The mmu context uses storage keys. */
  24        unsigned int use_skey:1;
  25} mm_context_t;
  26
  27#define INIT_MM_CONTEXT(name)                                              \
  28        .context.pgtable_lock =                                            \
  29                        __SPIN_LOCK_UNLOCKED(name.context.pgtable_lock),   \
  30        .context.pgtable_list = LIST_HEAD_INIT(name.context.pgtable_list), \
  31        .context.gmap_lock = __SPIN_LOCK_UNLOCKED(name.context.gmap_lock), \
  32        .context.gmap_list = LIST_HEAD_INIT(name.context.gmap_list),
  33
  34static inline int tprot(unsigned long addr)
  35{
  36        int rc = -EFAULT;
  37
  38        asm volatile(
  39                "       tprot   0(%1),0\n"
  40                "0:     ipm     %0\n"
  41                "       srl     %0,28\n"
  42                "1:\n"
  43                EX_TABLE(0b,1b)
  44                : "+d" (rc) : "a" (addr) : "cc");
  45        return rc;
  46}
  47
  48#endif
  49