Merge tag 'amd-drm-fixes-5.9-2020-08-20' of git://people.freedesktop.org/~agd5f/linux...
[linux-2.6-microblaze.git] / mm / cma.c
index 26ecff8..7f415d7 100644 (file)
--- a/mm/cma.c
+++ b/mm/cma.c
@@ -52,7 +52,7 @@ unsigned long cma_get_size(const struct cma *cma)
 
 const char *cma_get_name(const struct cma *cma)
 {
-       return cma->name ? cma->name : "(undefined)";
+       return cma->name;
 }
 
 static unsigned long cma_bitmap_aligned_mask(const struct cma *cma,
@@ -93,17 +93,15 @@ static void cma_clear_bitmap(struct cma *cma, unsigned long pfn,
        mutex_unlock(&cma->lock);
 }
 
-static int __init cma_activate_area(struct cma *cma)
+static void __init cma_activate_area(struct cma *cma)
 {
        unsigned long base_pfn = cma->base_pfn, pfn = base_pfn;
        unsigned i = cma->count >> pageblock_order;
        struct zone *zone;
 
        cma->bitmap = bitmap_zalloc(cma_bitmap_maxno(cma), GFP_KERNEL);
-       if (!cma->bitmap) {
-               cma->count = 0;
-               return -ENOMEM;
-       }
+       if (!cma->bitmap)
+               goto out_error;
 
        WARN_ON_ONCE(!pfn_valid(pfn));
        zone = page_zone(pfn_to_page(pfn));
@@ -133,25 +131,22 @@ static int __init cma_activate_area(struct cma *cma)
        spin_lock_init(&cma->mem_head_lock);
 #endif
 
-       return 0;
+       return;
 
 not_in_zone:
-       pr_err("CMA area %s could not be activated\n", cma->name);
        bitmap_free(cma->bitmap);
+out_error:
        cma->count = 0;
-       return -EINVAL;
+       pr_err("CMA area %s could not be activated\n", cma->name);
+       return;
 }
 
 static int __init cma_init_reserved_areas(void)
 {
        int i;
 
-       for (i = 0; i < cma_area_count; i++) {
-               int ret = cma_activate_area(&cma_areas[i]);
-
-               if (ret)
-                       return ret;
-       }
+       for (i = 0; i < cma_area_count; i++)
+               cma_activate_area(&cma_areas[i]);
 
        return 0;
 }
@@ -202,13 +197,12 @@ int __init cma_init_reserved_mem(phys_addr_t base, phys_addr_t size,
         * subsystems (like slab allocator) are available.
         */
        cma = &cma_areas[cma_area_count];
-       if (name) {
-               cma->name = name;
-       } else {
-               cma->name = kasprintf(GFP_KERNEL, "cma%d\n", cma_area_count);
-               if (!cma->name)
-                       return -ENOMEM;
-       }
+
+       if (name)
+               snprintf(cma->name, CMA_MAX_NAME, name);
+       else
+               snprintf(cma->name, CMA_MAX_NAME,  "cma%d\n", cma_area_count);
+
        cma->base_pfn = PFN_DOWN(base);
        cma->count = size >> PAGE_SHIFT;
        cma->order_per_bit = order_per_bit;
@@ -425,7 +419,7 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align,
        struct page *page = NULL;
        int ret = -ENOMEM;
 
-       if (!cma || !cma->count)
+       if (!cma || !cma->count || !cma->bitmap)
                return NULL;
 
        pr_debug("%s(cma %p, count %zu, align %d)\n", __func__, (void *)cma,