static int mfc_release(struct file *file)
{
struct mfc_ctx *ctx = fh_to_mfc_ctx(file->private_data);
- struct mfc_dev *dev = NULL;
+ struct mfc_dev *dev = ctx->dev;
int ret = 0;
- dev = ctx->dev;
- if (!dev) {
- mfc_err_dev("no mfc device to run\n");
- return -EINVAL;
- }
-
mutex_lock(&dev->mfc_mutex);
mfc_info_ctx("MFC driver release is called [%d:%d], is_drm(%d)\n",
if (ret != DRMDRV_OK) {
mfc_err_ctx("failed MFC DRM F/W unprot(%#x)\n", ret);
call_dop(dev, dump_and_stop_debug_mode, dev);
- goto err_release;
}
}
#endif
- if (dev->nal_q_handle) {
- ret = mfc_nal_q_destroy(dev, dev->nal_q_handle);
- if (ret) {
- mfc_err_ctx("failed nal_q destroy\n");
- goto err_release;
- }
- }
+ if (dev->nal_q_handle)
+ mfc_nal_q_destroy(dev, dev->nal_q_handle);
}
mfc_qos_off(ctx);
mutex_unlock(&dev->mfc_mutex);
return ret;
-err_release:
- mfc_release_hwlock_ctx(ctx);
- mutex_unlock(&dev->mfc_mutex);
- return ret;
-
err_release_try:
mfc_release_hwlock_ctx(ctx);
mfc_cleanup_work_bit_and_try_run(ctx);
static int __mfc_nal_q_just_run(struct mfc_ctx *ctx, int need_cache_flush)
{
struct mfc_dev *dev = ctx->dev;
- unsigned int ret = -1;
-
nal_queue_handle *nal_q_handle = dev->nal_q_handle;
-
- if (!nal_q_handle) {
- mfc_err_dev("nal_q_handle is NULL\n");
- return ret;
- }
+ unsigned int ret = -1;
switch (nal_q_handle->nal_q_state) {
case NAL_Q_STATE_CREATED:
/* Run an operation on hardware */
int mfc_just_run(struct mfc_dev *dev, int new_ctx_index)
{
- struct mfc_ctx *ctx;
+ struct mfc_ctx *ctx = dev->ctx[new_ctx_index];
unsigned int ret = 0;
int need_cache_flush = 0;
- ctx = dev->ctx[new_ctx_index];
- if (!ctx) {
- mfc_err_dev("no mfc context to run\n");
- return -EINVAL;
- }
-
if (ctx->state == MFCINST_RUNNING)
mfc_clean_ctx_int_flags(ctx);
return nal_q_out_handle;
}
-static int __mfc_nal_q_destroy_in_q(struct mfc_dev *dev,
+static void __mfc_nal_q_destroy_in_q(struct mfc_dev *dev,
nal_queue_in_handle *nal_q_in_handle)
{
mfc_debug_enter();
- if (!nal_q_in_handle)
- return -EINVAL;
-
- mfc_mem_ion_free(dev, &nal_q_in_handle->in_buf);
- if (nal_q_in_handle)
+ if (nal_q_in_handle) {
+ mfc_mem_ion_free(dev, &nal_q_in_handle->in_buf);
kfree(nal_q_in_handle);
+ }
mfc_debug_leave();
-
- return 0;
}
-static int __mfc_nal_q_destroy_out_q(struct mfc_dev *dev,
+static void __mfc_nal_q_destroy_out_q(struct mfc_dev *dev,
nal_queue_out_handle *nal_q_out_handle)
{
mfc_debug_enter();
- if (!nal_q_out_handle)
- return -EINVAL;
-
- mfc_mem_ion_free(dev, &nal_q_out_handle->out_buf);
- if (nal_q_out_handle)
+ if (nal_q_out_handle) {
+ mfc_mem_ion_free(dev, &nal_q_out_handle->out_buf);
kfree(nal_q_out_handle);
+ }
mfc_debug_leave();
-
- return 0;
}
/*
return nal_q_handle;
}
-int mfc_nal_q_destroy(struct mfc_dev *dev, nal_queue_handle *nal_q_handle)
+void mfc_nal_q_destroy(struct mfc_dev *dev, nal_queue_handle *nal_q_handle)
{
- int ret = 0;
-
mfc_debug_enter();
- if (!nal_q_handle) {
- mfc_err_dev("[NALQ] there isn't nal_q_handle\n");
- return -EINVAL;
- }
-
- ret = __mfc_nal_q_destroy_out_q(dev, nal_q_handle->nal_q_out_handle);
- if (ret) {
- mfc_err_dev("[NALQ] failed nal_q_out_handle destroy\n");
- return ret;
- }
+ if (nal_q_handle->nal_q_out_handle)
+ __mfc_nal_q_destroy_out_q(dev, nal_q_handle->nal_q_out_handle);
- ret = __mfc_nal_q_destroy_in_q(dev, nal_q_handle->nal_q_in_handle);
- if (ret) {
- mfc_err_dev("[NALQ] failed nal_q_in_handle destroy\n");
- return ret;
- }
+ if (nal_q_handle->nal_q_in_handle)
+ __mfc_nal_q_destroy_in_q(dev, nal_q_handle->nal_q_in_handle);
kfree(nal_q_handle);
dev->nal_q_handle = NULL;
mfc_debug_leave();
-
- return ret;
}
void mfc_nal_q_init(struct mfc_dev *dev, nal_queue_handle *nal_q_handle)
void mfc_nal_q_cleanup_clock(struct mfc_dev *dev);
nal_queue_handle *mfc_nal_q_create(struct mfc_dev *dev);
-int mfc_nal_q_destroy(struct mfc_dev *dev, nal_queue_handle *nal_q_handle);
+void mfc_nal_q_destroy(struct mfc_dev *dev, nal_queue_handle *nal_q_handle);
void mfc_nal_q_init(struct mfc_dev *dev, nal_queue_handle *nal_q_handle);
void mfc_nal_q_start(struct mfc_dev *dev, nal_queue_handle *nal_q_handle);