As one of my coworkers pointed out I meant for that to be:

struct ion_cma_heap {
        struct ion heap heap;
        struct device *dev;
}

So containerof actually works...

Rebecca

On Mar 21, 2013 3:59 PM, "Rebecca Schultz Zavin" <rebecca@android.com> wrote:
Rather than coping the private data into the heap, in several other heaps that have required private information, I've put the ion_heap struct inside another structure that also contained the private fields.  So you would have:

struct ion_cma_heap {
        struct ion_heap *heap;
        struct device *dev;
        .... other private data ...
};

Then you can retrieve the private data using container_of on the heap.  It's a little more verbose, but I think a lot more flexible. 

Rebecca

On Wed, Mar 20, 2013 at 10:33 AM, Benjamin Gaignard <benjamin.gaignard@linaro.org> wrote:
copy private field from platform configuration to internal heap structure.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>
---
 drivers/gpu/ion/ion_heap.c |    1 +
 drivers/gpu/ion/ion_priv.h |    2 ++
 2 files changed, 3 insertions(+)

diff --git a/drivers/gpu/ion/ion_heap.c b/drivers/gpu/ion/ion_heap.c
index 225ef94..3ec6357 100644
--- a/drivers/gpu/ion/ion_heap.c
+++ b/drivers/gpu/ion/ion_heap.c
@@ -162,6 +162,7 @@ struct ion_heap *ion_heap_create(struct ion_platform_heap *heap_data)

        heap->name = heap_data->name;
        heap->id = heap_data->id;
+       heap->priv = heap_data->priv;
        return heap;
 }

diff --git a/drivers/gpu/ion/ion_priv.h b/drivers/gpu/ion/ion_priv.h
index 50568147..c79a942 100644
--- a/drivers/gpu/ion/ion_priv.h
+++ b/drivers/gpu/ion/ion_priv.h
@@ -132,6 +132,7 @@ struct ion_heap_ops {
  * @task:              task struct of deferred free thread
  * @debug_show:                called when heap debug file is read to add any
  *                     heap specific debug info to output
+ * @priv:              heap private data
  *
  * Represents a pool of memory from which buffers can be made.  In some
  * systems the only heap is regular system memory allocated via vmalloc.
@@ -151,6 +152,7 @@ struct ion_heap {
        wait_queue_head_t waitqueue;
        struct task_struct *task;
        int (*debug_show)(struct ion_heap *heap, struct seq_file *, void *);
+       void *priv;
 };

 /**
--
1.7.10