* This function allocates contiguous memory buffer for specified device. It
  * first tries to use device specific contiguous memory area if available or
  * the default global one, then tries a fallback allocation of normal pages.
+ *
+ * Note that it byapss one-page size of allocations from the global area as
+ * the addresses within one page are always contiguous, so there is no need
+ * to waste CMA pages for that kind; it also helps reduce fragmentations.
  */
 struct page *dma_alloc_contiguous(struct device *dev, size_t size, gfp_t gfp)
 {
        int node = dev ? dev_to_node(dev) : NUMA_NO_NODE;
        size_t count = PAGE_ALIGN(size) >> PAGE_SHIFT;
        size_t align = get_order(PAGE_ALIGN(size));
-       struct cma *cma = dev_get_cma_area(dev);
        struct page *page = NULL;
+       struct cma *cma = NULL;
+
+       if (dev && dev->cma_area)
+               cma = dev->cma_area;
+       else if (count > 1)
+               cma = dma_contiguous_default_area;
 
        /* CMA can be used only in the context which permits sleeping */
        if (cma && gfpflags_allow_blocking(gfp)) {