summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c25
1 files changed, 6 insertions, 19 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c
index fbeb1e4a..6d0f0854 100644
--- a/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c
@@ -678,7 +678,7 @@ static int gk20a_channel_semaphore_wait_fd(
678 sema->timeline, 678 sema->timeline,
679 fp_sema, 679 fp_sema,
680 &c->semaphore_wq, 680 &c->semaphore_wq,
681 NULL, false, false); 681 false, false);
682 if (err) { 682 if (err) {
683 nvgpu_semaphore_put(fp_sema); 683 nvgpu_semaphore_put(fp_sema);
684 goto clean_up_priv_cmd; 684 goto clean_up_priv_cmd;
@@ -742,7 +742,7 @@ static int gk20a_channel_semaphore_wait_fd(
742 * already signaled 742 * already signaled
743 */ 743 */
744 err = gk20a_fence_from_semaphore(c->g, fence, sema->timeline, w->sema, 744 err = gk20a_fence_from_semaphore(c->g, fence, sema->timeline, w->sema,
745 &c->semaphore_wq, NULL, false, false); 745 &c->semaphore_wq, false, false);
746 if (err) 746 if (err)
747 goto clean_up_sema; 747 goto clean_up_sema;
748 748
@@ -787,7 +787,6 @@ clean_up_sync_fence:
787 787
788static int __gk20a_channel_semaphore_incr( 788static int __gk20a_channel_semaphore_incr(
789 struct gk20a_channel_sync *s, bool wfi_cmd, 789 struct gk20a_channel_sync *s, bool wfi_cmd,
790 struct sync_fence *dependency,
791 struct priv_cmd_entry *incr_cmd, 790 struct priv_cmd_entry *incr_cmd,
792 struct gk20a_fence *fence, 791 struct gk20a_fence *fence,
793 bool need_sync_fence) 792 bool need_sync_fence)
@@ -820,7 +819,7 @@ static int __gk20a_channel_semaphore_incr(
820 err = gk20a_fence_from_semaphore(c->g, fence, 819 err = gk20a_fence_from_semaphore(c->g, fence,
821 sp->timeline, semaphore, 820 sp->timeline, semaphore,
822 &c->semaphore_wq, 821 &c->semaphore_wq,
823 dependency, wfi_cmd, 822 wfi_cmd,
824 need_sync_fence); 823 need_sync_fence);
825 if (err) 824 if (err)
826 goto clean_up_sema; 825 goto clean_up_sema;
@@ -839,7 +838,6 @@ static int gk20a_channel_semaphore_incr_wfi(
839{ 838{
840 return __gk20a_channel_semaphore_incr(s, 839 return __gk20a_channel_semaphore_incr(s,
841 true /* wfi */, 840 true /* wfi */,
842 NULL,
843 entry, fence, true); 841 entry, fence, true);
844} 842}
845 843
@@ -854,7 +852,6 @@ static int gk20a_channel_semaphore_incr(
854 * a fence to user space. */ 852 * a fence to user space. */
855 return __gk20a_channel_semaphore_incr(s, 853 return __gk20a_channel_semaphore_incr(s,
856 false /* no wfi */, 854 false /* no wfi */,
857 NULL,
858 entry, fence, need_sync_fence); 855 entry, fence, need_sync_fence);
859} 856}
860 857
@@ -868,22 +865,12 @@ static int gk20a_channel_semaphore_incr_user(
868 bool register_irq) 865 bool register_irq)
869{ 866{
870#ifdef CONFIG_SYNC 867#ifdef CONFIG_SYNC
871 struct sync_fence *dependency = NULL;
872 int err; 868 int err;
873 869
874 if (wait_fence_fd >= 0) { 870 err = __gk20a_channel_semaphore_incr(s, wfi, entry, fence,
875 dependency = gk20a_sync_fence_fdget(wait_fence_fd); 871 need_sync_fence);
876 if (!dependency) 872 if (err)
877 return -EINVAL;
878 }
879
880 err = __gk20a_channel_semaphore_incr(s, wfi, dependency,
881 entry, fence, need_sync_fence);
882 if (err) {
883 if (dependency)
884 sync_fence_put(dependency);
885 return err; 873 return err;
886 }
887 874
888 return 0; 875 return 0;
889#else 876#else