.. | .. |
---|
189 | 189 | return pte; |
---|
190 | 190 | } |
---|
191 | 191 | |
---|
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, |
---|
193 | 193 | unsigned long addr, unsigned long sz) |
---|
194 | 194 | { |
---|
195 | 195 | pgd_t *pgdp; |
---|
.. | .. |
---|
254 | 254 | return pud_page(*pud) + ((address & ~PUD_MASK) >> PAGE_SHIFT); |
---|
255 | 255 | } |
---|
256 | 256 | |
---|
257 | | -static __init int setup_hugepagesz(char *opt) |
---|
| 257 | +bool __init arch_hugetlb_valid_size(unsigned long size) |
---|
258 | 258 | { |
---|
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; |
---|
274 | 265 | } |
---|
275 | | -__setup("hugepagesz=", setup_hugepagesz); |
---|
276 | 266 | |
---|
277 | 267 | static unsigned long hugetlb_get_unmapped_area_bottomup(struct file *file, |
---|
278 | 268 | unsigned long addr, unsigned long len, |
---|
.. | .. |
---|
329 | 319 | struct hstate *h = hstate_file(file); |
---|
330 | 320 | struct mm_struct *mm = current->mm; |
---|
331 | 321 | struct vm_area_struct *vma; |
---|
332 | | - int rc; |
---|
333 | 322 | |
---|
334 | 323 | if (len & ~huge_page_mask(h)) |
---|
335 | 324 | return -EINVAL; |
---|
.. | .. |
---|
356 | 345 | else |
---|
357 | 346 | addr = hugetlb_get_unmapped_area_topdown(file, addr, len, |
---|
358 | 347 | pgoff, flags); |
---|
359 | | - if (addr & ~PAGE_MASK) |
---|
| 348 | + if (offset_in_page(addr)) |
---|
360 | 349 | return addr; |
---|
361 | 350 | |
---|
362 | 351 | 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); |
---|
370 | 353 | } |
---|