diff options
| -rw-r--r-- | arch/arm/mm/dma-mapping.c | 4 | ||||
| -rw-r--r-- | include/asm-generic/dma-contiguous.h | 2 | ||||
| -rw-r--r-- | mm/page_alloc.c | 7 |
3 files changed, 9 insertions, 4 deletions
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index 4044abcf6f9d..655878bcc96d 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c | |||
| @@ -1091,7 +1091,7 @@ error: | |||
| 1091 | while (--i) | 1091 | while (--i) |
| 1092 | if (pages[i]) | 1092 | if (pages[i]) |
| 1093 | __free_pages(pages[i], 0); | 1093 | __free_pages(pages[i], 0); |
| 1094 | if (array_size < PAGE_SIZE) | 1094 | if (array_size <= PAGE_SIZE) |
| 1095 | kfree(pages); | 1095 | kfree(pages); |
| 1096 | else | 1096 | else |
| 1097 | vfree(pages); | 1097 | vfree(pages); |
| @@ -1106,7 +1106,7 @@ static int __iommu_free_buffer(struct device *dev, struct page **pages, size_t s | |||
| 1106 | for (i = 0; i < count; i++) | 1106 | for (i = 0; i < count; i++) |
| 1107 | if (pages[i]) | 1107 | if (pages[i]) |
| 1108 | __free_pages(pages[i], 0); | 1108 | __free_pages(pages[i], 0); |
| 1109 | if (array_size < PAGE_SIZE) | 1109 | if (array_size <= PAGE_SIZE) |
| 1110 | kfree(pages); | 1110 | kfree(pages); |
| 1111 | else | 1111 | else |
| 1112 | vfree(pages); | 1112 | vfree(pages); |
diff --git a/include/asm-generic/dma-contiguous.h b/include/asm-generic/dma-contiguous.h index c544356b374b..294b1e755ab2 100644 --- a/include/asm-generic/dma-contiguous.h +++ b/include/asm-generic/dma-contiguous.h | |||
| @@ -18,7 +18,7 @@ static inline void dev_set_cma_area(struct device *dev, struct cma *cma) | |||
| 18 | { | 18 | { |
| 19 | if (dev) | 19 | if (dev) |
| 20 | dev->cma_area = cma; | 20 | dev->cma_area = cma; |
| 21 | if (!dev || !dma_contiguous_default_area) | 21 | if (!dev && !dma_contiguous_default_area) |
| 22 | dma_contiguous_default_area = cma; | 22 | dma_contiguous_default_area = cma; |
| 23 | } | 23 | } |
| 24 | 24 | ||
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 44030096da63..4a4f9219683f 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
| @@ -5635,7 +5635,12 @@ static struct page * | |||
| 5635 | __alloc_contig_migrate_alloc(struct page *page, unsigned long private, | 5635 | __alloc_contig_migrate_alloc(struct page *page, unsigned long private, |
| 5636 | int **resultp) | 5636 | int **resultp) |
| 5637 | { | 5637 | { |
| 5638 | return alloc_page(GFP_HIGHUSER_MOVABLE); | 5638 | gfp_t gfp_mask = GFP_USER | __GFP_MOVABLE; |
| 5639 | |||
| 5640 | if (PageHighMem(page)) | ||
| 5641 | gfp_mask |= __GFP_HIGHMEM; | ||
| 5642 | |||
| 5643 | return alloc_page(gfp_mask); | ||
| 5639 | } | 5644 | } |
| 5640 | 5645 | ||
| 5641 | /* [start, end) must belong to a single zone. */ | 5646 | /* [start, end) must belong to a single zone. */ |
