From 4942a0ef0b31fb22aff5fa65f61bd04159edfa63 Mon Sep 17 00:00:00 2001 From: Ding Wei Date: Wed, 29 Apr 2020 20:46:03 +0800 Subject: [PATCH] video: rockchip: mpp: mpp->rw_sem ==> mpp->iommu_info->rw_sem Change-Id: I26be1d109b211d9e95fcf4f42236338bcc64e880 Signed-off-by: Ding Wei --- drivers/video/rockchip/mpp/mpp_common.c | 25 ++++++++++++------------- drivers/video/rockchip/mpp/mpp_common.h | 2 -- drivers/video/rockchip/mpp/mpp_iommu.c | 1 + drivers/video/rockchip/mpp/mpp_iommu.h | 2 ++ 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/drivers/video/rockchip/mpp/mpp_common.c b/drivers/video/rockchip/mpp/mpp_common.c index 47689947b2ce..da2435f3e76e 100644 --- a/drivers/video/rockchip/mpp/mpp_common.c +++ b/drivers/video/rockchip/mpp/mpp_common.c @@ -372,7 +372,7 @@ static int mpp_dev_reset(struct mpp_dev *mpp) if (mpp->hw_ops->reduce_freq) mpp->hw_ops->reduce_freq(mpp); /* FIXME lock resource lock of the other devices in combo */ - down_write(&mpp->rw_sem); + down_write(&mpp->iommu_info->rw_sem); down_write(&mpp->reset_group->rw_sem); atomic_set(&mpp->reset_request, 0); mpp_iommu_detach(mpp->iommu_info); @@ -390,7 +390,7 @@ static int mpp_dev_reset(struct mpp_dev *mpp) mpp_iommu_attach(mpp->iommu_info); up_write(&mpp->reset_group->rw_sem); - up_write(&mpp->rw_sem); + up_write(&mpp->iommu_info->rw_sem); dev_info(mpp->dev, "reset done\n"); @@ -837,9 +837,9 @@ static int mpp_process_request(struct mpp_session *session, return -EINVAL; mpp_session_clear(mpp, session); - down_write(&mpp->rw_sem); + down_write(&mpp->iommu_info->rw_sem); ret = mpp_dma_session_destroy(session->dma); - up_write(&mpp->rw_sem); + up_write(&mpp->iommu_info->rw_sem); } return ret; } break; @@ -866,10 +866,10 @@ static int mpp_process_request(struct mpp_session *session, struct mpp_dma_buffer *buffer; int fd = data[i]; - down_read(&mpp->rw_sem); + down_read(&mpp->iommu_info->rw_sem); buffer = mpp_dma_import_fd(mpp->iommu_info, session->dma, fd); - up_read(&mpp->rw_sem); + up_read(&mpp->iommu_info->rw_sem); if (IS_ERR_OR_NULL(buffer)) { mpp_err("can not import fd %d\n", fd); return -EINVAL; @@ -1080,9 +1080,9 @@ static int mpp_dev_release(struct inode *inode, struct file *filp) /* remove this filp from the asynchronusly notified filp's */ mpp_session_clear(mpp, session); - down_read(&mpp->rw_sem); + down_read(&mpp->iommu_info->rw_sem); mpp_dma_session_destroy(session->dma); - up_read(&mpp->rw_sem); + up_read(&mpp->iommu_info->rw_sem); } kfifo_free(&session->done_fifo); @@ -1132,9 +1132,9 @@ mpp_task_attach_fd(struct mpp_task *task, int fd) if (!mem_region) return ERR_PTR(-ENOMEM); - down_read(&mpp->rw_sem); + down_read(&mpp->iommu_info->rw_sem); buffer = mpp_dma_import_fd(mpp->iommu_info, dma, fd); - up_read(&mpp->rw_sem); + up_read(&mpp->iommu_info->rw_sem); if (IS_ERR_OR_NULL(buffer)) { mpp_err("can't import dma-buf %d\n", fd); goto fail; @@ -1323,9 +1323,9 @@ int mpp_task_finalize(struct mpp_session *session, list_for_each_entry_safe(mem_region, n, &task->mem_region_list, reg_link) { - down_read(&mpp->rw_sem); + down_read(&mpp->iommu_info->rw_sem); mpp_dma_release(session->dma, mem_region->hdl); - up_read(&mpp->rw_sem); + up_read(&mpp->iommu_info->rw_sem); list_del_init(&mem_region->reg_link); kfree(mem_region); } @@ -1438,7 +1438,6 @@ int mpp_dev_probe(struct mpp_dev *mpp, mpp->hw_ops = mpp->var->hw_ops; mpp->dev_ops = mpp->var->dev_ops; - init_rwsem(&mpp->rw_sem); atomic_set(&mpp->reset_request, 0); atomic_set(&mpp->total_running, 0); diff --git a/drivers/video/rockchip/mpp/mpp_common.h b/drivers/video/rockchip/mpp/mpp_common.h index 3ac73faa5c73..d54c190bb9c7 100644 --- a/drivers/video/rockchip/mpp/mpp_common.h +++ b/drivers/video/rockchip/mpp/mpp_common.h @@ -189,8 +189,6 @@ struct mpp_dev { struct mpp_grf_info *grf_info; struct mpp_iommu_info *iommu_info; - struct rw_semaphore rw_sem; - atomic_t reset_request; atomic_t total_running; /* task for work queue */ diff --git a/drivers/video/rockchip/mpp/mpp_iommu.c b/drivers/video/rockchip/mpp/mpp_iommu.c index 14cc134b2459..c00c1247c65c 100644 --- a/drivers/video/rockchip/mpp/mpp_iommu.c +++ b/drivers/video/rockchip/mpp/mpp_iommu.c @@ -390,6 +390,7 @@ mpp_iommu_probe(struct device *dev) } info->dev = dev; info->pdev = pdev; + init_rwsem(&info->rw_sem); info->group = iommu_group_get(dev); if (!info->group) { diff --git a/drivers/video/rockchip/mpp/mpp_iommu.h b/drivers/video/rockchip/mpp/mpp_iommu.h index e33b3ff77623..f9b195e91217 100644 --- a/drivers/video/rockchip/mpp/mpp_iommu.h +++ b/drivers/video/rockchip/mpp/mpp_iommu.h @@ -59,6 +59,8 @@ struct mpp_rk_iommu { }; struct mpp_iommu_info { + struct rw_semaphore rw_sem; + struct device *dev; struct platform_device *pdev; struct iommu_domain *domain;