* [PATCH v2] mm/page_isolation: do not isolate the max order page
@ 2020-12-03 16:22 Muchun Song
2020-12-03 16:28 ` David Hildenbrand
2020-12-07 13:42 ` Oscar Salvador
0 siblings, 2 replies; 5+ messages in thread
From: Muchun Song @ 2020-12-03 16:22 UTC (permalink / raw)
To: akpm; +Cc: linux-mm, linux-kernel, Muchun Song, Vlastimil Babka
The max order page has no buddy page and never merge to other order.
So isolating and then freeing it is pointless. And if order == MAX_ORDER
- 1, then the buddy can actually be a !pfn_valid() in some corner case?
pfn_valid_within(buddy_pfn) that follows would only catch it on archs
with holes in zone. Then is_migrate_isolate_page(buddy) might access an
invalid buddy. So this is also a bug fix.
Fixes: 3c605096d315 ("mm/page_alloc: restrict max order of merging on isolated pageblock")
Signed-off-by: Muchun Song <songmuchun@bytedance.com>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
---
Changes in v2:
- Add Fixes tag in the commit log.
mm/page_isolation.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mm/page_isolation.c b/mm/page_isolation.c
index a254e1f370a3..bddf788f45bf 100644
--- a/mm/page_isolation.c
+++ b/mm/page_isolation.c
@@ -88,7 +88,7 @@ static void unset_migratetype_isolate(struct page *page, unsigned migratetype)
*/
if (PageBuddy(page)) {
order = buddy_order(page);
- if (order >= pageblock_order) {
+ if (order >= pageblock_order && order < MAX_ORDER - 1) {
pfn = page_to_pfn(page);
buddy_pfn = __find_buddy_pfn(pfn, order);
buddy = page + (buddy_pfn - pfn);
--
2.11.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2] mm/page_isolation: do not isolate the max order page
2020-12-03 16:22 [PATCH v2] mm/page_isolation: do not isolate the max order page Muchun Song
@ 2020-12-03 16:28 ` David Hildenbrand
2020-12-04 16:12 ` [External] " Muchun Song
2020-12-07 13:42 ` Oscar Salvador
1 sibling, 1 reply; 5+ messages in thread
From: David Hildenbrand @ 2020-12-03 16:28 UTC (permalink / raw)
To: Muchun Song, akpm; +Cc: linux-mm, linux-kernel, Vlastimil Babka
On 03.12.20 17:22, Muchun Song wrote:
> The max order page has no buddy page and never merge to other order.
> So isolating and then freeing it is pointless. And if order == MAX_ORDER
> - 1, then the buddy can actually be a !pfn_valid() in some corner case?
> pfn_valid_within(buddy_pfn) that follows would only catch it on archs
> with holes in zone. Then is_migrate_isolate_page(buddy) might access an
> invalid buddy. So this is also a bug fix.
>
> Fixes: 3c605096d315 ("mm/page_alloc: restrict max order of merging on isolated pageblock")
As just replied to v1, I don't think this is required and the patch
description can be simplified - e.g., stating that we have/had not such
users.
--
Thanks,
David / dhildenb
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [External] Re: [PATCH v2] mm/page_isolation: do not isolate the max order page
2020-12-03 16:28 ` David Hildenbrand
@ 2020-12-04 16:12 ` Muchun Song
2020-12-04 17:12 ` David Hildenbrand
0 siblings, 1 reply; 5+ messages in thread
From: Muchun Song @ 2020-12-04 16:12 UTC (permalink / raw)
To: David Hildenbrand
Cc: Andrew Morton, Linux Memory Management List, LKML, Vlastimil Babka
On Fri, Dec 4, 2020 at 12:28 AM David Hildenbrand <david@redhat.com> wrote:
>
> On 03.12.20 17:22, Muchun Song wrote:
> > The max order page has no buddy page and never merge to other order.
> > So isolating and then freeing it is pointless. And if order == MAX_ORDER
> > - 1, then the buddy can actually be a !pfn_valid() in some corner case?
> > pfn_valid_within(buddy_pfn) that follows would only catch it on archs
> > with holes in zone. Then is_migrate_isolate_page(buddy) might access an
> > invalid buddy. So this is also a bug fix.
> >
> > Fixes: 3c605096d315 ("mm/page_alloc: restrict max order of merging on isolated pageblock")
>
> As just replied to v1, I don't think this is required and the patch
You mean we should remove the Fixes tag? Thanks.
> description can be simplified - e.g., stating that we have/had not such
> users.
>
>
> --
> Thanks,
>
> David / dhildenb
>
--
Yours,
Muchun
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [External] Re: [PATCH v2] mm/page_isolation: do not isolate the max order page
2020-12-04 16:12 ` [External] " Muchun Song
@ 2020-12-04 17:12 ` David Hildenbrand
0 siblings, 0 replies; 5+ messages in thread
From: David Hildenbrand @ 2020-12-04 17:12 UTC (permalink / raw)
To: Muchun Song
Cc: Andrew Morton, Linux Memory Management List, LKML, Vlastimil Babka
On 04.12.20 17:12, Muchun Song wrote:
> On Fri, Dec 4, 2020 at 12:28 AM David Hildenbrand <david@redhat.com> wrote:
>>
>> On 03.12.20 17:22, Muchun Song wrote:
>>> The max order page has no buddy page and never merge to other order.
>>> So isolating and then freeing it is pointless. And if order == MAX_ORDER
>>> - 1, then the buddy can actually be a !pfn_valid() in some corner case?
>>> pfn_valid_within(buddy_pfn) that follows would only catch it on archs
>>> with holes in zone. Then is_migrate_isolate_page(buddy) might access an
>>> invalid buddy. So this is also a bug fix.
>>>
>>> Fixes: 3c605096d315 ("mm/page_alloc: restrict max order of merging on isolated pageblock")
>>
>> As just replied to v1, I don't think this is required and the patch
>
> You mean we should remove the Fixes tag? Thanks.
As discussed in v1, I don't think we really have systems where this
applies, but could be in corner cases on MIPS or with FLATMEM. Let's
just leave it like that. :)
Reviewed-by: David Hildenbrand <david@redhat.com>
--
Thanks,
David / dhildenb
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] mm/page_isolation: do not isolate the max order page
2020-12-03 16:22 [PATCH v2] mm/page_isolation: do not isolate the max order page Muchun Song
2020-12-03 16:28 ` David Hildenbrand
@ 2020-12-07 13:42 ` Oscar Salvador
1 sibling, 0 replies; 5+ messages in thread
From: Oscar Salvador @ 2020-12-07 13:42 UTC (permalink / raw)
To: Muchun Song; +Cc: akpm, linux-mm, linux-kernel, Vlastimil Babka
On Fri, Dec 04, 2020 at 12:22:37AM +0800, Muchun Song wrote:
> The max order page has no buddy page and never merge to other order.
> So isolating and then freeing it is pointless. And if order == MAX_ORDER
> - 1, then the buddy can actually be a !pfn_valid() in some corner case?
> pfn_valid_within(buddy_pfn) that follows would only catch it on archs
> with holes in zone. Then is_migrate_isolate_page(buddy) might access an
> invalid buddy. So this is also a bug fix.
>
> Fixes: 3c605096d315 ("mm/page_alloc: restrict max order of merging on isolated pageblock")
> Signed-off-by: Muchun Song <songmuchun@bytedance.com>
> Acked-by: Vlastimil Babka <vbabka@suse.cz>
Reviewed-by: Oscar Salvador <osalvador@suse.de>
> ---
> Changes in v2:
> - Add Fixes tag in the commit log.
>
> mm/page_isolation.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/mm/page_isolation.c b/mm/page_isolation.c
> index a254e1f370a3..bddf788f45bf 100644
> --- a/mm/page_isolation.c
> +++ b/mm/page_isolation.c
> @@ -88,7 +88,7 @@ static void unset_migratetype_isolate(struct page *page, unsigned migratetype)
> */
> if (PageBuddy(page)) {
> order = buddy_order(page);
> - if (order >= pageblock_order) {
> + if (order >= pageblock_order && order < MAX_ORDER - 1) {
> pfn = page_to_pfn(page);
> buddy_pfn = __find_buddy_pfn(pfn, order);
> buddy = page + (buddy_pfn - pfn);
> --
> 2.11.0
>
>
--
Oscar Salvador
SUSE L3
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2020-12-07 13:42 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-03 16:22 [PATCH v2] mm/page_isolation: do not isolate the max order page Muchun Song
2020-12-03 16:28 ` David Hildenbrand
2020-12-04 16:12 ` [External] " Muchun Song
2020-12-04 17:12 ` David Hildenbrand
2020-12-07 13:42 ` Oscar Salvador
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).