diff options
Diffstat (limited to 'arch/s390/include/asm/pgalloc.h')
| -rw-r--r-- | arch/s390/include/asm/pgalloc.h | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/arch/s390/include/asm/pgalloc.h b/arch/s390/include/asm/pgalloc.h index e1408ddb94f8..884017cbfa9f 100644 --- a/arch/s390/include/asm/pgalloc.h +++ b/arch/s390/include/asm/pgalloc.h | |||
| @@ -22,6 +22,7 @@ unsigned long *page_table_alloc(struct mm_struct *, unsigned long); | |||
| 22 | void page_table_free(struct mm_struct *, unsigned long *); | 22 | void page_table_free(struct mm_struct *, unsigned long *); |
| 23 | void page_table_free_rcu(struct mmu_gather *, unsigned long *); | 23 | void page_table_free_rcu(struct mmu_gather *, unsigned long *); |
| 24 | 24 | ||
| 25 | void page_table_reset_pgste(struct mm_struct *, unsigned long, unsigned long); | ||
| 25 | int set_guest_storage_key(struct mm_struct *mm, unsigned long addr, | 26 | int set_guest_storage_key(struct mm_struct *mm, unsigned long addr, |
| 26 | unsigned long key, bool nq); | 27 | unsigned long key, bool nq); |
| 27 | 28 | ||
| @@ -91,11 +92,22 @@ static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long address) | |||
| 91 | static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long vmaddr) | 92 | static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long vmaddr) |
| 92 | { | 93 | { |
| 93 | unsigned long *table = crst_table_alloc(mm); | 94 | unsigned long *table = crst_table_alloc(mm); |
| 94 | if (table) | 95 | |
| 95 | crst_table_init(table, _SEGMENT_ENTRY_EMPTY); | 96 | if (!table) |
| 97 | return NULL; | ||
| 98 | crst_table_init(table, _SEGMENT_ENTRY_EMPTY); | ||
| 99 | if (!pgtable_pmd_page_ctor(virt_to_page(table))) { | ||
| 100 | crst_table_free(mm, table); | ||
| 101 | return NULL; | ||
| 102 | } | ||
| 96 | return (pmd_t *) table; | 103 | return (pmd_t *) table; |
| 97 | } | 104 | } |
| 98 | #define pmd_free(mm, pmd) crst_table_free(mm, (unsigned long *) pmd) | 105 | |
| 106 | static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd) | ||
| 107 | { | ||
| 108 | pgtable_pmd_page_dtor(virt_to_page(pmd)); | ||
| 109 | crst_table_free(mm, (unsigned long *) pmd); | ||
| 110 | } | ||
| 99 | 111 | ||
| 100 | static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pud_t *pud) | 112 | static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pud_t *pud) |
| 101 | { | 113 | { |
