if (ret)
DRM_ERROR("failed to put m_node.\n");
}
+ c_node->last_buf_id[ops] = -1;
mutex_unlock(&c_node->mem_lock);
}
return -EFAULT;
}
+ c_node->last_buf_id[m_node->ops_id] = m_node->buf_id;
+
/* set address and enable irq */
if (ops->set_addr) {
ret = ops->set_addr(ippdrv->dev, &m_node->buf_info,
return;
}
+ event_work->buf_id[EXYNOS_DRM_OPS_SRC] =
+ c_node->last_buf_id[EXYNOS_DRM_OPS_SRC];
+ event_work->buf_id[EXYNOS_DRM_OPS_DST] =
+ c_node->last_buf_id[EXYNOS_DRM_OPS_DST];
+
/*
* IPP supports command thread, event thread synchronization.
* If IPP close immediately from user land, then IPP make
* @event_work: event work structure.
* @state: state of command node.
* @filp: associated file pointer.
+ * @last_buf_id: store the current processing frame buf id from userspace
*/
struct drm_exynos_ipp_cmd_node {
struct list_head list;
struct drm_exynos_ipp_event_work *event_work;
enum drm_exynos_ipp_state state;
struct drm_file *filp;
+ unsigned int last_buf_id[EXYNOS_DRM_OPS_MAX];
};
/*