hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/arch/m68k/include/asm/mcf_pgalloc.h
....@@ -12,8 +12,7 @@
1212
1313 extern const char bad_pmd_string[];
1414
15
-extern inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
16
- unsigned long address)
15
+extern inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
1716 {
1817 unsigned long page = __get_free_page(GFP_DMA);
1918
....@@ -29,55 +28,44 @@
2928 return (pmd_t *) pgd;
3029 }
3130
32
-#define pmd_alloc_one_fast(mm, address) ({ BUG(); ((pmd_t *)1); })
33
-#define pmd_alloc_one(mm, address) ({ BUG(); ((pmd_t *)2); })
31
+#define pmd_populate(mm, pmd, pte) (pmd_val(*pmd) = (unsigned long)(pte))
3432
35
-#define pte_alloc_one_fast(mm, addr) pte_alloc_one(mm, addr)
33
+#define pmd_populate_kernel pmd_populate
3634
37
-#define pmd_populate(mm, pmd, page) (pmd_val(*pmd) = \
38
- (unsigned long)(page_address(page)))
35
+#define pmd_pgtable(pmd) pfn_to_virt(pmd_val(pmd) >> PAGE_SHIFT)
3936
40
-#define pmd_populate_kernel(mm, pmd, pte) (pmd_val(*pmd) = (unsigned long)(pte))
41
-
42
-#define pmd_pgtable(pmd) pmd_page(pmd)
43
-
44
-static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t page,
37
+static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t pgtable,
4538 unsigned long address)
4639 {
47
- pgtable_page_dtor(page);
40
+ struct page *page = virt_to_page(pgtable);
41
+
42
+ pgtable_pte_page_dtor(page);
4843 __free_page(page);
4944 }
5045
51
-#define __pmd_free_tlb(tlb, pmd, address) do { } while (0)
52
-
53
-static inline struct page *pte_alloc_one(struct mm_struct *mm,
54
- unsigned long address)
46
+static inline pgtable_t pte_alloc_one(struct mm_struct *mm)
5547 {
5648 struct page *page = alloc_pages(GFP_DMA, 0);
5749 pte_t *pte;
5850
5951 if (!page)
6052 return NULL;
61
- if (!pgtable_page_ctor(page)) {
53
+ if (!pgtable_pte_page_ctor(page)) {
6254 __free_page(page);
6355 return NULL;
6456 }
6557
66
- pte = kmap(page);
67
- if (pte) {
68
- clear_page(pte);
69
- __flush_page_to_ram(pte);
70
- flush_tlb_kernel_page(pte);
71
- nocache_page(pte);
72
- }
73
- kunmap(page);
58
+ pte = page_address(page);
59
+ clear_page(pte);
7460
75
- return page;
61
+ return pte;
7662 }
7763
78
-static inline void pte_free(struct mm_struct *mm, struct page *page)
64
+static inline void pte_free(struct mm_struct *mm, pgtable_t pgtable)
7965 {
80
- pgtable_page_dtor(page);
66
+ struct page *page = virt_to_page(pgtable);
67
+
68
+ pgtable_pte_page_dtor(page);
8169 __free_page(page);
8270 }
8371
....@@ -99,11 +87,9 @@
9987 new_pgd = (pgd_t *)__get_free_page(GFP_DMA | __GFP_NOWARN);
10088 if (!new_pgd)
10189 return NULL;
102
- memcpy(new_pgd, swapper_pg_dir, PAGE_SIZE);
90
+ memcpy(new_pgd, swapper_pg_dir, PTRS_PER_PGD * sizeof(pgd_t));
10391 memset(new_pgd, 0, PAGE_OFFSET >> PGDIR_SHIFT);
10492 return new_pgd;
10593 }
106
-
107
-#define pgd_populate(mm, pmd, pte) BUG()
10894
10995 #endif /* M68K_MCF_PGALLOC_H */