Thread (59 messages) 59 messages, 9 authors, 2016-03-23

Suspicious error for CMA stress test

From: guohanjun@huawei.com (Hanjun Guo)
Date: 2016-03-19 07:29:24
Also in: linux-mm, lkml

On 2016/3/18 22:10, Vlastimil Babka wrote:
On 03/17/2016 04:52 PM, Joonsoo Kim wrote:
quoted
2016-03-18 0:43 GMT+09:00 Vlastimil Babka [off-list ref]:
quoted
quoted
quoted
quoted
quoted
Okay. I used following slightly optimized version and I need to
add 'max_order = min_t(unsigned int, MAX_ORDER, pageblock_order + 1)'
to yours. Please consider it, too.
Hmm, this one is not work, I still can see the bug is there after
applying
this patch, did I miss something?
I may find that there is a bug which was introduced by me some time
ago. Could you test following change in __free_one_page() on top of
Vlastimil's patch?

-page_idx = pfn & ((1 << max_order) - 1);
+page_idx = pfn & ((1 << MAX_ORDER) - 1);
I tested Vlastimil's patch + your change with stress for more than half
hour, the bug
I reported is gone :)
Oh, ok, will try to send proper patch, once I figure out what to write in
the changelog :)
Thanks in advance!
OK, here it is. Hanjun can you please retest this, as I'm not sure if you had
I tested this new patch with stress for more than one hour, and it works!
Since Lucas has comments on it, I'm willing to test further versions if needed.

One minor comments below,
the same code due to the followup one-liner patches in the thread. Lucas, see if
it helps with your issue as well. Laura and Joonsoo, please also test and review
and check changelog if my perception of the problem is accurate :)

Thanks
[...]
+	if (max_order < MAX_ORDER) {
+		/* If we are here, it means order is >= pageblock_order.
+		 * We want to prevent merge between freepages on isolate
+		 * pageblock and normal pageblock. Without this, pageblock
+		 * isolation could cause incorrect freepage or CMA accounting.
+		 *
+		 * We don't want to hit this code for the more frequent
+		 * low-order merging.
+		 */
+		if (unlikely(has_isolate_pageblock(zone))) {
In the first version of your patch, it's

+		if (IS_ENABLED(CONFIG_CMA) &&
+				unlikely(has_isolate_pageblock(zone))) {

Why remove the IS_ENABLED(CONFIG_CMA) in the new version?

Thanks
Hanjun
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help