diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2017-02-15 17:01:12 -0800 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-02-15 17:01:12 -0800 |
commit | 9e0a375b5ea926769af4a4b1819ee6760cfa743f (patch) | |
tree | d9a1da94614e7fbe2086084f472eb8178c4de19e /arch/arm64/mm/dma-mapping.c | |
parent | ea872c35b6fba50a8a9fa50bfe3cfa8b81c2b860 (diff) | |
parent | 335db258eb7c69f9229b48557b3f629f63dfb8de (diff) |
Merge "iommu: dma-mapping: alloc bitmap while fragmented"
Diffstat (limited to 'arch/arm64/mm/dma-mapping.c')
-rw-r--r-- | arch/arm64/mm/dma-mapping.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c index 2d3f1ab33f70..45c365290553 100644 --- a/arch/arm64/mm/dma-mapping.c +++ b/arch/arm64/mm/dma-mapping.c @@ -1927,7 +1927,11 @@ arm_iommu_create_mapping(struct bus_type *bus, dma_addr_t base, size_t size) if (!mapping) goto err; - mapping->bitmap = kzalloc(bitmap_size, GFP_KERNEL); + mapping->bitmap = kzalloc(bitmap_size, GFP_KERNEL | __GFP_NOWARN | + __GFP_NORETRY); + if (!mapping->bitmap) + mapping->bitmap = vzalloc(bitmap_size); + if (!mapping->bitmap) goto err2; @@ -1942,7 +1946,7 @@ arm_iommu_create_mapping(struct bus_type *bus, dma_addr_t base, size_t size) kref_init(&mapping->kref); return mapping; err3: - kfree(mapping->bitmap); + kvfree(mapping->bitmap); err2: kfree(mapping); err: @@ -1956,7 +1960,7 @@ static void release_iommu_mapping(struct kref *kref) container_of(kref, struct dma_iommu_mapping, kref); iommu_domain_free(mapping->domain); - kfree(mapping->bitmap); + kvfree(mapping->bitmap); kfree(mapping); } |