linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Andrew F. Davis" <afd@ti.com>
To: Christoph Hellwig <hch@infradead.org>,
	John Stultz <john.stultz@linaro.org>
Cc: lkml <linux-kernel@vger.kernel.org>,
	Laura Abbott <labbott@redhat.com>,
	Benjamin Gaignard <benjamin.gaignard@linaro.org>,
	Sumit Semwal <sumit.semwal@linaro.org>,
	Liam Mark <lmark@codeaurora.org>,
	Pratik Patel <pratikp@codeaurora.org>,
	Brian Starkey <Brian.Starkey@arm.com>,
	Vincent Donnefort <Vincent.Donnefort@arm.com>,
	Sudipto Paul <Sudipto.Paul@arm.com>,
	Chenbo Feng <fengc@google.com>,
	Alistair Strachan <astrachan@google.com>,
	Hridya Valsaraju <hridya@google.com>,
	<dri-devel@lists.freedesktop.org>
Subject: Re: [PATCH v7 3/5] dma-buf: heaps: Add system heap to dmabuf heaps
Date: Thu, 25 Jul 2019 14:55:18 -0400	[thread overview]
Message-ID: <e64aae4c-ec54-2507-cc78-a27d5093f793@ti.com> (raw)
In-Reply-To: <20190725130204.GG20286@infradead.org>

On 7/25/19 9:02 AM, Christoph Hellwig 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.
> 
>> +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:
> 
>  - mark all dma_heap_ops instanes consts, as we generally do that for
>    all structures containing function pointers
>  - move the name into dma_heap_ops.
>  - remove the dma_heap_export_info structure, which is a bit pointless


The idea here is to keep the struct dma_heap as an opaque pointer for
everyone but the core framework. No one should be touching the guts of
that struct (would be 'private' if we were using C++ but this is the
best we can do with C), exposing it to the exporters or the importers
will break this isolation.

This export style also matches DMA-BUF: you pass in a filled out _export
struct and it passes back a dma_buf handle. DMA-BUF unfortunately made
the internals of that struct public so they are widely used directly
(and abused in some cases) and that prevents the internals from being
easily refactored when needed.

Andrew


>  - 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.
>  - also why is the free callback passed as a callback rather than
>    kept in dma_heap_ops, next to the paired alloc one?
> 

  reply	other threads:[~2019-07-25 18:55 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-24  0:36 [PATCH v7 0/5] DMA-BUF Heaps (destaging ION) John Stultz
2019-07-24  0:36 ` [PATCH v7 1/5] dma-buf: Add dma-buf heaps framework John Stultz
2019-07-24  0:36 ` [PATCH v7 2/5] dma-buf: heaps: Add heap helpers John Stultz
2019-07-25 12:55   ` Christoph Hellwig
2019-07-24  0:36 ` [PATCH v7 3/5] dma-buf: heaps: Add system heap to dmabuf heaps John Stultz
2019-07-25 13:02   ` Christoph Hellwig
2019-07-25 18:55     ` Andrew F. Davis [this message]
2019-07-25 19:02     ` John Stultz
2019-07-24  0:36 ` [PATCH v7 4/5] dma-buf: heaps: Add CMA " John Stultz
2019-07-24  0:36 ` [PATCH v7 5/5] kselftests: Add dma-heap test John Stultz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e64aae4c-ec54-2507-cc78-a27d5093f793@ti.com \
    --to=afd@ti.com \
    --cc=Brian.Starkey@arm.com \
    --cc=Sudipto.Paul@arm.com \
    --cc=Vincent.Donnefort@arm.com \
    --cc=astrachan@google.com \
    --cc=benjamin.gaignard@linaro.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=fengc@google.com \
    --cc=hch@infradead.org \
    --cc=hridya@google.com \
    --cc=john.stultz@linaro.org \
    --cc=labbott@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lmark@codeaurora.org \
    --cc=pratikp@codeaurora.org \
    --cc=sumit.semwal@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).