| .. | .. |
|---|
| 536 | 536 | __func__, acquire_fence_fd); |
|---|
| 537 | 537 | return -EINVAL; |
|---|
| 538 | 538 | } |
|---|
| 539 | | - /* close acquire fence fd */ |
|---|
| 539 | + |
|---|
| 540 | + if (!request->feature.user_close_fence) { |
|---|
| 541 | + /* close acquire fence fd */ |
|---|
| 542 | +#ifdef CONFIG_NO_GKI |
|---|
| 540 | 543 | #if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0) |
|---|
| 541 | | - close_fd(acquire_fence_fd); |
|---|
| 544 | + close_fd(acquire_fence_fd); |
|---|
| 542 | 545 | #else |
|---|
| 543 | | - ksys_close(acquire_fence_fd); |
|---|
| 546 | + ksys_close(acquire_fence_fd); |
|---|
| 544 | 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 | + |
|---|
| 545 | 554 | |
|---|
| 546 | 555 | ret = rga_dma_fence_get_status(acquire_fence); |
|---|
| 547 | 556 | if (ret < 0) { |
|---|
| .. | .. |
|---|
| 650 | 659 | scheduler->ops->soft_reset(scheduler); |
|---|
| 651 | 660 | } |
|---|
| 652 | 661 | |
|---|
| 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); |
|---|
| 654 | 664 | running_abort_count++; |
|---|
| 655 | 665 | } |
|---|
| 656 | 666 | } |
|---|
| .. | .. |
|---|
| 757 | 767 | } else if (!test_bit(RGA_JOB_STATE_DONE, &job->state) && |
|---|
| 758 | 768 | test_bit(RGA_JOB_STATE_FINISH, &job->state)) { |
|---|
| 759 | 769 | 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); |
|---|
| 761 | 772 | return -EBUSY; |
|---|
| 762 | 773 | } else if (!test_bit(RGA_JOB_STATE_DONE, &job->state) && |
|---|
| 763 | 774 | !test_bit(RGA_JOB_STATE_FINISH, &job->state)) { |
|---|
| 764 | 775 | 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); |
|---|
| 766 | 777 | return -EBUSY; |
|---|
| 767 | 778 | } |
|---|
| 768 | 779 | } |
|---|
| .. | .. |
|---|
| 835 | 846 | struct rga_pending_request_manager *request_manager = rga_drvdata->pend_request_manager; |
|---|
| 836 | 847 | |
|---|
| 837 | 848 | if (rga_request_commit(request)) |
|---|
| 838 | | - pr_err("rga request commit failed!\n"); |
|---|
| 849 | + pr_err("rga request[%d] commit failed!\n", request->id); |
|---|
| 839 | 850 | |
|---|
| 840 | 851 | mutex_lock(&request_manager->lock); |
|---|
| 841 | 852 | rga_request_put(request); |
|---|
| .. | .. |
|---|
| 849 | 860 | struct rga_pending_request_manager *request_manager; |
|---|
| 850 | 861 | struct rga_request *request; |
|---|
| 851 | 862 | int finished_count, failed_count; |
|---|
| 863 | + bool is_finished = false; |
|---|
| 852 | 864 | unsigned long flags; |
|---|
| 853 | 865 | |
|---|
| 854 | 866 | request_manager = rga_drvdata->pend_request_manager; |
|---|
| .. | .. |
|---|
| 897 | 909 | |
|---|
| 898 | 910 | rga_dma_fence_signal(request->release_fence, request->ret); |
|---|
| 899 | 911 | |
|---|
| 900 | | - wake_up(&request->finished_wq); |
|---|
| 912 | + is_finished = true; |
|---|
| 901 | 913 | |
|---|
| 902 | 914 | if (DEBUGGER_EN(MSG)) |
|---|
| 903 | 915 | pr_info("request[%d] finished %d failed %d\n", |
|---|
| .. | .. |
|---|
| 910 | 922 | } |
|---|
| 911 | 923 | |
|---|
| 912 | 924 | mutex_lock(&request_manager->lock); |
|---|
| 925 | + |
|---|
| 926 | + if (is_finished) |
|---|
| 927 | + wake_up(&request->finished_wq); |
|---|
| 928 | + |
|---|
| 913 | 929 | rga_request_put(request); |
|---|
| 930 | + |
|---|
| 914 | 931 | mutex_unlock(&request_manager->lock); |
|---|
| 915 | 932 | |
|---|
| 916 | 933 | return 0; |
|---|
| .. | .. |
|---|
| 964 | 981 | request->sync_mode = user_request->sync_mode; |
|---|
| 965 | 982 | request->mpi_config_flags = user_request->mpi_config_flags; |
|---|
| 966 | 983 | request->acquire_fence_fd = user_request->acquire_fence_fd; |
|---|
| 984 | + request->feature = task_list[0].feature; |
|---|
| 967 | 985 | |
|---|
| 968 | 986 | spin_unlock_irqrestore(&request->lock, flags); |
|---|
| 969 | 987 | |
|---|
| .. | .. |
|---|
| 1099 | 1117 | request_commit: |
|---|
| 1100 | 1118 | ret = rga_request_commit(request); |
|---|
| 1101 | 1119 | if (ret < 0) { |
|---|
| 1102 | | - pr_err("rga request commit failed!\n"); |
|---|
| 1120 | + pr_err("rga request[%d] commit failed!\n", request->id); |
|---|
| 1103 | 1121 | goto err_put_release_fence; |
|---|
| 1104 | 1122 | } |
|---|
| 1105 | 1123 | |
|---|