hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/drivers/video/rockchip/rga3/rga_job.c
....@@ -536,8 +536,21 @@
536536 __func__, acquire_fence_fd);
537537 return -EINVAL;
538538 }
539
- /* close acquire fence fd */
540
- ksys_close(acquire_fence_fd);
539
+
540
+ if (!request->feature.user_close_fence) {
541
+ /* close acquire fence fd */
542
+#ifdef CONFIG_NO_GKI
543
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
544
+ close_fd(acquire_fence_fd);
545
+#else
546
+ ksys_close(acquire_fence_fd);
547
+#endif
548
+#else
549
+ pr_err("Please update the driver to v1.2.28 to prevent acquire_fence_fd leaks.");
550
+ return -EFAULT;
551
+#endif
552
+ }
553
+
541554
542555 ret = rga_dma_fence_get_status(acquire_fence);
543556 if (ret < 0) {
....@@ -646,7 +659,8 @@
646659 scheduler->ops->soft_reset(scheduler);
647660 }
648661
649
- pr_err("reset core[%d] by request abort", scheduler->core);
662
+ pr_err("reset core[%d] by request[%d] abort",
663
+ scheduler->core, request->id);
650664 running_abort_count++;
651665 }
652666 }
....@@ -753,12 +767,13 @@
753767 } else if (!test_bit(RGA_JOB_STATE_DONE, &job->state) &&
754768 test_bit(RGA_JOB_STATE_FINISH, &job->state)) {
755769 spin_unlock_irqrestore(&scheduler->irq_lock, flags);
756
- pr_err("hardware has finished, but the software has timeout!\n");
770
+ pr_err("request[%d] hardware has finished, but the software has timeout!\n",
771
+ request->id);
757772 return -EBUSY;
758773 } else if (!test_bit(RGA_JOB_STATE_DONE, &job->state) &&
759774 !test_bit(RGA_JOB_STATE_FINISH, &job->state)) {
760775 spin_unlock_irqrestore(&scheduler->irq_lock, flags);
761
- pr_err("hardware has timeout.\n");
776
+ pr_err("request[%d] hardware has timeout.\n", request->id);
762777 return -EBUSY;
763778 }
764779 }
....@@ -831,7 +846,7 @@
831846 struct rga_pending_request_manager *request_manager = rga_drvdata->pend_request_manager;
832847
833848 if (rga_request_commit(request))
834
- pr_err("rga request commit failed!\n");
849
+ pr_err("rga request[%d] commit failed!\n", request->id);
835850
836851 mutex_lock(&request_manager->lock);
837852 rga_request_put(request);
....@@ -845,6 +860,7 @@
845860 struct rga_pending_request_manager *request_manager;
846861 struct rga_request *request;
847862 int finished_count, failed_count;
863
+ bool is_finished = false;
848864 unsigned long flags;
849865
850866 request_manager = rga_drvdata->pend_request_manager;
....@@ -893,7 +909,7 @@
893909
894910 rga_dma_fence_signal(request->release_fence, request->ret);
895911
896
- wake_up(&request->finished_wq);
912
+ is_finished = true;
897913
898914 if (DEBUGGER_EN(MSG))
899915 pr_info("request[%d] finished %d failed %d\n",
....@@ -906,7 +922,12 @@
906922 }
907923
908924 mutex_lock(&request_manager->lock);
925
+
926
+ if (is_finished)
927
+ wake_up(&request->finished_wq);
928
+
909929 rga_request_put(request);
930
+
910931 mutex_unlock(&request_manager->lock);
911932
912933 return 0;
....@@ -960,6 +981,7 @@
960981 request->sync_mode = user_request->sync_mode;
961982 request->mpi_config_flags = user_request->mpi_config_flags;
962983 request->acquire_fence_fd = user_request->acquire_fence_fd;
984
+ request->feature = task_list[0].feature;
963985
964986 spin_unlock_irqrestore(&request->lock, flags);
965987
....@@ -1095,7 +1117,7 @@
10951117 request_commit:
10961118 ret = rga_request_commit(request);
10971119 if (ret < 0) {
1098
- pr_err("rga request commit failed!\n");
1120
+ pr_err("rga request[%d] commit failed!\n", request->id);
10991121 goto err_put_release_fence;
11001122 }
11011123