Message ID | 20180515213931.23885-2-toshi.kani@hpe.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Toshi, Thank you for the patch! Yet something to improve: [auto build test ERROR on arm64/for-next/core] [also build test ERROR on v4.17-rc5 next-20180515] [cannot apply to tip/x86/core] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Toshi-Kani/fix-free-pmd-pte-page-handlings-on-x86/20180516-183317 base: https://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-next/core config: i386-randconfig-x013-201819 (attached as .config) compiler: gcc-7 (Debian 7.3.0-16) 7.3.0 reproduce: # save the attached .config to linux build tree make ARCH=i386 Note: the linux-review/Toshi-Kani/fix-free-pmd-pte-page-handlings-on-x86/20180516-183317 HEAD 93944422fcef9bfadf22e345c1d7a34723cc3203 builds fine. It only hurts bisectibility. All errors (new ones prefixed by >>): >> arch/x86/mm/pgtable.c:757:5: error: conflicting types for 'pud_free_pmd_page' int pud_free_pmd_page(pud_t *pud, unsigned long addr) ^~~~~~~~~~~~~~~~~ In file included from arch/x86/include/asm/pgtable.h:1301:0, from include/linux/memremap.h:8, from include/linux/mm.h:27, from arch/x86/mm/pgtable.c:2: include/asm-generic/pgtable.h:1022:5: note: previous declaration of 'pud_free_pmd_page' was here int pud_free_pmd_page(pud_t *pud); ^~~~~~~~~~~~~~~~~ >> arch/x86/mm/pgtable.c:766:5: error: conflicting types for 'pmd_free_pte_page' int pmd_free_pte_page(pmd_t *pmd, unsigned long addr) ^~~~~~~~~~~~~~~~~ In file included from arch/x86/include/asm/pgtable.h:1301:0, from include/linux/memremap.h:8, from include/linux/mm.h:27, from arch/x86/mm/pgtable.c:2: include/asm-generic/pgtable.h:1023:5: note: previous declaration of 'pmd_free_pte_page' was here int pmd_free_pte_page(pmd_t *pmd); ^~~~~~~~~~~~~~~~~ vim +/pud_free_pmd_page +757 arch/x86/mm/pgtable.c 756 > 757 int pud_free_pmd_page(pud_t *pud, unsigned long addr) 758 { 759 return pud_none(*pud); 760 } 761 762 /* 763 * Disable free page handling on x86-PAE. This assures that ioremap() 764 * does not update sync'd pmd entries. See vmalloc_sync_one(). 765 */ > 766 int pmd_free_pte_page(pmd_t *pmd, unsigned long addr) 767 { 768 return pmd_none(*pmd); 769 } 770 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
On Wed, 2018-05-16 at 19:00 +0800, kbuild test robot wrote: > Hi Toshi, > > Thank you for the patch! Yet something to improve: > > [auto build test ERROR on arm64/for-next/core] > [also build test ERROR on v4.17-rc5 next-20180515] > [cannot apply to tip/x86/core] > [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] > > url: https://github.com/0day-ci/linux/commits/Toshi-Kani/fix-free-pmd-pte-page-handlings-on-x86/20180516-183317 > base: https://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-next/core > config: i386-randconfig-x013-201819 (attached as .config) > compiler: gcc-7 (Debian 7.3.0-16) 7.3.0 > reproduce: > # save the attached .config to linux build tree > make ARCH=i386 > > Note: the linux-review/Toshi-Kani/fix-free-pmd-pte-page-handlings-on-x86/20180516-183317 HEAD 93944422fcef9bfadf22e345c1d7a34723cc3203 builds fine. > It only hurts bisectibility. > > All errors (new ones prefixed by >>): > > > > arch/x86/mm/pgtable.c:757:5: error: conflicting types for 'pud_free_pmd_page' > > int pud_free_pmd_page(pud_t *pud, unsigned long addr) > ^~~~~~~~~~~~~~~~~ Thanks for catching this! Patch reordering caused this. Will fix. -Toshi
diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c index ffc8c13c50e4..08cdd7c13619 100644 --- a/arch/x86/mm/pgtable.c +++ b/arch/x86/mm/pgtable.c @@ -715,6 +715,7 @@ int pmd_clear_huge(pmd_t *pmd) return 0; } +#ifdef CONFIG_X86_64 /** * pud_free_pmd_page - Clear pud entry and free pmd page. * @pud: Pointer to a PUD. @@ -762,4 +763,22 @@ int pmd_free_pte_page(pmd_t *pmd) return 1; } + +#else /* !CONFIG_X86_64 */ + +int pud_free_pmd_page(pud_t *pud, unsigned long addr) +{ + return pud_none(*pud); +} + +/* + * Disable free page handling on x86-PAE. This assures that ioremap() + * does not update sync'd pmd entries. See vmalloc_sync_one(). + */ +int pmd_free_pte_page(pmd_t *pmd, unsigned long addr) +{ + return pmd_none(*pmd); +} + +#endif /* CONFIG_X86_64 */ #endif /* CONFIG_HAVE_ARCH_HUGE_VMAP */
ioremap() supports pmd mappings on x86-PAE. However, kernel's pmd tables are not shared among processes on x86-PAE. Therefore, any update to sync'd pmd entries need re-syncing. Freeing a pte page also leads to a vmalloc fault and hits the BUG_ON in vmalloc_sync_one(). Disable free page handling on x86-PAE. pud_free_pmd_page() and pmd_free_pte_page() simply return 0 if a given pud/pmd entry is present. This assures that ioremap() does not update sync'd pmd entries at the cost of falling back to pte mappings. Fixes: 28ee90fe6048 ("x86/mm: implement free pmd/pte page interfaces") Reported-by: Joerg Roedel <joro@8bytes.org> Signed-off-by: Toshi Kani <toshi.kani@hpe.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Michal Hocko <mhocko@suse.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@redhat.com> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Joerg Roedel <joro@8bytes.org> Cc: <stable@vger.kernel.org> --- arch/x86/mm/pgtable.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)