FROMLIST: dma-buf: dma-heap: Keep track of the heap device struct
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> Link: https://lore.kernel.org/lkml/20201110034934.70898-7-john.stultz@linaro.org/ Bug: 170887642 Change-Id: I55b8df5fd9fd46795a8f0171318895297d2dd379
This commit is contained in:
@@ -30,6 +30,7 @@
|
||||
* @heap_devt heap device node
|
||||
* @list list head connecting to list of heaps
|
||||
* @heap_cdev heap char device
|
||||
* @heap_dev heap device struct
|
||||
*
|
||||
* Represents a heap of memory from which buffers can be made.
|
||||
*/
|
||||
@@ -41,6 +42,7 @@ struct dma_heap {
|
||||
struct list_head list;
|
||||
struct cdev heap_cdev;
|
||||
struct kref refcount;
|
||||
struct device *heap_dev;
|
||||
};
|
||||
|
||||
static LIST_HEAD(heap_list);
|
||||
@@ -264,11 +266,22 @@ void dma_heap_put(struct dma_heap *h)
|
||||
mutex_unlock(&heap_list_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
|
||||
struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info)
|
||||
{
|
||||
struct dma_heap *heap, *err_ret;
|
||||
struct device *dev_ret;
|
||||
int minor;
|
||||
unsigned int minor;
|
||||
int ret;
|
||||
|
||||
if (!exp_info->name || !strcmp(exp_info->name, "")) {
|
||||
@@ -319,16 +332,20 @@ struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info)
|
||||
goto err1;
|
||||
}
|
||||
|
||||
dev_ret = device_create(dma_heap_class,
|
||||
heap->heap_dev = device_create(dma_heap_class,
|
||||
NULL,
|
||||
heap->heap_devt,
|
||||
NULL,
|
||||
heap->name);
|
||||
if (IS_ERR(dev_ret)) {
|
||||
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;
|
||||
}
|
||||
|
||||
/* Make sure it doesn't disappear on us */
|
||||
heap->heap_dev = get_device(heap->heap_dev);
|
||||
|
||||
/* Add heap to the list */
|
||||
mutex_lock(&heap_list_lock);
|
||||
list_add(&heap->list, &heap_list);
|
||||
|
@@ -50,6 +50,15 @@ struct dma_heap_export_info {
|
||||
*/
|
||||
void *dma_heap_get_drvdata(struct dma_heap *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);
|
||||
|
||||
/**
|
||||
* dma_heap_add - adds a heap to dmabuf heaps
|
||||
* @exp_info: information needed to register this heap
|
||||
|
Reference in New Issue
Block a user