From: Wu Fengguang <fengguang.wu@intel.com>
To: Michal Hocko <mhocko@suse.cz>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
Hiroyuki Kamezawa <kamezawa.hiroyuki@gmail.com>,
"linux-mm@kvack.org" <linux-mm@kvack.org>,
Andrew Morton <akpm@linux-foundation.org>,
"Kleen, Andi" <andi.kleen@intel.com>,
Haicheng Li <haicheng.li@linux.intel.com>,
Christoph Lameter <cl@linux-foundation.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Mel Gorman <mel@linux.vnet.ibm.com>
Subject: Re: [PATCH 2/2] Make is_mem_section_removable more conformable with offlining code v3
Date: Sat, 4 Sep 2010 10:55:16 +0800 [thread overview]
Message-ID: <20100904025516.GB7788@localhost> (raw)
In-Reply-To: <20100903114213.GI10686@tiehlicka.suse.cz>
On Fri, Sep 03, 2010 at 07:42:13PM +0800, Michal Hocko wrote:
> +/*
> + * A free or LRU pages block are removable
> + * Do not use MIGRATE_MOVABLE because it can be insufficient and
> + * other MIGRATE types are tricky.
> + * Do not hold zone->lock as this is used from user space by the
> + * sysfs interface.
> + */
> +bool is_page_removable(struct page *page)
> +{
> + int page_block = 1 << pageblock_order;
> +
> + /* All pages from the MOVABLE zone are movable */
> + if (zone_idx(page_zone(page)) == ZONE_MOVABLE)
> + return true;
> +
> + while (page_block > 0) {
> + int order = 0;
> +
> + if (pfn_valid_within(page_to_pfn(page))) {
> + if (!page_count(page) && PageBuddy(page)) {
PageBuddy() is true only for the head page and false for all tail
pages. So when is_page_removable() is given a random 4k page
(get_any_page() will exactly do that), the above test is not enough.
It's recommended to reuse is_free_buddy_page(). (Need to do some
cleanup work first: remove the "#ifdef CONFIG_MEMORY_FAILURE" and
abstract out an __is_free_buddy_page() that takes no lock.)
> @@ -5277,14 +5277,11 @@ int set_migratetype_isolate(struct page *page)
> struct memory_isolate_notify arg;
> int notifier_ret;
> int ret = -EBUSY;
> - int zone_idx;
>
> zone = page_zone(page);
> - zone_idx = zone_idx(zone);
>
> spin_lock_irqsave(&zone->lock, flags);
> - if (get_pageblock_migratetype(page) == MIGRATE_MOVABLE ||
> - zone_idx == ZONE_MOVABLE) {
> + if (is_page_removable(page)) {
> ret = 0;
> goto out;
The above check only applies to the first page in the page block.
The following "if (!page_count(curr_page) || PageLRU(curr_page))"
check in the same function should be converted too (and that's another
reason to use __is_free_buddy_page(): it will be tested for every 4k
pages, including both the head and tail pages).
Thanks,
Fengguang
WARNING: multiple messages have this Message-ID (diff)
From: Wu Fengguang <fengguang.wu@intel.com>
To: Michal Hocko <mhocko@suse.cz>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
Hiroyuki Kamezawa <kamezawa.hiroyuki@gmail.com>,
"linux-mm@kvack.org" <linux-mm@kvack.org>,
Andrew Morton <akpm@linux-foundation.org>,
"Kleen, Andi" <andi.kleen@intel.com>,
Haicheng Li <haicheng.li@linux.intel.com>,
Christoph Lameter <cl@linux-foundation.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Mel Gorman <mel@linux.vnet.ibm.com>
Subject: Re: [PATCH 2/2] Make is_mem_section_removable more conformable with offlining code v3
Date: Sat, 4 Sep 2010 10:55:16 +0800 [thread overview]
Message-ID: <20100904025516.GB7788@localhost> (raw)
In-Reply-To: <20100903114213.GI10686@tiehlicka.suse.cz>
On Fri, Sep 03, 2010 at 07:42:13PM +0800, Michal Hocko wrote:
> +/*
> + * A free or LRU pages block are removable
> + * Do not use MIGRATE_MOVABLE because it can be insufficient and
> + * other MIGRATE types are tricky.
> + * Do not hold zone->lock as this is used from user space by the
> + * sysfs interface.
> + */
> +bool is_page_removable(struct page *page)
> +{
> + int page_block = 1 << pageblock_order;
> +
> + /* All pages from the MOVABLE zone are movable */
> + if (zone_idx(page_zone(page)) == ZONE_MOVABLE)
> + return true;
> +
> + while (page_block > 0) {
> + int order = 0;
> +
> + if (pfn_valid_within(page_to_pfn(page))) {
> + if (!page_count(page) && PageBuddy(page)) {
PageBuddy() is true only for the head page and false for all tail
pages. So when is_page_removable() is given a random 4k page
(get_any_page() will exactly do that), the above test is not enough.
It's recommended to reuse is_free_buddy_page(). (Need to do some
cleanup work first: remove the "#ifdef CONFIG_MEMORY_FAILURE" and
abstract out an __is_free_buddy_page() that takes no lock.)
> @@ -5277,14 +5277,11 @@ int set_migratetype_isolate(struct page *page)
> struct memory_isolate_notify arg;
> int notifier_ret;
> int ret = -EBUSY;
> - int zone_idx;
>
> zone = page_zone(page);
> - zone_idx = zone_idx(zone);
>
> spin_lock_irqsave(&zone->lock, flags);
> - if (get_pageblock_migratetype(page) == MIGRATE_MOVABLE ||
> - zone_idx == ZONE_MOVABLE) {
> + if (is_page_removable(page)) {
> ret = 0;
> goto out;
The above check only applies to the first page in the page block.
The following "if (!page_count(curr_page) || PageLRU(curr_page))"
check in the same function should be converted too (and that's another
reason to use __is_free_buddy_page(): it will be tested for every 4k
pages, including both the head and tail pages).
Thanks,
Fengguang
--
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>
next prev parent reply other threads:[~2010-09-04 2:55 UTC|newest]
Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-20 14:14 [PATCH] Make is_mem_section_removable more conformable with offlining code Michal Hocko
2010-08-20 14:14 ` Michal Hocko
2010-08-22 0:42 ` Wu Fengguang
2010-08-22 0:42 ` Wu Fengguang
2010-08-23 9:22 ` Michal Hocko
2010-08-23 9:22 ` Michal Hocko
2010-08-31 12:30 ` Michal Hocko
2010-08-31 12:30 ` Michal Hocko
2010-08-31 14:19 ` Wu Fengguang
2010-08-31 14:19 ` Wu Fengguang
2010-08-31 14:36 ` Wu Fengguang
2010-08-31 14:36 ` Wu Fengguang
2010-08-31 14:59 ` Wu Fengguang
2010-08-31 14:59 ` Wu Fengguang
2010-09-01 1:19 ` KAMEZAWA Hiroyuki
2010-09-01 1:19 ` KAMEZAWA Hiroyuki
2010-09-01 12:19 ` Michal Hocko
2010-09-01 12:19 ` Michal Hocko
2010-09-01 12:41 ` Michal Hocko
2010-09-01 12:41 ` Michal Hocko
2010-09-02 5:45 ` KAMEZAWA Hiroyuki
2010-09-02 5:45 ` KAMEZAWA Hiroyuki
2010-09-02 8:28 ` Michal Hocko
2010-09-02 8:28 ` Michal Hocko
2010-09-02 9:03 ` KAMEZAWA Hiroyuki
2010-09-02 9:03 ` KAMEZAWA Hiroyuki
2010-09-02 9:24 ` Michal Hocko
2010-09-02 9:24 ` Michal Hocko
2010-09-02 11:19 ` Hiroyuki Kamezawa
2010-09-02 11:19 ` Hiroyuki Kamezawa
2010-09-02 13:18 ` Michal Hocko
2010-09-02 13:18 ` Michal Hocko
2010-09-02 14:19 ` Hiroyuki Kamezawa
2010-09-02 14:19 ` Hiroyuki Kamezawa
2010-09-02 14:39 ` Michal Hocko
2010-09-02 14:39 ` Michal Hocko
2010-09-02 15:05 ` Michal Hocko
2010-09-02 15:05 ` Michal Hocko
2010-09-03 3:10 ` [PATCH 0/2 v2] " KAMEZAWA Hiroyuki
2010-09-03 3:10 ` KAMEZAWA Hiroyuki
2010-09-03 3:11 ` [PATCH 1/2][BUGFIX] fix next active pageblock calculation KAMEZAWA Hiroyuki
2010-09-03 3:11 ` KAMEZAWA Hiroyuki
2010-09-03 3:14 ` [PATCH 2/2] Make is_mem_section_removable more conformable with offlining code KAMEZAWA Hiroyuki
2010-09-03 3:14 ` KAMEZAWA Hiroyuki
2010-09-03 8:25 ` Michal Hocko
2010-09-03 8:25 ` Michal Hocko
2010-09-03 9:13 ` KAMEZAWA Hiroyuki
2010-09-03 9:13 ` KAMEZAWA Hiroyuki
2010-09-03 9:50 ` Michal Hocko
2010-09-03 9:50 ` Michal Hocko
2010-09-03 10:05 ` KAMEZAWA Hiroyuki
2010-09-03 10:05 ` KAMEZAWA Hiroyuki
2010-09-03 11:01 ` Michal Hocko
2010-09-03 11:01 ` Michal Hocko
2010-09-03 11:42 ` [PATCH 2/2] Make is_mem_section_removable more conformable with offlining code v3 Michal Hocko
2010-09-03 11:42 ` Michal Hocko
2010-09-04 2:55 ` Wu Fengguang [this message]
2010-09-04 2:55 ` Wu Fengguang
2010-09-06 9:16 ` Michal Hocko
2010-09-06 9:16 ` Michal Hocko
2010-09-03 9:15 ` [PATCH 2/2] Make is_mem_section_removable more conformable with offlining code Michal Hocko
2010-09-03 9:15 ` Michal Hocko
2010-09-03 9:24 ` KAMEZAWA Hiroyuki
2010-09-03 9:24 ` KAMEZAWA Hiroyuki
2010-09-03 7:54 ` [PATCH 0/2 v2] " Michal Hocko
2010-09-03 7:54 ` Michal Hocko
2010-09-03 7:57 ` [PATCH 3/2][BUGFIX] fix memory isolation notifier return value check KAMEZAWA Hiroyuki
2010-09-03 7:57 ` KAMEZAWA Hiroyuki
2010-09-03 20:48 ` Andrew Morton
2010-09-03 20:48 ` Andrew Morton
2010-09-03 22:05 ` Hiroyuki Kamezawa
2010-09-03 22:05 ` Hiroyuki Kamezawa
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=20100904025516.GB7788@localhost \
--to=fengguang.wu@intel.com \
--cc=akpm@linux-foundation.org \
--cc=andi.kleen@intel.com \
--cc=cl@linux-foundation.org \
--cc=haicheng.li@linux.intel.com \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=kamezawa.hiroyuki@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mel@linux.vnet.ibm.com \
--cc=mhocko@suse.cz \
/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.