hugetlbpage.c (16ba7e312045cd5d32fba0156312b4303f200787) | hugetlbpage.c (ae94da898133947c2d1f005da10838478e4548db) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * IBM System z Huge TLB Page Support for Kernel. 4 * 5 * Copyright IBM Corp. 2007,2020 6 * Author(s): Gerald Schaefer <gerald.schaefer@de.ibm.com> 7 */ 8 --- 145 unchanged lines hidden (view full) --- 154{ 155 unsigned long rste; 156 157 rste = __pte_to_rste(pte); 158 if (!MACHINE_HAS_NX) 159 rste &= ~_SEGMENT_ENTRY_NOEXEC; 160 161 /* Set correct table type for 2G hugepages */ | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * IBM System z Huge TLB Page Support for Kernel. 4 * 5 * Copyright IBM Corp. 2007,2020 6 * Author(s): Gerald Schaefer <gerald.schaefer@de.ibm.com> 7 */ 8 --- 145 unchanged lines hidden (view full) --- 154{ 155 unsigned long rste; 156 157 rste = __pte_to_rste(pte); 158 if (!MACHINE_HAS_NX) 159 rste &= ~_SEGMENT_ENTRY_NOEXEC; 160 161 /* Set correct table type for 2G hugepages */ |
162 if ((pte_val(*ptep) & _REGION_ENTRY_TYPE_MASK) == _REGION_ENTRY_TYPE_R3) 163 rste |= _REGION_ENTRY_TYPE_R3 | _REGION3_ENTRY_LARGE; 164 else | 162 if ((pte_val(*ptep) & _REGION_ENTRY_TYPE_MASK) == _REGION_ENTRY_TYPE_R3) { 163 if (likely(pte_present(pte))) 164 rste |= _REGION3_ENTRY_LARGE; 165 rste |= _REGION_ENTRY_TYPE_R3; 166 } else if (likely(pte_present(pte))) |
165 rste |= _SEGMENT_ENTRY_LARGE; | 167 rste |= _SEGMENT_ENTRY_LARGE; |
168 |
|
166 clear_huge_pte_skeys(mm, rste); 167 pte_val(*ptep) = rste; 168} 169 170pte_t huge_ptep_get(pte_t *ptep) 171{ 172 return __rste_to_pte(pte_val(*ptep)); 173} --- 72 unchanged lines hidden (view full) --- 246 pud_t *pud, int flags) 247{ 248 if (flags & FOLL_GET) 249 return NULL; 250 251 return pud_page(*pud) + ((address & ~PUD_MASK) >> PAGE_SHIFT); 252} 253 | 169 clear_huge_pte_skeys(mm, rste); 170 pte_val(*ptep) = rste; 171} 172 173pte_t huge_ptep_get(pte_t *ptep) 174{ 175 return __rste_to_pte(pte_val(*ptep)); 176} --- 72 unchanged lines hidden (view full) --- 249 pud_t *pud, int flags) 250{ 251 if (flags & FOLL_GET) 252 return NULL; 253 254 return pud_page(*pud) + ((address & ~PUD_MASK) >> PAGE_SHIFT); 255} 256 |
257bool __init arch_hugetlb_valid_size(unsigned long size) 258{ 259 if (MACHINE_HAS_EDAT1 && size == PMD_SIZE) 260 return true; 261 else if (MACHINE_HAS_EDAT2 && size == PUD_SIZE) 262 return true; 263 else 264 return false; 265} 266 |
|
254static __init int setup_hugepagesz(char *opt) 255{ 256 unsigned long size; 257 char *string = opt; 258 259 size = memparse(opt, &opt); | 267static __init int setup_hugepagesz(char *opt) 268{ 269 unsigned long size; 270 char *string = opt; 271 272 size = memparse(opt, &opt); |
260 if (MACHINE_HAS_EDAT1 && size == PMD_SIZE) { 261 hugetlb_add_hstate(PMD_SHIFT - PAGE_SHIFT); 262 } else if (MACHINE_HAS_EDAT2 && size == PUD_SIZE) { 263 hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT); | 273 if (arch_hugetlb_valid_size(size)) { 274 hugetlb_add_hstate(ilog2(size) - PAGE_SHIFT); |
264 } else { 265 hugetlb_bad_size(); 266 pr_err("hugepagesz= specifies an unsupported page size %s\n", 267 string); 268 return 0; 269 } 270 return 1; 271} --- 89 unchanged lines hidden --- | 275 } else { 276 hugetlb_bad_size(); 277 pr_err("hugepagesz= specifies an unsupported page size %s\n", 278 string); 279 return 0; 280 } 281 return 1; 282} --- 89 unchanged lines hidden --- |