All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 2/4] mm/page_reporting: Export reporting order as module parameter
  2021-06-25  4:21 [PATCH v5 0/4] mm/page_reporting: Make page reporting work on arm64 with 64KB page size Gavin Shan
@ 2021-06-25  4:21 ` Gavin Shan
  0 siblings, 0 replies; 2+ messages in thread
From: Gavin Shan @ 2021-06-25  4:21 UTC (permalink / raw
  To: linux-mm
  Cc: linux-kernel, alexander.duyck, david, mst, akpm,
	anshuman.khandual, catalin.marinas, will, shan.gavin

The macro PAGE_REPORTING_MIN_ORDER is defined as the page reporting
threshold. It can't be adjusted at runtime.

This introduces a variable (@page_reporting_order) to replace the
marcro (PAGE_REPORTING_MIN_ORDER). MAX_ORDER is assigned to it at
the beginning, meaning the page reporting is disabled. It will be
restored to @pageblock_order when page reporting device is registered.
It's also exported so that the page reporting order can be adjusted
at runtime.

Suggested-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Gavin Shan <gshan@redhat.com>
Reviewed-by: Alexander Duyck <alexanderduyck@fb.com>
---
v5: Restore @page_reporting_order to @pageblock_order when device
    is registered
---
 Documentation/admin-guide/kernel-parameters.txt |  6 ++++++
 mm/page_reporting.c                             | 13 +++++++++++--
 mm/page_reporting.h                             |  5 ++---
 3 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index cb89dbdedc46..566c4b9af3cd 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -3566,6 +3566,12 @@
 			off: turn off poisoning (default)
 			on: turn on poisoning
 
+	page_reporting.page_reporting_order=
+			[KNL] Minimal page reporting order
+			Format: <integer>
+			Adjust the minimal page reporting order. The page
+			reporting is disabled when it exceeds (MAX_ORDER-1).
+
 	panic=		[KNL] Kernel behaviour on panic: delay <timeout>
 			timeout > 0: seconds before rebooting
 			timeout = 0: wait forever
diff --git a/mm/page_reporting.c b/mm/page_reporting.c
index df9c5054e1b4..133222234f25 100644
--- a/mm/page_reporting.c
+++ b/mm/page_reporting.c
@@ -4,12 +4,17 @@
 #include <linux/page_reporting.h>
 #include <linux/gfp.h>
 #include <linux/export.h>
+#include <linux/module.h>
 #include <linux/delay.h>
 #include <linux/scatterlist.h>
 
 #include "page_reporting.h"
 #include "internal.h"
 
+unsigned int page_reporting_order = MAX_ORDER;
+module_param(page_reporting_order, uint, 0644);
+MODULE_PARM_DESC(page_reporting_order, "Set page reporting order");
+
 #define PAGE_REPORTING_DELAY	(2 * HZ)
 static struct page_reporting_dev_info __rcu *pr_dev_info __read_mostly;
 
@@ -229,7 +234,7 @@ page_reporting_process_zone(struct page_reporting_dev_info *prdev,
 
 	/* Generate minimum watermark to be able to guarantee progress */
 	watermark = low_wmark_pages(zone) +
-		    (PAGE_REPORTING_CAPACITY << PAGE_REPORTING_MIN_ORDER);
+		    (PAGE_REPORTING_CAPACITY << page_reporting_order);
 
 	/*
 	 * Cancel request if insufficient free memory or if we failed
@@ -239,7 +244,7 @@ page_reporting_process_zone(struct page_reporting_dev_info *prdev,
 		return err;
 
 	/* Process each free list starting from lowest order/mt */
-	for (order = PAGE_REPORTING_MIN_ORDER; order < MAX_ORDER; order++) {
+	for (order = page_reporting_order; order < MAX_ORDER; order++) {
 		for (mt = 0; mt < MIGRATE_TYPES; mt++) {
 			/* We do not pull pages from the isolate free list */
 			if (is_migrate_isolate(mt))
@@ -324,6 +329,10 @@ int page_reporting_register(struct page_reporting_dev_info *prdev)
 		goto err_out;
 	}
 
+	/* Update the page reporting order with @pageblock_order */
+	if (page_reporting_order > pageblock_order)
+		page_reporting_order = pageblock_order;
+
 	/* initialize state and work structures */
 	atomic_set(&prdev->state, PAGE_REPORTING_IDLE);
 	INIT_DELAYED_WORK(&prdev->work, &page_reporting_process);
diff --git a/mm/page_reporting.h b/mm/page_reporting.h
index 2c385dd4ddbd..c51dbc228b94 100644
--- a/mm/page_reporting.h
+++ b/mm/page_reporting.h
@@ -10,10 +10,9 @@
 #include <linux/pgtable.h>
 #include <linux/scatterlist.h>
 
-#define PAGE_REPORTING_MIN_ORDER	pageblock_order
-
 #ifdef CONFIG_PAGE_REPORTING
 DECLARE_STATIC_KEY_FALSE(page_reporting_enabled);
+extern unsigned int page_reporting_order;
 void __page_reporting_notify(void);
 
 static inline bool page_reported(struct page *page)
@@ -38,7 +37,7 @@ static inline void page_reporting_notify_free(unsigned int order)
 		return;
 
 	/* Determine if we have crossed reporting threshold */
-	if (order < PAGE_REPORTING_MIN_ORDER)
+	if (order < page_reporting_order)
 		return;
 
 	/* This will add a few cycles, but should be called infrequently */
-- 
2.23.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH v5 2/4] mm/page_reporting: Export reporting order as module parameter
@ 2021-06-26 19:13 kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2021-06-26 19:13 UTC (permalink / raw
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 3078 bytes --]

CC: kbuild-all(a)lists.01.org
In-Reply-To: <20210625042150.46964-3-gshan@redhat.com>
References: <20210625042150.46964-3-gshan@redhat.com>
TO: Gavin Shan <gshan@redhat.com>
TO: linux-mm(a)kvack.org
CC: linux-kernel(a)vger.kernel.org
CC: alexander.duyck(a)gmail.com
CC: david(a)redhat.com
CC: mst(a)redhat.com
CC: akpm(a)linux-foundation.org
CC: anshuman.khandual(a)arm.com
CC: catalin.marinas(a)arm.com
CC: will(a)kernel.org
CC: shan.gavin(a)gmail.com

Hi Gavin,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on linux/master]
[also build test WARNING on linus/master v5.13-rc7]
[cannot apply to hnaz-linux-mm/master next-20210625]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Gavin-Shan/mm-page_reporting-Make-page-reporting-work-on-arm64-with-64KB-page-size/20210625-102229
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 0c18f29aae7ce3dadd26d8ee3505d07cc982df75
:::::: branch date: 2 days ago
:::::: commit date: 2 days ago
config: x86_64-randconfig-b001-20210624 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 9ca0171a9ffdef5fdb1511d197a3fd72490362de)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install x86_64 cross compiling tool for clang build
        # apt-get install binutils-x86-64-linux-gnu
        # apt-get install iwyu # include-what-you-use
        # https://github.com/0day-ci/linux/commit/4cc9b2b068826b954c7b5a434764960d759c6896
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Gavin-Shan/mm-page_reporting-Make-page-reporting-work-on-arm64-with-64KB-page-size/20210625-102229
        git checkout 4cc9b2b068826b954c7b5a434764960d759c6896
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross C=1 CHECK=iwyu ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


iwyu warnings: (new ones prefixed by >>)
   mm/page_reporting.c:8:1: iwyu: warning: superfluous #include <linux/delay.h>
   mm/page_reporting.c:2:1: iwyu: warning: superfluous #include <linux/mm.h>
>> mm/page_reporting.c:7:1: iwyu: warning: superfluous #include <linux/module.h>

vim +7 mm/page_reporting.c

4cc9b2b068826b Gavin Shan      2021-06-25  @7  #include <linux/module.h>
36e66c554b5c6a Alexander Duyck 2020-04-06   8  #include <linux/delay.h>
36e66c554b5c6a Alexander Duyck 2020-04-06   9  #include <linux/scatterlist.h>
36e66c554b5c6a Alexander Duyck 2020-04-06  10  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 37466 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-06-26 19:13 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-06-26 19:13 [PATCH v5 2/4] mm/page_reporting: Export reporting order as module parameter kernel test robot
  -- strict thread matches above, loose matches on Subject: below --
2021-06-25  4:21 [PATCH v5 0/4] mm/page_reporting: Make page reporting work on arm64 with 64KB page size Gavin Shan
2021-06-25  4:21 ` [PATCH v5 2/4] mm/page_reporting: Export reporting order as module parameter Gavin Shan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.