|
Lines 513-519
Link Here
|
| 513 |
vma = find_vma(mm, addr); |
513 |
vma = find_vma(mm, addr); |
| 514 |
if (((TASK_SIZE - len) >= addr) |
514 |
if (((TASK_SIZE - len) >= addr) |
| 515 |
&& (!vma || (addr+len) <= vma->vm_start) |
515 |
&& (!vma || (addr+len) <= vma->vm_start) |
| 516 |
&& !is_hugepage_only_range(addr,len)) |
516 |
&& !is_hugepage_only_range(mm, addr,len)) |
| 517 |
return addr; |
517 |
return addr; |
| 518 |
} |
518 |
} |
| 519 |
start_addr = addr = mm->free_area_cache; |
519 |
start_addr = addr = mm->free_area_cache; |
|
Lines 523-529
Link Here
|
| 523 |
while (TASK_SIZE - len >= addr) { |
523 |
while (TASK_SIZE - len >= addr) { |
| 524 |
BUG_ON(vma && (addr >= vma->vm_end)); |
524 |
BUG_ON(vma && (addr >= vma->vm_end)); |
| 525 |
|
525 |
|
| 526 |
if (touches_hugepage_low_range(addr, len)) { |
526 |
if (touches_hugepage_low_range(mm, addr, len)) { |
| 527 |
addr = ALIGN(addr+1, 1<<SID_SHIFT); |
527 |
addr = ALIGN(addr+1, 1<<SID_SHIFT); |
| 528 |
vma = find_vma(mm, addr); |
528 |
vma = find_vma(mm, addr); |
| 529 |
continue; |
529 |
continue; |
|
Lines 584-590
Link Here
|
| 584 |
vma = find_vma(mm, addr); |
584 |
vma = find_vma(mm, addr); |
| 585 |
if (TASK_SIZE - len >= addr && |
585 |
if (TASK_SIZE - len >= addr && |
| 586 |
(!vma || addr + len <= vma->vm_start) |
586 |
(!vma || addr + len <= vma->vm_start) |
| 587 |
&& !is_hugepage_only_range(addr,len)) |
587 |
&& !is_hugepage_only_range(mm, addr,len)) |
| 588 |
return addr; |
588 |
return addr; |
| 589 |
} |
589 |
} |
| 590 |
|
590 |
|
|
Lines 597-603
Link Here
|
| 597 |
addr = (mm->free_area_cache - len) & PAGE_MASK; |
597 |
addr = (mm->free_area_cache - len) & PAGE_MASK; |
| 598 |
do { |
598 |
do { |
| 599 |
hugepage_recheck: |
599 |
hugepage_recheck: |
| 600 |
if (touches_hugepage_low_range(addr, len)) { |
600 |
if (touches_hugepage_low_range(mm, addr, len)) { |
| 601 |
addr = (addr & ((~0) << SID_SHIFT)) - len; |
601 |
addr = (addr & ((~0) << SID_SHIFT)) - len; |
| 602 |
goto hugepage_recheck; |
602 |
goto hugepage_recheck; |
| 603 |
} else if (touches_hugepage_high_range(addr, len)) { |
603 |
} else if (touches_hugepage_high_range(addr, len)) { |