hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/arch/s390/mm/hugetlbpage.c
....@@ -189,7 +189,7 @@
189189 return pte;
190190 }
191191
192
-pte_t *huge_pte_alloc(struct mm_struct *mm,
192
+pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
193193 unsigned long addr, unsigned long sz)
194194 {
195195 pgd_t *pgdp;
....@@ -254,25 +254,15 @@
254254 return pud_page(*pud) + ((address & ~PUD_MASK) >> PAGE_SHIFT);
255255 }
256256
257
-static __init int setup_hugepagesz(char *opt)
257
+bool __init arch_hugetlb_valid_size(unsigned long size)
258258 {
259
- unsigned long size;
260
- char *string = opt;
261
-
262
- size = memparse(opt, &opt);
263
- if (MACHINE_HAS_EDAT1 && size == PMD_SIZE) {
264
- hugetlb_add_hstate(PMD_SHIFT - PAGE_SHIFT);
265
- } else if (MACHINE_HAS_EDAT2 && size == PUD_SIZE) {
266
- hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT);
267
- } else {
268
- hugetlb_bad_size();
269
- pr_err("hugepagesz= specifies an unsupported page size %s\n",
270
- string);
271
- return 0;
272
- }
273
- return 1;
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;
274265 }
275
-__setup("hugepagesz=", setup_hugepagesz);
276266
277267 static unsigned long hugetlb_get_unmapped_area_bottomup(struct file *file,
278268 unsigned long addr, unsigned long len,
....@@ -329,7 +319,6 @@
329319 struct hstate *h = hstate_file(file);
330320 struct mm_struct *mm = current->mm;
331321 struct vm_area_struct *vma;
332
- int rc;
333322
334323 if (len & ~huge_page_mask(h))
335324 return -EINVAL;
....@@ -356,15 +345,9 @@
356345 else
357346 addr = hugetlb_get_unmapped_area_topdown(file, addr, len,
358347 pgoff, flags);
359
- if (addr & ~PAGE_MASK)
348
+ if (offset_in_page(addr))
360349 return addr;
361350
362351 check_asce_limit:
363
- if (addr + len > current->mm->context.asce_limit &&
364
- addr + len <= TASK_SIZE) {
365
- rc = crst_table_upgrade(mm, addr + len);
366
- if (rc)
367
- return (unsigned long) rc;
368
- }
369
- return addr;
352
+ return check_asce_limit(mm, addr, len);
370353 }