forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-11 072de836f53be56a70cecf70b43ae43b7ce17376
kernel/drivers/video/rockchip/rga3/rga_job.c
....@@ -536,12 +536,21 @@
536536 __func__, acquire_fence_fd);
537537 return -EINVAL;
538538 }
539
- /* close acquire fence fd */
539
+
540
+ if (!request->feature.user_close_fence) {
541
+ /* close acquire fence fd */
542
+#ifdef CONFIG_NO_GKI
540543 #if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
541
- close_fd(acquire_fence_fd);
544
+ close_fd(acquire_fence_fd);
542545 #else
543
- ksys_close(acquire_fence_fd);
546
+ ksys_close(acquire_fence_fd);
544547 #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
+
545554
546555 ret = rga_dma_fence_get_status(acquire_fence);
547556 if (ret < 0) {
....@@ -650,7 +659,8 @@
650659 scheduler->ops->soft_reset(scheduler);
651660 }
652661
653
- 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);
654664 running_abort_count++;
655665 }
656666 }
....@@ -757,12 +767,13 @@
757767 } else if (!test_bit(RGA_JOB_STATE_DONE, &job->state) &&
758768 test_bit(RGA_JOB_STATE_FINISH, &job->state)) {
759769 spin_unlock_irqrestore(&scheduler->irq_lock, flags);
760
- 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);
761772 return -EBUSY;
762773 } else if (!test_bit(RGA_JOB_STATE_DONE, &job->state) &&
763774 !test_bit(RGA_JOB_STATE_FINISH, &job->state)) {
764775 spin_unlock_irqrestore(&scheduler->irq_lock, flags);
765
- pr_err("hardware has timeout.\n");
776
+ pr_err("request[%d] hardware has timeout.\n", request->id);
766777 return -EBUSY;
767778 }
768779 }
....@@ -835,7 +846,7 @@
835846 struct rga_pending_request_manager *request_manager = rga_drvdata->pend_request_manager;
836847
837848 if (rga_request_commit(request))
838
- pr_err("rga request commit failed!\n");
849
+ pr_err("rga request[%d] commit failed!\n", request->id);
839850
840851 mutex_lock(&request_manager->lock);
841852 rga_request_put(request);
....@@ -849,6 +860,7 @@
849860 struct rga_pending_request_manager *request_manager;
850861 struct rga_request *request;
851862 int finished_count, failed_count;
863
+ bool is_finished = false;
852864 unsigned long flags;
853865
854866 request_manager = rga_drvdata->pend_request_manager;
....@@ -897,7 +909,7 @@
897909
898910 rga_dma_fence_signal(request->release_fence, request->ret);
899911
900
- wake_up(&request->finished_wq);
912
+ is_finished = true;
901913
902914 if (DEBUGGER_EN(MSG))
903915 pr_info("request[%d] finished %d failed %d\n",
....@@ -910,7 +922,12 @@
910922 }
911923
912924 mutex_lock(&request_manager->lock);
925
+
926
+ if (is_finished)
927
+ wake_up(&request->finished_wq);
928
+
913929 rga_request_put(request);
930
+
914931 mutex_unlock(&request_manager->lock);
915932
916933 return 0;
....@@ -964,6 +981,7 @@
964981 request->sync_mode = user_request->sync_mode;
965982 request->mpi_config_flags = user_request->mpi_config_flags;
966983 request->acquire_fence_fd = user_request->acquire_fence_fd;
984
+ request->feature = task_list[0].feature;
967985
968986 spin_unlock_irqrestore(&request->lock, flags);
969987
....@@ -1099,7 +1117,7 @@
10991117 request_commit:
11001118 ret = rga_request_commit(request);
11011119 if (ret < 0) {
1102
- pr_err("rga request commit failed!\n");
1120
+ pr_err("rga request[%d] commit failed!\n", request->id);
11031121 goto err_put_release_fence;
11041122 }
11051123