| .. | .. |
|---|
| 9 | 9 | #ifndef _ASM_S390_GMAP_H |
|---|
| 10 | 10 | #define _ASM_S390_GMAP_H |
|---|
| 11 | 11 | |
|---|
| 12 | +#include <linux/radix-tree.h> |
|---|
| 13 | +#include <linux/refcount.h> |
|---|
| 14 | + |
|---|
| 12 | 15 | /* Generic bits for GMAP notification on DAT table entry changes. */ |
|---|
| 13 | 16 | #define GMAP_NOTIFY_SHADOW 0x2 |
|---|
| 14 | 17 | #define GMAP_NOTIFY_MPROT 0x1 |
|---|
| .. | .. |
|---|
| 29 | 32 | * @table: pointer to the page directory |
|---|
| 30 | 33 | * @asce: address space control element for gmap page table |
|---|
| 31 | 34 | * @pfault_enabled: defines if pfaults are applicable for the guest |
|---|
| 35 | + * @guest_handle: protected virtual machine handle for the ultravisor |
|---|
| 32 | 36 | * @host_to_rmap: radix tree with gmap_rmap lists |
|---|
| 33 | 37 | * @children: list of shadow gmap structures |
|---|
| 34 | 38 | * @pt_list: list of all page tables used in the shadow guest address space |
|---|
| .. | .. |
|---|
| 46 | 50 | struct radix_tree_root guest_to_host; |
|---|
| 47 | 51 | struct radix_tree_root host_to_guest; |
|---|
| 48 | 52 | spinlock_t guest_table_lock; |
|---|
| 49 | | - atomic_t ref_count; |
|---|
| 53 | + refcount_t ref_count; |
|---|
| 50 | 54 | unsigned long *table; |
|---|
| 51 | 55 | unsigned long asce; |
|---|
| 52 | 56 | unsigned long asce_end; |
|---|
| 53 | 57 | void *private; |
|---|
| 54 | 58 | bool pfault_enabled; |
|---|
| 59 | + /* only set for protected virtual machines */ |
|---|
| 60 | + unsigned long guest_handle; |
|---|
| 55 | 61 | /* Additional data for shadow guest address spaces */ |
|---|
| 56 | 62 | struct radix_tree_root host_to_rmap; |
|---|
| 57 | 63 | struct list_head children; |
|---|
| .. | .. |
|---|
| 134 | 140 | |
|---|
| 135 | 141 | void gmap_register_pte_notifier(struct gmap_notifier *); |
|---|
| 136 | 142 | void gmap_unregister_pte_notifier(struct gmap_notifier *); |
|---|
| 137 | | -void gmap_pte_notify(struct mm_struct *, unsigned long addr, pte_t *, |
|---|
| 138 | | - unsigned long bits); |
|---|
| 139 | 143 | |
|---|
| 140 | 144 | int gmap_mprotect_notify(struct gmap *, unsigned long start, |
|---|
| 141 | 145 | unsigned long len, int prot); |
|---|
| 142 | 146 | |
|---|
| 143 | 147 | void gmap_sync_dirty_log_pmd(struct gmap *gmap, unsigned long dirty_bitmap[4], |
|---|
| 144 | 148 | unsigned long gaddr, unsigned long vmaddr); |
|---|
| 149 | +int gmap_mark_unmergeable(void); |
|---|
| 150 | +void s390_reset_acc(struct mm_struct *mm); |
|---|
| 151 | +void s390_unlist_old_asce(struct gmap *gmap); |
|---|
| 152 | +int s390_replace_asce(struct gmap *gmap); |
|---|
| 145 | 153 | #endif /* _ASM_S390_GMAP_H */ |
|---|