Suspicious error for CMA stress test
From: guohanjun@huawei.com (Hanjun Guo)
Date: 2016-03-18 02:17:42
Also in:
linux-mm, lkml
On 2016/3/17 23:31, Joonsoo Kim wrote: [...]
quoted
quoted
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 :)Good to hear!quoted
I have some questions, Joonsoo, you provided a patch as following:diff --git a/mm/cma.c b/mm/cma.c index 3a7a67b..952a8a3 100644 --- a/mm/cma.c +++ b/mm/cma.c@@ -448,7 +448,10 @@ bool cma_release(struct cma *cma, const struct page *pages, unsigned int count) VM_BUG_ON(pfn + count > cma->base_pfn + cma->count); + mutex_lock(&cma_mutex); free_contig_range(pfn, count); + mutex_unlock(&cma_mutex); + cma_clear_bitmap(cma, pfn, count); trace_cma_release(pfn, pages, count);diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 7f32950..68ed5ae 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c@@ -1559,7 +1559,8 @@ void free_hot_cold_page(struct page *page, bool cold) * excessively into the page allocator */ if (migratetype >= MIGRATE_PCPTYPES) { - if (unlikely(is_migrate_isolate(migratetype))) { + if (is_migrate_cma(migratetype) || + unlikely(is_migrate_isolate(migratetype))) { free_one_page(zone, page, pfn, 0, migratetype); goto out; }This patch also works to fix the bug, why not just use this one? is there any side effects for this patch? maybe there is performance issue as the mutex lock is used, any other issues?The changes in free_hot_cold_page() would cause unacceptable performance problem in a big machine, because, with above change, it takes zone->lock whenever freeing one page on CMA region.
Thanks for the clarify :) Hanjun