Re: [RESEND][PATCH v3] mm: Use aligned zone start for pfn_to_bitidx calculation

Laura Abbott
2013-01-09T17:48:05Z

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