};
void *cpu_addr;
unsigned long size;
- int fd;
int index;
struct dma_buf_attachment *attach;
struct sg_table *sgt;
int fd)
{
struct vcodec_drm_buffer *drm_buffer = NULL, *n;
+ struct dma_buf *dma_buf = NULL;
+
+ dma_buf = dma_buf_get(fd);
list_for_each_entry_safe(drm_buffer, n, &session_info->buffer_list,
list) {
- if (drm_buffer->fd == fd)
+ if (drm_buffer->dma_buf == dma_buf) {
+ dma_buf_put(dma_buf);
return drm_buffer;
+ }
}
+ dma_buf_put(dma_buf);
+
return NULL;
}
list_for_each_entry_safe(drm_buffer, n, &session_info->buffer_list,
list) {
vpu_iommu_debug(session_info->debug_level, DEBUG_IOMMU_OPS_DUMP,
- "index %d drm_buffer fd %d cpu_addr %p\n",
+ "index %d drm_buffer dma_buf %p cpu_addr %p\n",
drm_buffer->index,
- drm_buffer->fd, drm_buffer->cpu_addr);
+ drm_buffer->dma_buf, drm_buffer->cpu_addr);
}
}
struct device *dev = session_info->dev;
struct dma_buf_attachment *attach;
struct sg_table *sgt;
+ struct dma_buf *dma_buf;
int ret = 0;
+ dma_buf = dma_buf_get(fd);
+ if (IS_ERR(dma_buf)) {
+ ret = PTR_ERR(dma_buf);
+ return ret;
+ }
+
list_for_each_entry_safe(drm_buffer, n,
&session_info->buffer_list, list) {
- if (drm_buffer->fd == fd)
+ if (drm_buffer->dma_buf == dma_buf) {
+ dma_buf_put(dma_buf);
return drm_buffer->index;
+ }
}
drm_buffer = kzalloc(sizeof(*drm_buffer), GFP_KERNEL);
return ret;
}
- drm_buffer->dma_buf = dma_buf_get(fd);
- if (IS_ERR(drm_buffer->dma_buf)) {
- ret = PTR_ERR(drm_buffer->dma_buf);
- kfree(drm_buffer);
- return ret;
- }
- drm_buffer->fd = fd;
+ drm_buffer->dma_buf = dma_buf;
drm_buffer->session_info = session_info;
kref_init(&drm_buffer->ref);