|
|
@@ -49,7 +49,7 @@ static inline unsigned int order_to_size(int order)
|
|
|
|
|
|
struct ion_system_heap {
|
|
|
struct ion_heap heap;
|
|
|
- struct ion_page_pool **pools;
|
|
|
+ struct ion_page_pool *pools[0];
|
|
|
};
|
|
|
|
|
|
static struct page *alloc_buffer_page(struct ion_system_heap *heap,
|
|
|
@@ -264,16 +264,15 @@ struct ion_heap *ion_system_heap_create(struct ion_platform_heap *unused)
|
|
|
struct ion_system_heap *heap;
|
|
|
int i;
|
|
|
|
|
|
- heap = kzalloc(sizeof(struct ion_system_heap), GFP_KERNEL);
|
|
|
+ heap = kzalloc(sizeof(struct ion_system_heap) +
|
|
|
+ sizeof(struct ion_page_pool *) * num_orders,
|
|
|
+ GFP_KERNEL);
|
|
|
if (!heap)
|
|
|
return ERR_PTR(-ENOMEM);
|
|
|
heap->heap.ops = &system_heap_ops;
|
|
|
heap->heap.type = ION_HEAP_TYPE_SYSTEM;
|
|
|
heap->heap.flags = ION_HEAP_FLAG_DEFER_FREE;
|
|
|
- heap->pools = kzalloc(sizeof(struct ion_page_pool *) * num_orders,
|
|
|
- GFP_KERNEL);
|
|
|
- if (!heap->pools)
|
|
|
- goto free_heap;
|
|
|
+
|
|
|
for (i = 0; i < num_orders; i++) {
|
|
|
struct ion_page_pool *pool;
|
|
|
gfp_t gfp_flags = low_order_gfp_flags;
|
|
|
@@ -292,8 +291,6 @@ struct ion_heap *ion_system_heap_create(struct ion_platform_heap *unused)
|
|
|
destroy_pools:
|
|
|
while (i--)
|
|
|
ion_page_pool_destroy(heap->pools[i]);
|
|
|
- kfree(heap->pools);
|
|
|
-free_heap:
|
|
|
kfree(heap);
|
|
|
return ERR_PTR(-ENOMEM);
|
|
|
}
|