forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-09-20 cf4ce59b3b70238352c7f1729f0f7223214828ad
kernel/arch/mips/mm/pgtable-32.c
....@@ -7,11 +7,11 @@
77 */
88 #include <linux/init.h>
99 #include <linux/mm.h>
10
-#include <linux/bootmem.h>
10
+#include <linux/memblock.h>
1111 #include <linux/highmem.h>
1212 #include <asm/fixmap.h>
13
-#include <asm/pgtable.h>
1413 #include <asm/pgalloc.h>
14
+#include <asm/tlbflush.h>
1515
1616 void pgd_init(unsigned long page)
1717 {
....@@ -30,12 +30,32 @@
3030 }
3131 }
3232
33
+#if defined(CONFIG_TRANSPARENT_HUGEPAGE)
34
+pmd_t mk_pmd(struct page *page, pgprot_t prot)
35
+{
36
+ pmd_t pmd;
37
+
38
+ pmd_val(pmd) = (page_to_pfn(page) << _PFN_SHIFT) | pgprot_val(prot);
39
+
40
+ return pmd;
41
+}
42
+
43
+
44
+void set_pmd_at(struct mm_struct *mm, unsigned long addr,
45
+ pmd_t *pmdp, pmd_t pmd)
46
+{
47
+ *pmdp = pmd;
48
+ flush_tlb_all();
49
+}
50
+#endif /* defined(CONFIG_TRANSPARENT_HUGEPAGE) */
51
+
3352 void __init pagetable_init(void)
3453 {
3554 unsigned long vaddr;
3655 pgd_t *pgd_base;
3756 #ifdef CONFIG_HIGHMEM
3857 pgd_t *pgd;
58
+ p4d_t *p4d;
3959 pud_t *pud;
4060 pmd_t *pmd;
4161 pte_t *pte;
....@@ -61,8 +81,9 @@
6181 vaddr = PKMAP_BASE;
6282 fixrange_init(vaddr & PMD_MASK, vaddr + PAGE_SIZE*LAST_PKMAP, pgd_base);
6383
64
- pgd = swapper_pg_dir + __pgd_offset(vaddr);
65
- pud = pud_offset(pgd, vaddr);
84
+ pgd = swapper_pg_dir + pgd_index(vaddr);
85
+ p4d = p4d_offset(pgd, vaddr);
86
+ pud = pud_offset(p4d, vaddr);
6687 pmd = pmd_offset(pud, vaddr);
6788 pte = pte_offset_kernel(pmd, vaddr);
6889 pkmap_page_table = pte;