--- v6
+++ v7
@@ -1,44 +1,64 @@
-Converts pmd_pgtable_page() to pmd_ptdesc() and all its callers. This
-removes some direct accesses to struct page, working towards splitting
-out struct ptdesc from struct page.
+This removes some direct accesses to struct page, working towards
+splitting out struct ptdesc from struct page.
Signed-off-by: Vishal Moola (Oracle) <vishal.moola@gmail.com>
Acked-by: Mike Rapoport (IBM) <rppt@kernel.org>
---
- include/linux/mm.h | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
+ include/linux/mm.h | 6 +++---
+ mm/memory.c | 4 ++--
+ 2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/include/linux/mm.h b/include/linux/mm.h
-index 14d95d494958..1511faf0263c 100644
+index bf552a106e4a..b3fce0bfe201 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
-@@ -2915,15 +2915,15 @@ pte_t *pte_offset_map_nolock(struct mm_struct *mm, pmd_t *pmd,
+@@ -2841,7 +2841,7 @@ static inline void pagetable_free(struct ptdesc *pt)
+ #if USE_SPLIT_PTE_PTLOCKS
+ #if ALLOC_SPLIT_PTLOCKS
+ void __init ptlock_cache_init(void);
+-extern bool ptlock_alloc(struct page *page);
++bool ptlock_alloc(struct ptdesc *ptdesc);
+ extern void ptlock_free(struct page *page);
- #if USE_SPLIT_PMD_PTLOCKS
-
--static inline struct page *pmd_pgtable_page(pmd_t *pmd)
-+static inline struct ptdesc *pmd_ptdesc(pmd_t *pmd)
+ static inline spinlock_t *ptlock_ptr(struct page *page)
+@@ -2853,7 +2853,7 @@ static inline void ptlock_cache_init(void)
{
- unsigned long mask = ~(PTRS_PER_PMD * sizeof(pmd_t) - 1);
-- return virt_to_page((void *)((unsigned long) pmd & mask));
-+ return virt_to_ptdesc((void *)((unsigned long) pmd & mask));
}
- static inline spinlock_t *pmd_lockptr(struct mm_struct *mm, pmd_t *pmd)
+-static inline bool ptlock_alloc(struct page *page)
++static inline bool ptlock_alloc(struct ptdesc *ptdesc)
{
-- return ptlock_ptr(pmd_pgtable_page(pmd));
-+ return ptlock_ptr(ptdesc_page(pmd_ptdesc(pmd)));
+ return true;
+ }
+@@ -2883,7 +2883,7 @@ static inline bool ptlock_init(struct page *page)
+ * slab code uses page->slab_cache, which share storage with page->ptl.
+ */
+ VM_BUG_ON_PAGE(*(unsigned long *)&page->ptl, page);
+- if (!ptlock_alloc(page))
++ if (!ptlock_alloc(page_ptdesc(page)))
+ return false;
+ spin_lock_init(ptlock_ptr(page));
+ return true;
+diff --git a/mm/memory.c b/mm/memory.c
+index 2130bad76eb1..4fee273595e2 100644
+--- a/mm/memory.c
++++ b/mm/memory.c
+@@ -6231,14 +6231,14 @@ void __init ptlock_cache_init(void)
+ SLAB_PANIC, NULL);
}
- static inline bool pmd_ptlock_init(struct page *page)
-@@ -2942,7 +2942,7 @@ static inline void pmd_ptlock_free(struct page *page)
- ptlock_free(page);
+-bool ptlock_alloc(struct page *page)
++bool ptlock_alloc(struct ptdesc *ptdesc)
+ {
+ spinlock_t *ptl;
+
+ ptl = kmem_cache_alloc(page_ptl_cachep, GFP_KERNEL);
+ if (!ptl)
+ return false;
+- page->ptl = ptl;
++ ptdesc->ptl = ptl;
+ return true;
}
-
--#define pmd_huge_pte(mm, pmd) (pmd_pgtable_page(pmd)->pmd_huge_pte)
-+#define pmd_huge_pte(mm, pmd) (pmd_ptdesc(pmd)->pmd_huge_pte)
-
- #else
--
2.40.1