2013/03/05 15:57, Marek Szyprowski wrote: > Hello, > > Contiguous Memory Allocator is very sensitive about migration failures > of the individual pages. A single page, which causes permanent migration > failure can break large conitguous allocations and cause the failure of > a multimedia device driver. > > One of the known issues with migration of CMA pages are the problems of > migrating the anonymous user pages, for which the others called > get_user_pages(). This takes a reference to the given user pages to let > kernel to operate directly on the page content. This is usually used for > preventing swaping out the page contents and doing direct DMA to/from > userspace. > > To solving this issue requires preventing locking of the pages, which > are placed in CMA regions, for a long time. Our idea is to migrate > anonymous page content before locking the page in get_user_pages(). This > cannot be done automatically, as get_user_pages() interface is used very > often for various operations, which usually last for a short period of > time (like for example exec syscall). We have added a new flag > indicating that the given get_user_space() call will grab pages for a > long time, thus it is suitable to use the migration workaround in such > cases. > > The proposed extensions is used by V4L2/VideoBuf2 > (drivers/media/v4l2-core/videobuf2-dma-contig.c), but that is not the > only place which might benefit from it, like any driver which use DMA to > userspace with get_user_pages(). This one is provided to demonstrate the > use case. > > I would like to hear some comments on the presented approach. What do > you think about it? Is there a chance to get such workaround merged at > some point to mainline? I'm interested in your idea since it seems that the idea solves my issue: https://lkml.org/lkml/2012/11/29/69 So I want to apply your idea to a memory hot plug. Thanks, Yasuaki Ishimatsu > > Best regards > Marek Szyprowski > Samsung Poland R&D Center > > > Patch summary: > > Marek Szyprowski (5): > mm: introduce migrate_replace_page() for migrating page to the given > target > mm: get_user_pages: use static inline > mm: get_user_pages: use NON-MOVABLE pages when FOLL_DURABLE flag is > set > mm: get_user_pages: migrate out CMA pages when FOLL_DURABLE flag is > set > media: vb2: use FOLL_DURABLE and __get_user_pages() to avoid CMA > migration issues > > drivers/media/v4l2-core/videobuf2-dma-contig.c | 8 +- > include/linux/highmem.h | 12 ++- > include/linux/migrate.h | 5 + > include/linux/mm.h | 76 ++++++++++++- > mm/internal.h | 12 +++ > mm/memory.c | 136 +++++++++++------------- > mm/migrate.c | 59 ++++++++++ > 7 files changed, 225 insertions(+), 83 deletions(-) > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>