mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-23 01:40:30 +00:00
b2fa47e6bf
Rework the architecture page table functions to access the bits in the page table extension array (pgste). There are a number of changes: 1) Fix missing pgste update if the attach_count for the mm is <= 1. 2) For every operation that affects the invalid bit in the pte or the rcp byte in the pgste the pcl lock needs to be acquired. The function pgste_get_lock gets the pcl lock and returns the current pgste value for a pte pointer. The function pgste_set_unlock stores the pgste and releases the lock. Between these two calls the bits in the pgste can be shuffled. 3) Define two software bits in the pte _PAGE_SWR and _PAGE_SWC to avoid calling SetPageDirty and SetPageReferenced from pgtable.h. If the host reference backup bit or the host change backup bit has been set the dirty/referenced state is transfered to the pte. The common code will pick up the state from the pte. 4) Add ptep_modify_prot_start and ptep_modify_prot_commit for mprotect. 5) Remove pgd_populate_kernel, pud_populate_kernel, pmd_populate_kernel pgd_clear_kernel, pud_clear_kernel, pmd_clear_kernel and ptep_invalidate. 6) Rename kvm_s390_test_and_clear_page_dirty to ptep_test_and_clear_user_dirty and add ptep_test_and_clear_user_young. 7) Define mm_exclusive() and mm_has_pgste() helper to improve readability. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
23 lines
612 B
C
23 lines
612 B
C
#ifndef __MMU_H
|
|
#define __MMU_H
|
|
|
|
typedef struct {
|
|
atomic_t attach_count;
|
|
unsigned int flush_mm;
|
|
spinlock_t list_lock;
|
|
struct list_head pgtable_list;
|
|
unsigned long asce_bits;
|
|
unsigned long asce_limit;
|
|
unsigned long vdso_base;
|
|
/* Cloned contexts will be created with extended page tables. */
|
|
unsigned int alloc_pgste:1;
|
|
/* The mmu context has extended page tables. */
|
|
unsigned int has_pgste: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),
|
|
|
|
#endif
|