* [PATCH] mm: Mark create_huge_pmd() inline to prevent build failure @ 2017-07-12 6:57 Geert Uytterhoeven 2017-07-12 7:22 ` Arnd Bergmann 2017-07-13 0:29 ` Dan Williams 0 siblings, 2 replies; 8+ messages in thread From: Geert Uytterhoeven @ 2017-07-12 6:57 UTC (permalink / raw) To: Dan Williams, Andrew Morton Cc: Arnd Bergmann, linux-mm, linux-kernel, Geert Uytterhoeven With gcc 4.1.2: mm/memory.o: In function `create_huge_pmd': memory.c:(.text+0x93e): undefined reference to `do_huge_pmd_anonymous_page' Converting transparent_hugepage_enabled() from a macro to a static inline function reduced the ability of the compiler to remove unused code. Fix this by marking create_huge_pmd() inline. Fixes: 16981d763501c0e0 ("mm: improve readability of transparent_hugepage_enabled()") Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> --- Interestingly, create_huge_pmd() is emitted in the assembler output, but never called. --- mm/memory.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/memory.c b/mm/memory.c index cbb57194687e393a..0e517be91a89e162 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -3591,7 +3591,7 @@ static int do_numa_page(struct vm_fault *vmf) return 0; } -static int create_huge_pmd(struct vm_fault *vmf) +static inline int create_huge_pmd(struct vm_fault *vmf) { if (vma_is_anonymous(vmf->vma)) return do_huge_pmd_anonymous_page(vmf); -- 2.7.4 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] mm: Mark create_huge_pmd() inline to prevent build failure 2017-07-12 6:57 [PATCH] mm: Mark create_huge_pmd() inline to prevent build failure Geert Uytterhoeven @ 2017-07-12 7:22 ` Arnd Bergmann 2017-07-12 7:37 ` Geert Uytterhoeven 2017-07-13 0:29 ` Dan Williams 1 sibling, 1 reply; 8+ messages in thread From: Arnd Bergmann @ 2017-07-12 7:22 UTC (permalink / raw) To: Geert Uytterhoeven Cc: Dan Williams, Andrew Morton, Linux-MM, Linux Kernel Mailing List On Wed, Jul 12, 2017 at 8:57 AM, Geert Uytterhoeven <geert@linux-m68k.org> wrote: > > With gcc 4.1.2: > > mm/memory.o: In function `create_huge_pmd': > memory.c:(.text+0x93e): undefined reference to `do_huge_pmd_anonymous_page' > > Converting transparent_hugepage_enabled() from a macro to a static > inline function reduced the ability of the compiler to remove unused > code. > > Fix this by marking create_huge_pmd() inline. > > Fixes: 16981d763501c0e0 ("mm: improve readability of transparent_hugepage_enabled()") > Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> Acked-by: Arnd Bergmann <arnd@arndb.de> > --- > Interestingly, create_huge_pmd() is emitted in the assembler output, but > never called. I've never seen this before either. I know that early gcc-4 compilers would do this when a function is referenced from an unused function pointer, but not with a compile-time constant evaluation. I guess that transparent_hugepage_enabled is just slightly more complex than it gcc-4.1 can handle here. Arnd -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] mm: Mark create_huge_pmd() inline to prevent build failure 2017-07-12 7:22 ` Arnd Bergmann @ 2017-07-12 7:37 ` Geert Uytterhoeven 2017-07-12 8:00 ` Arnd Bergmann 0 siblings, 1 reply; 8+ messages in thread From: Geert Uytterhoeven @ 2017-07-12 7:37 UTC (permalink / raw) To: Arnd Bergmann Cc: Dan Williams, Andrew Morton, Linux-MM, Linux Kernel Mailing List Hi Arnd, On Wed, Jul 12, 2017 at 9:22 AM, Arnd Bergmann <arnd@arndb.de> wrote: > On Wed, Jul 12, 2017 at 8:57 AM, Geert Uytterhoeven > <geert@linux-m68k.org> wrote: >> With gcc 4.1.2: >> >> mm/memory.o: In function `create_huge_pmd': >> memory.c:(.text+0x93e): undefined reference to `do_huge_pmd_anonymous_page' >> >> Converting transparent_hugepage_enabled() from a macro to a static >> inline function reduced the ability of the compiler to remove unused >> code. >> >> Fix this by marking create_huge_pmd() inline. >> >> Fixes: 16981d763501c0e0 ("mm: improve readability of transparent_hugepage_enabled()") >> Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> > > Acked-by: Arnd Bergmann <arnd@arndb.de> Thanks! >> --- >> Interestingly, create_huge_pmd() is emitted in the assembler output, but >> never called. > > I've never seen this before either. I know that early gcc-4 compilers > would do this > when a function is referenced from an unused function pointer, but not with > a compile-time constant evaluation. I guess that transparent_hugepage_enabled > is just slightly more complex than it gcc-4.1 can handle here. You did mention seeing it with mips-gcc-4.1 in the thread "[RFC] minimum gcc version for kernel: raise to gcc-4.3 or 4.6?", but didn't provide any further details. Finally I started seeing it myself for m68k ;-) Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] mm: Mark create_huge_pmd() inline to prevent build failure 2017-07-12 7:37 ` Geert Uytterhoeven @ 2017-07-12 8:00 ` Arnd Bergmann 0 siblings, 0 replies; 8+ messages in thread From: Arnd Bergmann @ 2017-07-12 8:00 UTC (permalink / raw) To: Geert Uytterhoeven Cc: Dan Williams, Andrew Morton, Linux-MM, Linux Kernel Mailing List On Wed, Jul 12, 2017 at 9:37 AM, Geert Uytterhoeven <geert@linux-m68k.org> wrote: > You did mention seeing it with mips-gcc-4.1 in the thread "[RFC] minimum gcc > version for kernel: raise to gcc-4.3 or 4.6?", but didn't provide any further > details. Finally I started seeing it myself for m68k ;-) Ah right, I misremembered that then. Arnd -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] mm: Mark create_huge_pmd() inline to prevent build failure 2017-07-12 6:57 [PATCH] mm: Mark create_huge_pmd() inline to prevent build failure Geert Uytterhoeven 2017-07-12 7:22 ` Arnd Bergmann @ 2017-07-13 0:29 ` Dan Williams 2017-07-13 4:01 ` Dan Williams 2017-07-13 7:04 ` Geert Uytterhoeven 1 sibling, 2 replies; 8+ messages in thread From: Dan Williams @ 2017-07-13 0:29 UTC (permalink / raw) To: Geert Uytterhoeven; +Cc: Andrew Morton, Arnd Bergmann, Linux MM, linux-kernel On Tue, Jul 11, 2017 at 11:57 PM, Geert Uytterhoeven <geert@linux-m68k.org> wrote: > With gcc 4.1.2: > > mm/memory.o: In function `create_huge_pmd': > memory.c:(.text+0x93e): undefined reference to `do_huge_pmd_anonymous_page' > > Converting transparent_hugepage_enabled() from a macro to a static > inline function reduced the ability of the compiler to remove unused > code. > > Fix this by marking create_huge_pmd() inline. > > Fixes: 16981d763501c0e0 ("mm: improve readability of transparent_hugepage_enabled()") > Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> > --- > Interestingly, create_huge_pmd() is emitted in the assembler output, but > never called. > --- > mm/memory.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/memory.c b/mm/memory.c > index cbb57194687e393a..0e517be91a89e162 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -3591,7 +3591,7 @@ static int do_numa_page(struct vm_fault *vmf) > return 0; > } > > -static int create_huge_pmd(struct vm_fault *vmf) > +static inline int create_huge_pmd(struct vm_fault *vmf) > { This seems fragile, what if the kernel decides to ignore the inline hint? If it must be inlined to avoid compile errors then it should be __always_inline, right? I also wonder if it's enough to just specify __always_inline to transparent_hugepage_enabled(), i.e. in case the compiler is making an uninlined copy of transparent_hugepage_enabled() in mm/memory.c. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] mm: Mark create_huge_pmd() inline to prevent build failure 2017-07-13 0:29 ` Dan Williams @ 2017-07-13 4:01 ` Dan Williams 2017-07-13 7:04 ` Geert Uytterhoeven 1 sibling, 0 replies; 8+ messages in thread From: Dan Williams @ 2017-07-13 4:01 UTC (permalink / raw) To: Geert Uytterhoeven; +Cc: Andrew Morton, Arnd Bergmann, Linux MM, linux-kernel On Wed, Jul 12, 2017 at 5:29 PM, Dan Williams <dan.j.williams@intel.com> wrote: > On Tue, Jul 11, 2017 at 11:57 PM, Geert Uytterhoeven > <geert@linux-m68k.org> wrote: >> With gcc 4.1.2: >> >> mm/memory.o: In function `create_huge_pmd': >> memory.c:(.text+0x93e): undefined reference to `do_huge_pmd_anonymous_page' >> >> Converting transparent_hugepage_enabled() from a macro to a static >> inline function reduced the ability of the compiler to remove unused >> code. >> >> Fix this by marking create_huge_pmd() inline. >> >> Fixes: 16981d763501c0e0 ("mm: improve readability of transparent_hugepage_enabled()") >> Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> >> --- >> Interestingly, create_huge_pmd() is emitted in the assembler output, but >> never called. >> --- >> mm/memory.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/mm/memory.c b/mm/memory.c >> index cbb57194687e393a..0e517be91a89e162 100644 >> --- a/mm/memory.c >> +++ b/mm/memory.c >> @@ -3591,7 +3591,7 @@ static int do_numa_page(struct vm_fault *vmf) >> return 0; >> } >> >> -static int create_huge_pmd(struct vm_fault *vmf) >> +static inline int create_huge_pmd(struct vm_fault *vmf) >> { > > This seems fragile, what if the kernel decides ...of course I meant *compiler* instead of 'kernel' here > to ignore the inline > hint? If it must be inlined to avoid compile errors then it should be > __always_inline, right? > > I also wonder if it's enough to just specify __always_inline to > transparent_hugepage_enabled(), i.e. in case the compiler is making an > uninlined copy of transparent_hugepage_enabled() in mm/memory.c. > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] mm: Mark create_huge_pmd() inline to prevent build failure 2017-07-13 0:29 ` Dan Williams 2017-07-13 4:01 ` Dan Williams @ 2017-07-13 7:04 ` Geert Uytterhoeven 2017-07-13 7:49 ` Dan Williams 1 sibling, 1 reply; 8+ messages in thread From: Geert Uytterhoeven @ 2017-07-13 7:04 UTC (permalink / raw) To: Dan Williams; +Cc: Andrew Morton, Arnd Bergmann, Linux MM, linux-kernel Hi Dan, On Thu, Jul 13, 2017 at 2:29 AM, Dan Williams <dan.j.williams@intel.com> wrote: > On Tue, Jul 11, 2017 at 11:57 PM, Geert Uytterhoeven > <geert@linux-m68k.org> wrote: >> With gcc 4.1.2: >> >> mm/memory.o: In function `create_huge_pmd': >> memory.c:(.text+0x93e): undefined reference to `do_huge_pmd_anonymous_page' >> >> Converting transparent_hugepage_enabled() from a macro to a static >> inline function reduced the ability of the compiler to remove unused >> code. >> >> Fix this by marking create_huge_pmd() inline. >> >> Fixes: 16981d763501c0e0 ("mm: improve readability of transparent_hugepage_enabled()") >> Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> >> --- >> Interestingly, create_huge_pmd() is emitted in the assembler output, but >> never called. >> --- >> mm/memory.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/mm/memory.c b/mm/memory.c >> index cbb57194687e393a..0e517be91a89e162 100644 >> --- a/mm/memory.c >> +++ b/mm/memory.c >> @@ -3591,7 +3591,7 @@ static int do_numa_page(struct vm_fault *vmf) >> return 0; >> } >> >> -static int create_huge_pmd(struct vm_fault *vmf) >> +static inline int create_huge_pmd(struct vm_fault *vmf) >> { > > This seems fragile, what if the kernel decides to ignore the inline > hint? If it must be inlined to avoid compile errors then it should be > __always_inline, right? With gcc-4, "inline" is already #define'd to #define inline inline __attribute__((always_inline,unused)) notrace > I also wonder if it's enough to just specify __always_inline to > transparent_hugepage_enabled(), i.e. in case the compiler is making an > uninlined copy of transparent_hugepage_enabled() in mm/memory.c. Hence the answer is no. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] mm: Mark create_huge_pmd() inline to prevent build failure 2017-07-13 7:04 ` Geert Uytterhoeven @ 2017-07-13 7:49 ` Dan Williams 0 siblings, 0 replies; 8+ messages in thread From: Dan Williams @ 2017-07-13 7:49 UTC (permalink / raw) To: Geert Uytterhoeven; +Cc: Andrew Morton, Arnd Bergmann, Linux MM, linux-kernel On Thu, Jul 13, 2017 at 12:04 AM, Geert Uytterhoeven <geert@linux-m68k.org> wrote: > Hi Dan, > > On Thu, Jul 13, 2017 at 2:29 AM, Dan Williams <dan.j.williams@intel.com> wrote: >> On Tue, Jul 11, 2017 at 11:57 PM, Geert Uytterhoeven >> <geert@linux-m68k.org> wrote: >>> With gcc 4.1.2: >>> >>> mm/memory.o: In function `create_huge_pmd': >>> memory.c:(.text+0x93e): undefined reference to `do_huge_pmd_anonymous_page' >>> >>> Converting transparent_hugepage_enabled() from a macro to a static >>> inline function reduced the ability of the compiler to remove unused >>> code. >>> >>> Fix this by marking create_huge_pmd() inline. >>> >>> Fixes: 16981d763501c0e0 ("mm: improve readability of transparent_hugepage_enabled()") >>> Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> >>> --- >>> Interestingly, create_huge_pmd() is emitted in the assembler output, but >>> never called. >>> --- >>> mm/memory.c | 2 +- >>> 1 file changed, 1 insertion(+), 1 deletion(-) >>> >>> diff --git a/mm/memory.c b/mm/memory.c >>> index cbb57194687e393a..0e517be91a89e162 100644 >>> --- a/mm/memory.c >>> +++ b/mm/memory.c >>> @@ -3591,7 +3591,7 @@ static int do_numa_page(struct vm_fault *vmf) >>> return 0; >>> } >>> >>> -static int create_huge_pmd(struct vm_fault *vmf) >>> +static inline int create_huge_pmd(struct vm_fault *vmf) >>> { >> >> This seems fragile, what if the kernel decides to ignore the inline >> hint? If it must be inlined to avoid compile errors then it should be >> __always_inline, right? > > With gcc-4, "inline" is already #define'd to > #define inline inline __attribute__((always_inline,unused)) notrace Ah, ok. Acked-by: Dan Williams <dan.j.williams@intel.com> -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2017-07-13 7:50 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2017-07-12 6:57 [PATCH] mm: Mark create_huge_pmd() inline to prevent build failure Geert Uytterhoeven 2017-07-12 7:22 ` Arnd Bergmann 2017-07-12 7:37 ` Geert Uytterhoeven 2017-07-12 8:00 ` Arnd Bergmann 2017-07-13 0:29 ` Dan Williams 2017-07-13 4:01 ` Dan Williams 2017-07-13 7:04 ` Geert Uytterhoeven 2017-07-13 7:49 ` Dan Williams
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).