linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [RESEND][PATCH v3] mm: Use aligned zone start for pfn_to_bitidx calculation
@ 2013-01-05 19:28 Laura Abbott
  2013-01-07 22:31 ` Andrew Morton
  0 siblings, 1 reply; 3+ messages in thread
From: Laura Abbott @ 2013-01-05 19:28 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Mel Gorman, linux-mm, linux-kernel, linux-arm-msm, Laura Abbott

The current calculation in pfn_to_bitidx assumes that
(pfn - zone->zone_start_pfn) >> pageblock_order will return the
same bit for all pfn in a pageblock. If zone_start_pfn is not
aligned to pageblock_nr_pages, this may not always be correct.

Consider the following with pageblock order = 10, zone start 2MB:

pfn     | pfn - zone start | (pfn - zone start) >> page block order
----------------------------------------------------------------
0x26000 | 0x25e00	   |  0x97
0x26100 | 0x25f00	   |  0x97
0x26200 | 0x26000	   |  0x98
0x26300 | 0x26100	   |  0x98

This means that calling {get,set}_pageblock_migratetype on a single
page will not set the migratetype for the full block. Fix this by
rounding down zone_start_pfn when doing the bitidx calculation.

Signed-off-by: Laura Abbott <lauraa@codeaurora.org>
Acked-by: Mel Gorman <mgorman@suse.de>
---
 mm/page_alloc.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 92dd060..b6a2510 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -5422,7 +5422,7 @@ static inline int pfn_to_bitidx(struct zone *zone, unsigned long pfn)
 	pfn &= (PAGES_PER_SECTION-1);
 	return (pfn >> pageblock_order) * NR_PAGEBLOCK_BITS;
 #else
-	pfn = pfn - zone->zone_start_pfn;
+	pfn = pfn - round_down(zone->zone_start_pfn, pageblock_nr_pages);
 	return (pfn >> pageblock_order) * NR_PAGEBLOCK_BITS;
 #endif /* CONFIG_SPARSEMEM */
 }
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
hosted by The Linux Foundation

--
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>

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

* Re: [RESEND][PATCH v3] mm: Use aligned zone start for pfn_to_bitidx calculation
  2013-01-05 19:28 [RESEND][PATCH v3] mm: Use aligned zone start for pfn_to_bitidx calculation Laura Abbott
@ 2013-01-07 22:31 ` Andrew Morton
  2013-01-09 17:48   ` Laura Abbott
  0 siblings, 1 reply; 3+ messages in thread
From: Andrew Morton @ 2013-01-07 22:31 UTC (permalink / raw)
  To: Laura Abbott; +Cc: Mel Gorman, linux-mm, linux-kernel, linux-arm-msm

On Sat,  5 Jan 2013 11:28:31 -0800
Laura Abbott <lauraa@codeaurora.org> wrote:

> The current calculation in pfn_to_bitidx assumes that
> (pfn - zone->zone_start_pfn) >> pageblock_order will return the
> same bit for all pfn in a pageblock. If zone_start_pfn is not
> aligned to pageblock_nr_pages, this may not always be correct.
> 
> Consider the following with pageblock order = 10, zone start 2MB:
> 
> pfn     | pfn - zone start | (pfn - zone start) >> page block order
> ----------------------------------------------------------------
> 0x26000 | 0x25e00	   |  0x97
> 0x26100 | 0x25f00	   |  0x97
> 0x26200 | 0x26000	   |  0x98
> 0x26300 | 0x26100	   |  0x98
> 
> This means that calling {get,set}_pageblock_migratetype on a single
> page will not set the migratetype for the full block. Fix this by
> rounding down zone_start_pfn when doing the bitidx calculation.

What are the user-visible effects of this bug?

--
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>

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

* Re: [RESEND][PATCH v3] mm: Use aligned zone start for pfn_to_bitidx calculation
  2013-01-07 22:31 ` Andrew Morton
@ 2013-01-09 17:48   ` Laura Abbott
  0 siblings, 0 replies; 3+ messages in thread
From: Laura Abbott @ 2013-01-09 17:48 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Mel Gorman, linux-mm, linux-kernel, linux-arm-msm

On 1/7/2013 2:31 PM, Andrew Morton wrote:
> On Sat,  5 Jan 2013 11:28:31 -0800
> Laura Abbott <lauraa@codeaurora.org> wrote:
>
>> The current calculation in pfn_to_bitidx assumes that
>> (pfn - zone->zone_start_pfn) >> pageblock_order will return the
>> same bit for all pfn in a pageblock. If zone_start_pfn is not
>> aligned to pageblock_nr_pages, this may not always be correct.
>>
>> Consider the following with pageblock order = 10, zone start 2MB:
>>
>> pfn     | pfn - zone start | (pfn - zone start) >> page block order
>> ----------------------------------------------------------------
>> 0x26000 | 0x25e00	   |  0x97
>> 0x26100 | 0x25f00	   |  0x97
>> 0x26200 | 0x26000	   |  0x98
>> 0x26300 | 0x26100	   |  0x98
>>
>> This means that calling {get,set}_pageblock_migratetype on a single
>> page will not set the migratetype for the full block. Fix this by
>> rounding down zone_start_pfn when doing the bitidx calculation.
>
> What are the user-visible effects of this bug?
>

For our use case, the effects were mostly tied to the fact that CMA 
allocations would either take a long time or fail to happen on on. 
Depending on the driver using CMA, this could result in anything from 
visual glitches to application failures.

I'm not sure about effect outside of CMA.

Laura
-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation

--
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>

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

end of thread, other threads:[~2013-01-09 17:48 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-05 19:28 [RESEND][PATCH v3] mm: Use aligned zone start for pfn_to_bitidx calculation Laura Abbott
2013-01-07 22:31 ` Andrew Morton
2013-01-09 17:48   ` Laura Abbott

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).