| .. | .. | 
|---|
| 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, taddr); | 
|---|
|  | 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 |  | 
|---|