Hi Jordan, Thanks for reporting this. On 26/02/2018 18:16, Daniel Jordan wrote: > Hi Laurent, > > This series doesn't build for me[*] when CONFIG_TRANSPARENT_HUGEPAGE is unset. > > The problem seems to be that the BUILD_BUG() version of pmd_same is called in > pte_map_lock: > > On 02/16/2018 10:25 AM, Laurent Dufour wrote: >> +static bool pte_map_lock(struct vm_fault *vmf) >> +{ > ...snip... >> + if (!pmd_same(pmdval, vmf->orig_pmd)) >> + goto out; > > Since SPF can now call pmd_same without THP, maybe the way to fix it is just > > diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h > index 2cfa3075d148..e130692db24a 100644 > --- a/include/asm-generic/pgtable.h > +++ b/include/asm-generic/pgtable.h > @@ -375,7 +375,8 @@ static inline int pte_unused(pte_t pte) > #endif > > #ifndef __HAVE_ARCH_PMD_SAME > -#ifdef CONFIG_TRANSPARENT_HUGEPAGE > +#if defined(CONFIG_TRANSPARENT_HUGEPAGE) || \ > + defined(CONFIG_SPECULATIVE_PAGE_FAULT) > static inline int pmd_same(pmd_t pmd_a, pmd_t pmd_b) > { > return pmd_val(pmd_a) == pmd_val(pmd_b); We can't fix that this way because some architectures define their own pmd_same() function (like ppc64), thus forcing the define here will be useless since __HAVE_ARCH_PMD_SAME is set in that case. The right way to fix that is to _not check_ for the PMD value in pte_spinlock() when CONFIG_TRANSPARENT_HUGEPAGE is not set since there is no risk of collapsing operation in our back if THP are disabled. I'll fix that in the next version. Laurent. > ? > > Daniel > > > [*] The errors are: > > In file included from /home/dmjordan/src/linux/include/linux/kernel.h:10:0, > from /home/dmjordan/src/linux/include/linux/list.h:9, > from /home/dmjordan/src/linux/include/linux/smp.h:12, > from /home/dmjordan/src/linux/include/linux/kernel_stat.h:5, > from /home/dmjordan/src/linux/mm/memory.c:41: > In function ‘pmd_same.isra.104’, > inlined from ‘pte_map_lock’ at /home/dmjordan/src/linux/mm/memory.c:2380:7: > /home/dmjordan/src/linux/include/linux/compiler.h:324:38: error: call to > ‘__compiletime_assert_391’ declared with attribute error: BUILD_BUG failed > _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__) > ^ > /home/dmjordan/src/linux/include/linux/compiler.h:304:4: note: in definition of > macro ‘__compiletime_assert’ > prefix ## suffix(); \ > ^~~~~~ > /home/dmjordan/src/linux/include/linux/compiler.h:324:2: note: in expansion of > macro ‘_compiletime_assert’ > _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__) > ^~~~~~~~~~~~~~~~~~~ > /home/dmjordan/src/linux/include/linux/build_bug.h:45:37: note: in expansion of > macro ‘compiletime_assert’ > #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) > ^~~~~~~~~~~~~~~~~~ > /home/dmjordan/src/linux/include/linux/build_bug.h:79:21: note: in expansion of > macro ‘BUILD_BUG_ON_MSG’ > #define BUILD_BUG() BUILD_BUG_ON_MSG(1, "BUILD_BUG failed") > ^~~~~~~~~~~~~~~~ > /home/dmjordan/src/linux/include/asm-generic/pgtable.h:391:2: note: in > expansion of macro ‘BUILD_BUG’ > BUILD_BUG(); > ^~~~~~~~~ > CC block/elevator.o > CC crypto/crypto_wq.o > In function ‘pmd_same.isra.104’, > inlined from ‘pte_spinlock’ at /home/dmjordan/src/linux/mm/memory.c:2326:7, > inlined from ‘handle_pte_fault’ at > /home/dmjordan/src/linux/mm/memory.c:4181:7: > /home/dmjordan/src/linux/include/linux/compiler.h:324:38: error: call to > ‘__compiletime_assert_391’ declared with attribute error: BUILD_BUG failed > _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__) > ^ > /home/dmjordan/src/linux/include/linux/compiler.h:304:4: note: in definition of > macro ‘__compiletime_assert’ > prefix ## suffix(); \ > ^~~~~~ > /home/dmjordan/src/linux/include/linux/compiler.h:324:2: note: in expansion of > macro ‘_compiletime_assert’ > _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__) > ^~~~~~~~~~~~~~~~~~~ > /home/dmjordan/src/linux/include/linux/build_bug.h:45:37: note: in expansion of > macro ‘compiletime_assert’ > #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) > ^~~~~~~~~~~~~~~~~~ > /home/dmjordan/src/linux/include/linux/build_bug.h:79:21: note: in expansion of > macro ‘BUILD_BUG_ON_MSG’ > #define BUILD_BUG() BUILD_BUG_ON_MSG(1, "BUILD_BUG failed") > ^~~~~~~~~~~~~~~~ > /home/dmjordan/src/linux/include/asm-generic/pgtable.h:391:2: note: in > expansion of macro ‘BUILD_BUG’ > BUILD_BUG(); > ^~~~~~~~~ > ... > make[2]: *** [/home/dmjordan/src/linux/scripts/Makefile.build:316: mm/memory.o] > Error 1 > make[1]: *** [/home/dmjordan/src/linux/Makefile:1047: mm] Error 2 > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>