lkml.org 
[lkml]   [2026]   [Mar]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
SubjectRe: [PATCH v3 1/6] dma-buf: dma-heap: Keep track of the heap device struct
From
On 3/6/26 4:36 AM, Albert Esteve wrote:
> From: John Stultz <john.stultz@linaro.org>
>
> Keep track of the heap device struct.
>
> This will be useful for special DMA allocations
> and actions.
>
> Signed-off-by: John Stultz <john.stultz@linaro.org>
> Reviewed-by: Maxime Ripard <mripard@kernel.org>
> Signed-off-by: Albert Esteve <aesteve@redhat.com>
> ---
> drivers/dma-buf/dma-heap.c | 34 ++++++++++++++++++++++++++--------
> include/linux/dma-heap.h | 2 ++
> 2 files changed, 28 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/dma-buf/dma-heap.c b/drivers/dma-buf/dma-heap.c
> index ac5f8685a6494..1124d63eb1398 100644
> --- a/drivers/dma-buf/dma-heap.c
> +++ b/drivers/dma-buf/dma-heap.c
> @@ -31,6 +31,7 @@
> * @heap_devt: heap device node
> * @list: list head connecting to list of heaps
> * @heap_cdev: heap char device
> + * @heap_dev: heap device
> *
> * Represents a heap of memory from which buffers can be made.
> */
> @@ -41,6 +42,7 @@ struct dma_heap {
> dev_t heap_devt;
> struct list_head list;
> struct cdev heap_cdev;
> + struct device *heap_dev;
> };
>
> static LIST_HEAD(heap_list);
> @@ -223,6 +225,19 @@ const char *dma_heap_get_name(struct dma_heap *heap)
> }
> EXPORT_SYMBOL_NS_GPL(dma_heap_get_name, "DMA_BUF_HEAP");
>
> +/**
> + * dma_heap_get_dev() - get device struct for the heap
> + * @heap: DMA-Heap to retrieve device struct from
> + *
> + * Returns:
> + * The device struct for the heap.
> + */
> +struct device *dma_heap_get_dev(struct dma_heap *heap)
> +{
> + return heap->heap_dev;
> +}
> +EXPORT_SYMBOL_NS_GPL(dma_heap_get_dev, "DMA_BUF_HEAP");
> +
> /**
> * dma_heap_add - adds a heap to dmabuf heaps
> * @exp_info: information needed to register this heap
> @@ -230,7 +245,6 @@ EXPORT_SYMBOL_NS_GPL(dma_heap_get_name, "DMA_BUF_HEAP");
> struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info)
> {
> struct dma_heap *heap, *h, *err_ret;
> - struct device *dev_ret;
> unsigned int minor;
> int ret;
>
> @@ -272,14 +286,14 @@ struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info)
> goto err1;
> }
>
> - dev_ret = device_create(dma_heap_class,
> - NULL,
> - heap->heap_devt,
> - NULL,
> - heap->name);
> - if (IS_ERR(dev_ret)) {
> + heap->heap_dev = device_create(dma_heap_class,
> + NULL,
> + heap->heap_devt,
> + NULL,
> + heap->name);
> + if (IS_ERR(heap->heap_dev)) {
> pr_err("dma_heap: Unable to create device\n");
> - err_ret = ERR_CAST(dev_ret);
> + err_ret = ERR_CAST(heap->heap_dev);
> goto err2;
> }
>
> @@ -295,6 +309,10 @@ struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info)
> }
> }
>
> + /* Make sure it doesn't disappear on us */
> + heap->heap_dev = get_device(heap->heap_dev);
> +
> +

Is this actually something that matters or could happen? Seems you
just remove it in the next patch anyway.

Andrew

> /* Add heap to the list */
> list_add(&heap->list, &heap_list);
> mutex_unlock(&heap_list_lock);
> diff --git a/include/linux/dma-heap.h b/include/linux/dma-heap.h
> index 648328a64b27e..493085e69b70e 100644
> --- a/include/linux/dma-heap.h
> +++ b/include/linux/dma-heap.h
> @@ -12,6 +12,7 @@
> #include <linux/types.h>
>
> struct dma_heap;
> +struct device;
>
> /**
> * struct dma_heap_ops - ops to operate on a given heap
> @@ -43,6 +44,7 @@ struct dma_heap_export_info {
> void *dma_heap_get_drvdata(struct dma_heap *heap);
>
> const char *dma_heap_get_name(struct dma_heap *heap);
> +struct device *dma_heap_get_dev(struct dma_heap *heap);
>
> struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info);
>
>


\
 
 \ /
  Last update: 2026-03-10 15:42    [from the cache]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and my Meterkast|Read the blog