@@ -49,6 +49,7 @@ pte_t *huge_pte_alloc(struct mm_struct *mm,
49
49
unsigned long addr , unsigned long sz )
50
50
{
51
51
pgd_t * pgd ;
52
+ p4d_t * p4d ;
52
53
pud_t * pud ;
53
54
pmd_t * pmd ;
54
55
pte_t * pte = NULL ;
@@ -61,7 +62,8 @@ pte_t *huge_pte_alloc(struct mm_struct *mm,
61
62
addr &= HPAGE_MASK ;
62
63
63
64
pgd = pgd_offset (mm , addr );
64
- pud = pud_alloc (mm , pgd , addr );
65
+ p4d = p4d_offset (pgd , addr );
66
+ pud = pud_alloc (mm , p4d , addr );
65
67
if (pud ) {
66
68
pmd = pmd_alloc (mm , pud , addr );
67
69
if (pmd )
@@ -74,6 +76,7 @@ pte_t *huge_pte_offset(struct mm_struct *mm,
74
76
unsigned long addr , unsigned long sz )
75
77
{
76
78
pgd_t * pgd ;
79
+ p4d_t * p4d ;
77
80
pud_t * pud ;
78
81
pmd_t * pmd ;
79
82
pte_t * pte = NULL ;
@@ -82,11 +85,14 @@ pte_t *huge_pte_offset(struct mm_struct *mm,
82
85
83
86
pgd = pgd_offset (mm , addr );
84
87
if (!pgd_none (* pgd )) {
85
- pud = pud_offset (pgd , addr );
86
- if (!pud_none (* pud )) {
87
- pmd = pmd_offset (pud , addr );
88
- if (!pmd_none (* pmd ))
89
- pte = pte_offset_map (pmd , addr );
88
+ p4d = p4d_offset (pgd , addr );
89
+ if (!p4d_none (* p4d )) {
90
+ pud = pud_offset (p4d , addr );
91
+ if (!pud_none (* pud )) {
92
+ pmd = pmd_offset (pud , addr );
93
+ if (!pmd_none (* pmd ))
94
+ pte = pte_offset_map (pmd , addr );
95
+ }
90
96
}
91
97
}
92
98
return pte ;
0 commit comments