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        /* The mmu context uses CMMA. */
  26        unsigned int use_cmma:1;
  27} mm_context_t;
  28
  29#define INIT_MM_CONTEXT(name)                                              \
  30        .context.pgtable_lock =                                            \
  31                        __SPIN_LOCK_UNLOCKED(name.context.pgtable_lock),   \
  32        .context.pgtable_list = LIST_HEAD_INIT(name.context.pgtable_list), \
  33        .context.gmap_lock = __SPIN_LOCK_UNLOCKED(name.context.gmap_lock), \
  34        .context.gmap_list = LIST_HEAD_INIT(name.context.gmap_list),
  35
  36static inline int tprot(unsigned long addr)
  37{
  38        int rc = -EFAULT;
  39
  40        asm volatile(
  41                "       tprot   0(%1),0\n"
  42                "0:     ipm     %0\n"
  43                "       srl     %0,28\n"
  44                "1:\n"
  45                EX_TABLE(0b,1b)
  46                : "+d" (rc) : "a" (addr) : "cc");
  47        return rc;
  48}
  49
  50#endif
  51