diff options
Diffstat (limited to 'drivers/gpu/nvgpu/os')
-rw-r--r-- | drivers/gpu/nvgpu/os/linux/cde.c | 5 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/os/linux/ioctl_channel.c | 17 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/os/linux/ioctl_tsg.c | 2 |
3 files changed, 15 insertions, 9 deletions
diff --git a/drivers/gpu/nvgpu/os/linux/cde.c b/drivers/gpu/nvgpu/os/linux/cde.c index a15ef560..7b2cba7d 100644 --- a/drivers/gpu/nvgpu/os/linux/cde.c +++ b/drivers/gpu/nvgpu/os/linux/cde.c | |||
@@ -1272,7 +1272,7 @@ __releases(&cde_app->mutex) | |||
1272 | nvgpu_log_info(g, "double finish cde context %p on channel %p", | 1272 | nvgpu_log_info(g, "double finish cde context %p on channel %p", |
1273 | cde_ctx, ch); | 1273 | cde_ctx, ch); |
1274 | 1274 | ||
1275 | if (ch->has_timedout) { | 1275 | if (gk20a_channel_check_timedout(ch)) { |
1276 | if (cde_ctx->is_temporary) { | 1276 | if (cde_ctx->is_temporary) { |
1277 | nvgpu_warn(g, | 1277 | nvgpu_warn(g, |
1278 | "cde: channel had timed out" | 1278 | "cde: channel had timed out" |
@@ -1299,8 +1299,9 @@ __releases(&cde_app->mutex) | |||
1299 | msecs_to_jiffies(CTX_DELETE_TIME)); | 1299 | msecs_to_jiffies(CTX_DELETE_TIME)); |
1300 | } | 1300 | } |
1301 | 1301 | ||
1302 | if (!ch->has_timedout) | 1302 | if (!gk20a_channel_check_timedout(ch)) { |
1303 | gk20a_cde_ctx_release(cde_ctx); | 1303 | gk20a_cde_ctx_release(cde_ctx); |
1304 | } | ||
1304 | } | 1305 | } |
1305 | 1306 | ||
1306 | static int gk20a_cde_load(struct gk20a_cde_ctx *cde_ctx) | 1307 | static int gk20a_cde_load(struct gk20a_cde_ctx *cde_ctx) |
diff --git a/drivers/gpu/nvgpu/os/linux/ioctl_channel.c b/drivers/gpu/nvgpu/os/linux/ioctl_channel.c index 45d49474..d0d4b1af 100644 --- a/drivers/gpu/nvgpu/os/linux/ioctl_channel.c +++ b/drivers/gpu/nvgpu/os/linux/ioctl_channel.c | |||
@@ -636,8 +636,9 @@ static int gk20a_channel_wait_semaphore(struct channel_gk20a *ch, | |||
636 | int ret = 0; | 636 | int ret = 0; |
637 | 637 | ||
638 | /* do not wait if channel has timed out */ | 638 | /* do not wait if channel has timed out */ |
639 | if (ch->has_timedout) | 639 | if (gk20a_channel_check_timedout(ch)) { |
640 | return -ETIMEDOUT; | 640 | return -ETIMEDOUT; |
641 | } | ||
641 | 642 | ||
642 | dmabuf = dma_buf_get(id); | 643 | dmabuf = dma_buf_get(id); |
643 | if (IS_ERR(dmabuf)) { | 644 | if (IS_ERR(dmabuf)) { |
@@ -656,7 +657,8 @@ static int gk20a_channel_wait_semaphore(struct channel_gk20a *ch, | |||
656 | 657 | ||
657 | ret = NVGPU_COND_WAIT_INTERRUPTIBLE( | 658 | ret = NVGPU_COND_WAIT_INTERRUPTIBLE( |
658 | &ch->semaphore_wq, | 659 | &ch->semaphore_wq, |
659 | *semaphore == payload || ch->has_timedout, | 660 | *semaphore == payload || |
661 | gk20a_channel_check_timedout(ch), | ||
660 | timeout); | 662 | timeout); |
661 | 663 | ||
662 | dma_buf_kunmap(dmabuf, offset >> PAGE_SHIFT, data); | 664 | dma_buf_kunmap(dmabuf, offset >> PAGE_SHIFT, data); |
@@ -680,8 +682,9 @@ static int gk20a_channel_wait(struct channel_gk20a *ch, | |||
680 | 682 | ||
681 | nvgpu_log_fn(g, " "); | 683 | nvgpu_log_fn(g, " "); |
682 | 684 | ||
683 | if (ch->has_timedout) | 685 | if (gk20a_channel_check_timedout(ch)) { |
684 | return -ETIMEDOUT; | 686 | return -ETIMEDOUT; |
687 | } | ||
685 | 688 | ||
686 | switch (args->type) { | 689 | switch (args->type) { |
687 | case NVGPU_WAIT_TYPE_NOTIFIER: | 690 | case NVGPU_WAIT_TYPE_NOTIFIER: |
@@ -716,7 +719,8 @@ static int gk20a_channel_wait(struct channel_gk20a *ch, | |||
716 | * calling this ioctl */ | 719 | * calling this ioctl */ |
717 | remain = NVGPU_COND_WAIT_INTERRUPTIBLE( | 720 | remain = NVGPU_COND_WAIT_INTERRUPTIBLE( |
718 | &ch->notifier_wq, | 721 | &ch->notifier_wq, |
719 | notif->status == 0 || ch->has_timedout, | 722 | notif->status == 0 || |
723 | gk20a_channel_check_timedout(ch), | ||
720 | args->timeout); | 724 | args->timeout); |
721 | 725 | ||
722 | if (remain == 0 && notif->status != 0) { | 726 | if (remain == 0 && notif->status != 0) { |
@@ -786,8 +790,9 @@ static int gk20a_ioctl_channel_submit_gpfifo( | |||
786 | profile = gk20a_fifo_profile_acquire(ch->g); | 790 | profile = gk20a_fifo_profile_acquire(ch->g); |
787 | gk20a_fifo_profile_snapshot(profile, PROFILE_IOCTL_ENTRY); | 791 | gk20a_fifo_profile_snapshot(profile, PROFILE_IOCTL_ENTRY); |
788 | 792 | ||
789 | if (ch->has_timedout) | 793 | if (gk20a_channel_check_timedout(ch)) { |
790 | return -ETIMEDOUT; | 794 | return -ETIMEDOUT; |
795 | } | ||
791 | 796 | ||
792 | nvgpu_get_fence_args(&args->fence, &fence); | 797 | nvgpu_get_fence_args(&args->fence, &fence); |
793 | submit_flags = | 798 | submit_flags = |
@@ -1249,7 +1254,7 @@ long gk20a_channel_ioctl(struct file *filp, | |||
1249 | } | 1254 | } |
1250 | case NVGPU_IOCTL_CHANNEL_GET_TIMEDOUT: | 1255 | case NVGPU_IOCTL_CHANNEL_GET_TIMEDOUT: |
1251 | ((struct nvgpu_get_param_args *)buf)->value = | 1256 | ((struct nvgpu_get_param_args *)buf)->value = |
1252 | ch->has_timedout; | 1257 | gk20a_channel_check_timedout(ch); |
1253 | break; | 1258 | break; |
1254 | case NVGPU_IOCTL_CHANNEL_ENABLE: | 1259 | case NVGPU_IOCTL_CHANNEL_ENABLE: |
1255 | err = gk20a_busy(ch->g); | 1260 | err = gk20a_busy(ch->g); |
diff --git a/drivers/gpu/nvgpu/os/linux/ioctl_tsg.c b/drivers/gpu/nvgpu/os/linux/ioctl_tsg.c index b0cdf5e5..c5079bd6 100644 --- a/drivers/gpu/nvgpu/os/linux/ioctl_tsg.c +++ b/drivers/gpu/nvgpu/os/linux/ioctl_tsg.c | |||
@@ -141,7 +141,7 @@ static int gk20a_tsg_unbind_channel_fd(struct tsg_gk20a *tsg, int ch_fd) | |||
141 | * Mark the channel timedout since channel unbound from TSG | 141 | * Mark the channel timedout since channel unbound from TSG |
142 | * has no context of its own so it can't serve any job | 142 | * has no context of its own so it can't serve any job |
143 | */ | 143 | */ |
144 | ch->has_timedout = true; | 144 | gk20a_channel_set_timedout(ch); |
145 | 145 | ||
146 | out: | 146 | out: |
147 | gk20a_channel_put(ch); | 147 | gk20a_channel_put(ch); |