video: rockchip: rga3: modify the process of session exit

When the session exits, there is no need to operate the rga_job directly.

Update driver version to 1.2.21

Signed-off-by: Yu Qiaowei <cerf.yu@rock-chips.com>
Change-Id: I0369dce427dc749795803eae064dc80e33747a7e
This commit is contained in:
Yu Qiaowei
2022-10-24 11:59:36 +08:00
committed by Tao Huang
parent dc81be56db
commit b7cda70045
4 changed files with 30 additions and 56 deletions

View File

@@ -87,7 +87,7 @@
#define DRIVER_MAJOR_VERISON 1
#define DRIVER_MINOR_VERSION 2
#define DRIVER_REVISION_VERSION 20
#define DRIVER_REVISION_VERSION 21
#define DRIVER_PATCH_VERSION
#define DRIVER_VERSION (STR(DRIVER_MAJOR_VERISON) "." STR(DRIVER_MINOR_VERSION) \

View File

@@ -21,8 +21,6 @@ enum job_flags {
RGA_JOB_UNSUPPORT_RGA_MMU = 1 << 4,
};
void rga_job_session_destroy(struct rga_session *session);
void rga_job_scheduler_dump_info(struct rga_scheduler_t *scheduler);
void rga_job_done(struct rga_scheduler_t *scheduler, int ret);
struct rga_job *rga_job_commit(struct rga_req *rga_command_base, struct rga_request *request);
@@ -36,6 +34,7 @@ struct rga_request *rga_request_lookup(struct rga_pending_request_manager *reque
uint32_t id);
int rga_request_commit(struct rga_request *user_request);
void rga_request_session_destroy_abort(struct rga_session *session);
int rga_request_put(struct rga_request *request);
void rga_request_get(struct rga_request *request);
int rga_request_free(struct rga_request *request);

View File

@@ -604,29 +604,7 @@ static struct rga_session *rga_session_init(void)
static int rga_session_deinit(struct rga_session *session)
{
pid_t pid;
int request_id;
struct rga_pending_request_manager *request_manager;
struct rga_request *request;
pid = current->pid;
request_manager = rga_drvdata->pend_request_manager;
mutex_lock(&request_manager->lock);
idr_for_each_entry(&request_manager->request_idr, request, request_id) {
if (session == request->session) {
pr_err("[pid:%d] destroy request[%d] when the user exits",
pid, request->id);
rga_request_put(request);
}
}
mutex_unlock(&request_manager->lock);
rga_job_session_destroy(session);
rga_request_session_destroy_abort(session);
rga_mm_session_release_buffer(session);
rga_session_free_remove_idr(session);

View File

@@ -49,35 +49,6 @@ static int rga_job_cleanup(struct rga_job *job)
return 0;
}
void rga_job_session_destroy(struct rga_session *session)
{
struct rga_scheduler_t *scheduler = NULL;
struct rga_job *job_pos, *job_q;
int i;
unsigned long flags;
for (i = 0; i < rga_drvdata->num_of_scheduler; i++) {
scheduler = rga_drvdata->scheduler[i];
spin_lock_irqsave(&scheduler->irq_lock, flags);
list_for_each_entry_safe(job_pos, job_q, &scheduler->todo_list, head) {
if (session == job_pos->session) {
list_del(&job_pos->head);
spin_unlock_irqrestore(&scheduler->irq_lock, flags);
rga_job_cleanup(job_pos);
spin_lock_irqsave(&scheduler->irq_lock, flags);
}
}
spin_unlock_irqrestore(&scheduler->irq_lock, flags);
}
}
static int rga_job_judgment_support_core(struct rga_job *job)
{
int ret = 0;
@@ -731,6 +702,31 @@ static void rga_request_release_abort(struct rga_request *request, int err_code)
mutex_unlock(&request_manager->lock);
}
void rga_request_session_destroy_abort(struct rga_session *session)
{
int request_id;
struct rga_request *request;
struct rga_pending_request_manager *request_manager;
request_manager = rga_drvdata->pend_request_manager;
if (request_manager == NULL) {
pr_err("rga_pending_request_manager is null!\n");
return;
}
mutex_lock(&request_manager->lock);
idr_for_each_entry(&request_manager->request_idr, request, request_id) {
if (session == request->session) {
pr_err("[tgid:%d pid:%d] destroy request[%d] when the user exits",
session->tgid, current->pid, request->id);
rga_request_put(request);
}
}
mutex_unlock(&request_manager->lock);
}
static int rga_request_wait(struct rga_request *request)
{
int left_time;
@@ -1148,10 +1144,11 @@ static void rga_request_kref_release(struct kref *ref)
request = container_of(ref, struct rga_request, refcount);
if (rga_dma_fence_get_status(request->release_fence) == 0)
rga_dma_fence_signal(request->release_fence, -EEXIST);
rga_dma_fence_signal(request->release_fence, -EFAULT);
spin_lock_irqsave(&request->lock, flags);
rga_request_put_current_mm(request);
rga_dma_fence_put(request->release_fence);
if (!request->is_running || request->is_done) {