diff --git a/mm/cma.c b/mm/cma.c index 47538607045e..a7638d7487c4 100644 --- a/mm/cma.c +++ b/mm/cma.c @@ -42,6 +42,9 @@ #include "cma.h" +extern void lru_cache_disable(void); +extern void lru_cache_enable(void); + struct cma cma_areas[MAX_CMA_AREAS]; unsigned cma_area_count; @@ -466,6 +469,7 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align, if (bitmap_count > bitmap_maxno) goto out; + lru_cache_disable(); for (;;) { struct acr_info info = {0}; @@ -545,6 +549,7 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align, } } + lru_cache_enable(); trace_cma_alloc_finish(cma->name, pfn, page, count, align); trace_cma_alloc_info(cma->name, page, count, align, &cma_info);