From: "Michael S. Tsirkin" <mst@redhat.com>
To: Gavin Shan <gshan@redhat.com>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
alexander.duyck@gmail.com, david@redhat.com,
akpm@linux-foundation.org, anshuman.khandual@arm.com,
catalin.marinas@arm.com, will@kernel.org, shan.gavin@gmail.com
Subject: Re: [PATCH v4 2/4] mm/page_reporting: Export reporting order as module parameter
Date: Fri, 25 Jun 2021 01:53:15 -0400 [thread overview]
Message-ID: <20210625014928-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20210625014710.42954-3-gshan@redhat.com>
On Fri, Jun 25, 2021 at 09:47:08AM +0800, Gavin Shan wrote:
> 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 initially,
> meaning the page reporting is disabled. It will be specified by driver
> if valid one is provided. Otherwise, it will fall back to @pageblock_order.
> 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>
> ---
> Documentation/admin-guide/kernel-parameters.txt | 6 ++++++
> mm/page_reporting.c | 9 +++++++--
> mm/page_reporting.h | 5 ++---
> 3 files changed, 15 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).
Which the admin knows how? Run grep in the kernel source?
> +
> 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..34bf4d26c2c4 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);
Looks like this makes it easy to trigger undefined behaviour. Just use
any value > 31.
>
> /*
> * 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))
> 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
next prev parent reply other threads:[~2021-06-25 5:53 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-25 1:47 [PATCH v4 0/4] mm/page_reporting: Make page reporting work on arm64 with 64KB page size Gavin Shan
2021-06-25 1:47 ` [PATCH v4 1/4] mm/page_reporting: Fix code style in __page_reporting_request() Gavin Shan
2021-06-25 1:47 ` [PATCH v4 2/4] mm/page_reporting: Export reporting order as module parameter Gavin Shan
2021-06-25 1:14 ` Alexander Duyck
2021-06-25 3:58 ` Gavin Shan
2021-06-25 5:53 ` Michael S. Tsirkin [this message]
2021-06-25 6:08 ` Gavin Shan
2021-06-25 1:47 ` [PATCH v4 3/4] mm/page_reporting: Allow driver to specify reporting order Gavin Shan
2021-06-25 1:19 ` Alexander Duyck
2021-06-25 4:00 ` Gavin Shan
2021-06-25 4:24 ` Gavin Shan
2021-06-25 5:48 ` Michael S. Tsirkin
2021-06-25 6:04 ` Gavin Shan
2021-06-25 1:47 ` [PATCH v4 4/4] virtio_balloon: Specify page reporting order if needed Gavin Shan
2021-06-25 5:57 ` Michael S. Tsirkin
2021-06-25 6:11 ` Gavin Shan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210625014928-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=alexander.duyck@gmail.com \
--cc=anshuman.khandual@arm.com \
--cc=catalin.marinas@arm.com \
--cc=david@redhat.com \
--cc=gshan@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=shan.gavin@gmail.com \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.