|
@@ -100,8 +100,10 @@ void *dma_generic_alloc_coherent(struct device *dev, size_t size,
|
|
flag |= __GFP_ZERO;
|
|
flag |= __GFP_ZERO;
|
|
again:
|
|
again:
|
|
page = NULL;
|
|
page = NULL;
|
|
- if (!(flag & GFP_ATOMIC))
|
|
|
|
|
|
+ /* CMA can be used only in the context which permits sleeping */
|
|
|
|
+ if (flag & __GFP_WAIT)
|
|
page = dma_alloc_from_contiguous(dev, count, get_order(size));
|
|
page = dma_alloc_from_contiguous(dev, count, get_order(size));
|
|
|
|
+ /* fallback */
|
|
if (!page)
|
|
if (!page)
|
|
page = alloc_pages_node(dev_to_node(dev), flag, get_order(size));
|
|
page = alloc_pages_node(dev_to_node(dev), flag, get_order(size));
|
|
if (!page)
|
|
if (!page)
|