Loading mm/cma.c +33 −1 Original line number Diff line number Diff line Loading @@ -358,6 +358,32 @@ int __init cma_declare_contiguous(phys_addr_t base, return ret; } #ifdef CONFIG_CMA_DEBUG static void cma_debug_show_areas(struct cma *cma) { unsigned long next_zero_bit, next_set_bit; unsigned long start = 0; unsigned int nr_zero, nr_total = 0; mutex_lock(&cma->lock); pr_info("number of available pages: "); for (;;) { next_zero_bit = find_next_zero_bit(cma->bitmap, cma->count, start); if (next_zero_bit >= cma->count) break; next_set_bit = find_next_bit(cma->bitmap, cma->count, next_zero_bit); nr_zero = next_set_bit - next_zero_bit; pr_cont("%s%u@%lu", nr_total ? "+" : "", nr_zero, next_zero_bit); nr_total += nr_zero; start = next_zero_bit + nr_zero; } pr_cont("=> %u free of %lu total pages\n", nr_total, cma->count); mutex_unlock(&cma->lock); } #else static inline void cma_debug_show_areas(struct cma *cma) { } #endif /** * cma_alloc() - allocate pages from contiguous area * @cma: Contiguous memory region for which the allocation is performed. Loading @@ -374,8 +400,8 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align) unsigned long start = 0; unsigned long bitmap_maxno, bitmap_no, bitmap_count; struct page *page = NULL; int ret; int retry_after_sleep = 0; int ret = -ENOMEM; if (!cma || !cma->count) return NULL; Loading Loading @@ -452,6 +478,12 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align) trace_cma_alloc(pfn, page, count, align); if (ret) { pr_info("%s: alloc failed, req-size: %zu pages, ret: %d\n", __func__, count, ret); cma_debug_show_areas(cma); } pr_debug("%s(): returned %p\n", __func__, page); return page; } Loading Loading
mm/cma.c +33 −1 Original line number Diff line number Diff line Loading @@ -358,6 +358,32 @@ int __init cma_declare_contiguous(phys_addr_t base, return ret; } #ifdef CONFIG_CMA_DEBUG static void cma_debug_show_areas(struct cma *cma) { unsigned long next_zero_bit, next_set_bit; unsigned long start = 0; unsigned int nr_zero, nr_total = 0; mutex_lock(&cma->lock); pr_info("number of available pages: "); for (;;) { next_zero_bit = find_next_zero_bit(cma->bitmap, cma->count, start); if (next_zero_bit >= cma->count) break; next_set_bit = find_next_bit(cma->bitmap, cma->count, next_zero_bit); nr_zero = next_set_bit - next_zero_bit; pr_cont("%s%u@%lu", nr_total ? "+" : "", nr_zero, next_zero_bit); nr_total += nr_zero; start = next_zero_bit + nr_zero; } pr_cont("=> %u free of %lu total pages\n", nr_total, cma->count); mutex_unlock(&cma->lock); } #else static inline void cma_debug_show_areas(struct cma *cma) { } #endif /** * cma_alloc() - allocate pages from contiguous area * @cma: Contiguous memory region for which the allocation is performed. Loading @@ -374,8 +400,8 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align) unsigned long start = 0; unsigned long bitmap_maxno, bitmap_no, bitmap_count; struct page *page = NULL; int ret; int retry_after_sleep = 0; int ret = -ENOMEM; if (!cma || !cma->count) return NULL; Loading Loading @@ -452,6 +478,12 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align) trace_cma_alloc(pfn, page, count, align); if (ret) { pr_info("%s: alloc failed, req-size: %zu pages, ret: %d\n", __func__, count, ret); cma_debug_show_areas(cma); } pr_debug("%s(): returned %p\n", __func__, page); return page; } Loading