Message ID | 20151210144708.65b7111eb795ddabbfad1ed3@linux-foundation.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 10.12.2015 23:47, Andrew Morton wrote: > On Thu, 10 Dec 2015 16:55:13 +0000 Mark Brown <broonie@kernel.org> wrote: > >> Today's -next fails to build most arm64 configs with some rather >> spectacular errors below introduced by 02598e94ed5a78 (mm, printk: >> introduce new format string for flags) from Andrew's tree. These in >> turn stem from the fact that we introduce an inclusion of >> linux/tracepoint.h into linux/mmdebug.h which through a chain of nested >> inclusions means that we end up attempting to use definitions from >> headers before they have finished including. > > Thanks. > > Further complexicating the include tree is something we don't need. > I'll try moving the offending declarations into mm/internal.h, see how > that goes. Yeah that works too, thanks. > Including ../mm/internal.h into lib/vsprintf.c is a bit grubby, but I > guess it makes sense - vsprintf is poking about in mm internals, so it > gets to include mm's internal.h. OK. > Vlastimil, the patch is rather bloaty - it adds 1.2k for something > which few people will use. I wonder if it should be conditioned by > CONFIG_DEBUG_VM. Hmm, but one of the benefits is that we get e.g. the gfp flags translated in oom and alloc failure reports that users submit, and CONFIG_DEBUG_VM is not enabled by default. So the conditioning should be based on some option that people explicitly enable to make their kernels smaller knowing it's a tradeoff for functionality/convenience.
diff -puN include/linux/mmdebug.h~mm-printk-introduce-new-format-string-for-flags-fix-2 include/linux/mmdebug.h --- a/include/linux/mmdebug.h~mm-printk-introduce-new-format-string-for-flags-fix-2 +++ a/include/linux/mmdebug.h @@ -2,17 +2,11 @@ #define LINUX_MM_DEBUG_H 1 #include <linux/stringify.h> -#include <linux/types.h> -#include <linux/tracepoint.h> struct page; struct vm_area_struct; struct mm_struct; -extern const struct trace_print_flags pageflag_names[]; -extern const struct trace_print_flags vmaflag_names[]; -extern const struct trace_print_flags gfpflag_names[]; - extern void dump_page(struct page *page, const char *reason); extern void dump_page_badflags(struct page *page, const char *reason, unsigned long badflags); diff -puN lib/vsprintf.c~mm-printk-introduce-new-format-string-for-flags-fix-2 lib/vsprintf.c --- a/lib/vsprintf.c~mm-printk-introduce-new-format-string-for-flags-fix-2 +++ a/lib/vsprintf.c @@ -31,7 +31,8 @@ #include <linux/dcache.h> #include <linux/cred.h> #include <net/addrconf.h> -#include <linux/mmdebug.h> + +#include "../mm/internal.h" /* For the trace_print_flags arrays */ #include <asm/page.h> /* for PAGE_SIZE */ #include <asm/sections.h> /* for dereference_function_descriptor() */ diff -puN mm/debug.c~mm-printk-introduce-new-format-string-for-flags-fix-2 mm/debug.c --- a/mm/debug.c~mm-printk-introduce-new-format-string-for-flags-fix-2 +++ a/mm/debug.c @@ -13,6 +13,8 @@ #include <trace/events/gfpflags.h> #include <linux/page_owner.h> +#include "internal.h" + char *migrate_reason_names[MR_TYPES] = { "compaction", "memory_failure", diff -puN mm/internal.h~mm-printk-introduce-new-format-string-for-flags-fix-2 mm/internal.h --- a/mm/internal.h~mm-printk-introduce-new-format-string-for-flags-fix-2 +++ a/mm/internal.h @@ -11,9 +11,11 @@ #ifndef __MM_INTERNAL_H #define __MM_INTERNAL_H +#include <linux/types.h> #include <linux/fs.h> #include <linux/mm.h> #include <linux/pagemap.h> +#include <linux/tracepoint.h> /* * The set of flags that only affect watermark checking and reclaim @@ -441,4 +443,9 @@ static inline void try_to_unmap_flush_di } #endif /* CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH */ + +extern const struct trace_print_flags pageflag_names[]; +extern const struct trace_print_flags vmaflag_names[]; +extern const struct trace_print_flags gfpflag_names[]; + #endif /* __MM_INTERNAL_H */