Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932256AbcCIML5 (ORCPT ); Wed, 9 Mar 2016 07:11:57 -0500 Received: from e23smtp07.au.ibm.com ([202.81.31.140]:51436 "EHLO e23smtp07.au.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753475AbcCIMLw (ORCPT ); Wed, 9 Mar 2016 07:11:52 -0500 X-IBM-Helo: d23dlp03.au.ibm.com X-IBM-MailFrom: khandual@linux.vnet.ibm.com X-IBM-RcptTo: linux-kernel@vger.kernel.org From: Anshuman Khandual To: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org Cc: hughd@google.com, kirill@shutemov.name, n-horiguchi@ah.jp.nec.com, akpm@linux-foundation.org, mgorman@techsingularity.net, aneesh.kumar@linux.vnet.ibm.com, mpe@ellerman.id.au Subject: [RFC 2/9] mm/hugetlb: Add follow_huge_pgd function Date: Wed, 9 Mar 2016 17:40:43 +0530 Message-Id: <1457525450-4262-2-git-send-email-khandual@linux.vnet.ibm.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1457525450-4262-1-git-send-email-khandual@linux.vnet.ibm.com> References: <1457525450-4262-1-git-send-email-khandual@linux.vnet.ibm.com> X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16030912-0025-0000-0000-00000323BC1C Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1834 Lines: 54 This just adds 'follow_huge_pgd' function which is will be used later in this series to make 'follow_page_mask' function aware of PGD based huge page implementation. Signed-off-by: Anshuman Khandual --- include/linux/hugetlb.h | 3 +++ mm/hugetlb.c | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index 7d953c2..71832e1 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h @@ -115,6 +115,8 @@ struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address, pmd_t *pmd, int flags); struct page *follow_huge_pud(struct mm_struct *mm, unsigned long address, pud_t *pud, int flags); +struct page *follow_huge_pgd(struct mm_struct *mm, unsigned long address, + pgd_t *pgd, int flags); int pmd_huge(pmd_t pmd); int pud_huge(pud_t pmd); unsigned long hugetlb_change_protection(struct vm_area_struct *vma, @@ -143,6 +145,7 @@ static inline void hugetlb_show_meminfo(void) } #define follow_huge_pmd(mm, addr, pmd, flags) NULL #define follow_huge_pud(mm, addr, pud, flags) NULL +#define follow_huge_pgd(mm, addr, pgd, flags) NULL #define prepare_hugepage_range(file, addr, len) (-EINVAL) #define pmd_huge(x) 0 #define pud_huge(x) 0 diff --git a/mm/hugetlb.c b/mm/hugetlb.c index a478b7b..844c18f 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -4353,6 +4353,16 @@ follow_huge_pud(struct mm_struct *mm, unsigned long address, return pte_page(*(pte_t *)pud) + ((address & ~PUD_MASK) >> PAGE_SHIFT); } +struct page * __weak +follow_huge_pgd(struct mm_struct *mm, unsigned long address, + pgd_t *pgd, int flags) +{ + if (flags & FOLL_GET) + return NULL; + + return pte_page(*(pte_t *)pgd) + ((address & ~PGDIR_MASK) >> PAGE_SHIFT); +} + #ifdef CONFIG_MEMORY_FAILURE /* -- 2.1.0