forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-09-20 cf4ce59b3b70238352c7f1729f0f7223214828ad
kernel/arch/mips/mm/hugetlbpage.c
....@@ -21,15 +21,17 @@
2121 #include <asm/tlb.h>
2222 #include <asm/tlbflush.h>
2323
24
-pte_t *huge_pte_alloc(struct mm_struct *mm, unsigned long addr,
25
- unsigned long sz)
24
+pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
25
+ unsigned long addr, unsigned long sz)
2626 {
2727 pgd_t *pgd;
28
+ p4d_t *p4d;
2829 pud_t *pud;
2930 pte_t *pte = NULL;
3031
3132 pgd = pgd_offset(mm, addr);
32
- pud = pud_alloc(mm, pgd, addr);
33
+ p4d = p4d_alloc(mm, pgd, addr);
34
+ pud = pud_alloc(mm, p4d, addr);
3335 if (pud)
3436 pte = (pte_t *)pmd_alloc(mm, pud, addr);
3537
....@@ -40,14 +42,18 @@
4042 unsigned long sz)
4143 {
4244 pgd_t *pgd;
45
+ p4d_t *p4d;
4346 pud_t *pud;
4447 pmd_t *pmd = NULL;
4548
4649 pgd = pgd_offset(mm, addr);
4750 if (pgd_present(*pgd)) {
48
- pud = pud_offset(pgd, addr);
49
- if (pud_present(*pud))
50
- pmd = pmd_offset(pud, addr);
51
+ p4d = p4d_offset(pgd, addr);
52
+ if (p4d_present(*p4d)) {
53
+ pud = pud_offset(p4d, addr);
54
+ if (pud_present(*pud))
55
+ pmd = pmd_offset(pud, addr);
56
+ }
5157 }
5258 return (pte_t *) pmd;
5359 }