| .. | .. |
|---|
| 18 | 18 | #include <linux/sysctl.h> |
|---|
| 19 | 19 | #include <linux/log2.h> |
|---|
| 20 | 20 | #include <asm/mman.h> |
|---|
| 21 | | -#include <asm/pgalloc.h> |
|---|
| 22 | 21 | #include <asm/tlb.h> |
|---|
| 23 | 22 | #include <asm/tlbflush.h> |
|---|
| 24 | 23 | |
|---|
| .. | .. |
|---|
| 26 | 25 | EXPORT_SYMBOL(hpage_shift); |
|---|
| 27 | 26 | |
|---|
| 28 | 27 | pte_t * |
|---|
| 29 | | -huge_pte_alloc(struct mm_struct *mm, unsigned long addr, unsigned long sz) |
|---|
| 28 | +huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma, |
|---|
| 29 | + unsigned long addr, unsigned long sz) |
|---|
| 30 | 30 | { |
|---|
| 31 | 31 | unsigned long taddr = htlbpage_to_page(addr); |
|---|
| 32 | 32 | pgd_t *pgd; |
|---|
| 33 | + p4d_t *p4d; |
|---|
| 33 | 34 | pud_t *pud; |
|---|
| 34 | 35 | pmd_t *pmd; |
|---|
| 35 | 36 | pte_t *pte = NULL; |
|---|
| 36 | 37 | |
|---|
| 37 | 38 | pgd = pgd_offset(mm, taddr); |
|---|
| 38 | | - pud = pud_alloc(mm, pgd, taddr); |
|---|
| 39 | + p4d = p4d_offset(pgd, taddr); |
|---|
| 40 | + pud = pud_alloc(mm, p4d, taddr); |
|---|
| 39 | 41 | if (pud) { |
|---|
| 40 | 42 | pmd = pmd_alloc(mm, pud, taddr); |
|---|
| 41 | 43 | if (pmd) |
|---|
| .. | .. |
|---|
| 49 | 51 | { |
|---|
| 50 | 52 | unsigned long taddr = htlbpage_to_page(addr); |
|---|
| 51 | 53 | pgd_t *pgd; |
|---|
| 54 | + p4d_t *p4d; |
|---|
| 52 | 55 | pud_t *pud; |
|---|
| 53 | 56 | pmd_t *pmd; |
|---|
| 54 | 57 | pte_t *pte = NULL; |
|---|
| 55 | 58 | |
|---|
| 56 | 59 | pgd = pgd_offset(mm, taddr); |
|---|
| 57 | 60 | if (pgd_present(*pgd)) { |
|---|
| 58 | | - pud = pud_offset(pgd, taddr); |
|---|
| 59 | | - if (pud_present(*pud)) { |
|---|
| 60 | | - pmd = pmd_offset(pud, taddr); |
|---|
| 61 | | - if (pmd_present(*pmd)) |
|---|
| 62 | | - pte = pte_offset_map(pmd, taddr); |
|---|
| 61 | + p4d = p4d_offset(pgd, addr); |
|---|
| 62 | + if (p4d_present(*p4d)) { |
|---|
| 63 | + pud = pud_offset(p4d, taddr); |
|---|
| 64 | + if (pud_present(*pud)) { |
|---|
| 65 | + pmd = pmd_offset(pud, taddr); |
|---|
| 66 | + if (pmd_present(*pmd)) |
|---|
| 67 | + pte = pte_offset_map(pmd, taddr); |
|---|
| 68 | + } |
|---|
| 63 | 69 | } |
|---|
| 64 | 70 | } |
|---|
| 65 | 71 | |
|---|