linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).