Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a4e1b4c6 authored by Mel Gorman's avatar Mel Gorman Committed by Linus Torvalds
Browse files

mm: init: report on last-nid information stored in page->flags



Answering the question "how much space remains in the page->flags" is
time-consuming.  mminit_loglevel can help answer the question but it
does not take last_nid information into account.  This patch corrects it
and while there it corrects the messages related to page flag usage,
pgshifts and node/zone id.  When applied the relevant output looks
something like this but will depend on the kernel configuration.

  mminit::pageflags_layout_widths Section 0 Node 9 Zone 2 Lastnid 9 Flags 25
  mminit::pageflags_layout_shifts Section 19 Node 9 Zone 2 Lastnid 9
  mminit::pageflags_layout_pgshifts Section 0 Node 55 Zone 53 Lastnid 44
  mminit::pageflags_layout_nodezoneid Node/Zone ID: 64 -> 53
  mminit::pageflags_layout_usage location: 64 -> 44 layout 44 -> 25 unused 25 -> 0 page-flags

Signed-off-by: default avatarMel Gorman <mgorman@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 4468b8f1
Loading
Loading
Loading
Loading
+19 −12
Original line number Original line Diff line number Diff line
@@ -69,34 +69,41 @@ void __init mminit_verify_pageflags_layout(void)
	unsigned long or_mask, add_mask;
	unsigned long or_mask, add_mask;


	shift = 8 * sizeof(unsigned long);
	shift = 8 * sizeof(unsigned long);
	width = shift - SECTIONS_WIDTH - NODES_WIDTH - ZONES_WIDTH;
	width = shift - SECTIONS_WIDTH - NODES_WIDTH - ZONES_WIDTH - LAST_NID_SHIFT;
	mminit_dprintk(MMINIT_TRACE, "pageflags_layout_widths",
	mminit_dprintk(MMINIT_TRACE, "pageflags_layout_widths",
		"Section %d Node %d Zone %d Flags %d\n",
		"Section %d Node %d Zone %d Lastnid %d Flags %d\n",
		SECTIONS_WIDTH,
		SECTIONS_WIDTH,
		NODES_WIDTH,
		NODES_WIDTH,
		ZONES_WIDTH,
		ZONES_WIDTH,
		LAST_NID_WIDTH,
		NR_PAGEFLAGS);
		NR_PAGEFLAGS);
	mminit_dprintk(MMINIT_TRACE, "pageflags_layout_shifts",
	mminit_dprintk(MMINIT_TRACE, "pageflags_layout_shifts",
		"Section %d Node %d Zone %d\n",
		"Section %d Node %d Zone %d Lastnid %d\n",
		SECTIONS_SHIFT,
		SECTIONS_SHIFT,
		NODES_SHIFT,
		NODES_SHIFT,
		ZONES_SHIFT);
		ZONES_SHIFT,
	mminit_dprintk(MMINIT_TRACE, "pageflags_layout_offsets",
		LAST_NID_SHIFT);
		"Section %lu Node %lu Zone %lu\n",
	mminit_dprintk(MMINIT_TRACE, "pageflags_layout_pgshifts",
		"Section %lu Node %lu Zone %lu Lastnid %lu\n",
		(unsigned long)SECTIONS_PGSHIFT,
		(unsigned long)SECTIONS_PGSHIFT,
		(unsigned long)NODES_PGSHIFT,
		(unsigned long)NODES_PGSHIFT,
		(unsigned long)ZONES_PGSHIFT);
		(unsigned long)ZONES_PGSHIFT,
	mminit_dprintk(MMINIT_TRACE, "pageflags_layout_zoneid",
		(unsigned long)LAST_NID_PGSHIFT);
		"Zone ID: %lu -> %lu\n",
	mminit_dprintk(MMINIT_TRACE, "pageflags_layout_nodezoneid",
		(unsigned long)ZONEID_PGOFF,
		"Node/Zone ID: %lu -> %lu\n",
		(unsigned long)(ZONEID_PGOFF + ZONEID_SHIFT));
		(unsigned long)(ZONEID_PGOFF + ZONEID_SHIFT),
		(unsigned long)ZONEID_PGOFF);
	mminit_dprintk(MMINIT_TRACE, "pageflags_layout_usage",
	mminit_dprintk(MMINIT_TRACE, "pageflags_layout_usage",
		"location: %d -> %d unused %d -> %d flags %d -> %d\n",
		"location: %d -> %d layout %d -> %d unused %d -> %d page-flags\n",
		shift, width, width, NR_PAGEFLAGS, NR_PAGEFLAGS, 0);
		shift, width, width, NR_PAGEFLAGS, NR_PAGEFLAGS, 0);
#ifdef NODE_NOT_IN_PAGE_FLAGS
#ifdef NODE_NOT_IN_PAGE_FLAGS
	mminit_dprintk(MMINIT_TRACE, "pageflags_layout_nodeflags",
	mminit_dprintk(MMINIT_TRACE, "pageflags_layout_nodeflags",
		"Node not in page flags");
		"Node not in page flags");
#endif
#endif
#ifdef LAST_NID_NOT_IN_PAGE_FLAGS
	mminit_dprintk(MMINIT_TRACE, "pageflags_layout_nodeflags",
		"Last nid not in page flags");
#endif


	if (SECTIONS_WIDTH) {
	if (SECTIONS_WIDTH) {
		shift -= SECTIONS_WIDTH;
		shift -= SECTIONS_WIDTH;