[PATCH 0/7] improve robustness on handling migratetype

From: Joonsoo Kim
Date: Thu Jan 09 2014 - 02:04:57 EST


Hello,

I found some weaknesses on handling migratetype during code review and
testing CMA.

First, we don't have any synchronization method on get/set pageblock
migratetype. When we change migratetype, we hold the zone lock. So
writer-writer race doesn't exist. But while someone changes migratetype,
others can get migratetype. This may introduce totally unintended value
as migratetype. Although I haven't heard of any problem report about
that, it is better to protect properly.

Second, (get/set)_freepage_migrate isn't used properly. I guess that it
would be introduced for per cpu page(pcp) performance, but, it is also
used by memory isolation, now. For that case, the information isn't
enough to use, so we need to fix it.

Third, there is the problem on buddy allocator. It doesn't consider
migratetype when merging buddy, so pages from cma or isolate region can
be moved to other migratetype freelist. It makes CMA failed over and over.
To prevent it, the buddy allocator should consider migratetype if
CMA/ISOLATE is enabled.

This patchset is aimed at fixing these problems and based on v3.13-rc7.

Thanks.

Joonsoo Kim (7):
mm/page_alloc: synchronize get/set pageblock
mm/cma: fix cma free page accounting
mm/page_alloc: move set_freepage_migratetype() to better place
mm/isolation: remove invalid check condition
mm/page_alloc: separate interface to set/get migratetype of freepage
mm/page_alloc: store freelist migratetype to the page on buddy
properly
mm/page_alloc: don't merge MIGRATE_(CMA|ISOLATE) pages on buddy

include/linux/mm.h | 35 +++++++++++++++++++++---
include/linux/mmzone.h | 2 ++
include/linux/page-isolation.h | 1 -
mm/page_alloc.c | 59 ++++++++++++++++++++++++++--------------
mm/page_isolation.c | 5 +---
5 files changed, 73 insertions(+), 29 deletions(-)

--
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/