On Thu, Jul 25, 2019 at 6:02 AM Christoph Hellwig <hch@xxxxxxxxxxxxx> wrote: > > > +struct system_heap { > > + struct dma_heap *heap; > > +} sys_heap; > > It seems like this structure could be removed and if would improve > the code flow. Good point. We actually keep a few things in the cma version of this, and I think I copied that over when I started here, but never cleaned it up. > > +static struct dma_heap_ops system_heap_ops = { > > + .allocate = system_heap_allocate, > > +}; > > + > > +static int system_heap_create(void) > > +{ > > + struct dma_heap_export_info exp_info; > > + int ret = 0; > > + > > + exp_info.name = "system_heap"; > > + exp_info.ops = &system_heap_ops; > > + exp_info.priv = &sys_heap; > > + > > + sys_heap.heap = dma_heap_add(&exp_info); > > + if (IS_ERR(sys_heap.heap)) > > + ret = PTR_ERR(sys_heap.heap); > > + > > + return ret; > > The data structures here seem a little odd. I think you want to: Yea. There is some awkwardness, and some is due to using the helper infrastructure, but some is just clutter and I'll revise that. > - mark all dma_heap_ops instanes consts, as we generally do that for > all structures containing function pointers Done. > - move the name into dma_heap_ops. I'm not sure this is useful, as there are cases where there are multiple heaps that use the same ops. Specifically the multiple CMA heaps. > - remove the dma_heap_export_info structure, which is a bit pointless Andrew and I went back and forth on this a bit. It looks like he just responded so I'll defer to his answer. > - don't bother setting a private data, as you don't need it. > If other heaps need private data I'd suggest to switch to embedding > the dma_heap structure into containing structure insted so that you > can use container_of to get at it. Fair. There is some cases where we use the priv data, but I'll try to see if I can minimize it. And again, I think having the dma_heap structure be internal/private to the heap implementations made it difficult to be a contained structure. So it goes back to the export_info structure point above. > - also why is the free callback passed as a callback rather than > kept in dma_heap_ops, next to the paired alloc one? This one is due to the optional heap helpers infrastructure. If a heap implements its own dma_buf_ops, it can have release directly call the buffer free function. However, since we tried to minimize the code we have the heap helpers infrastructure which implements a shared dma_buf_op, we need some way for the helper release function to call back to the heap specific free. We could put it in the dma_heaps_ops like you suggest, but that brings some confusion as well, as nothing in the dma-heaps core would call it, it would only be a tool for the helper infrastructure to trace back to the heap specific free call. This is why its passed to the heap_helper initializer. I agree it feels a little odd, so I'd welcome alternate approaches. Very much appreciate the review and feedback! I'll try to address as much of this as I can in the next revision. thanks -john _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel